lunes, 26 de octubre de 2026

Vulnerabilidades críticas en PHP (CVE-2026-109618 y CVE-2026-109619): qué son y cómo proteger tu web

 

Resumen rápido

El 21 de octubre de 2026, el proyecto PHP publicó actualizaciones de emergencia para corregir dos vulnerabilidades críticas de ejecución remota de código (RCE), identificadas como CVE-2026-109618 y CVE-2026-109619 y conocidas como "PHP2Shell". Ambas tienen una puntuación CVSS v4 de 9.2 y afectan al núcleo de PHP, no a un framework o CMS concreto. Si tu web usa PHP, esto te afecta.

Qué debes hacer: actualizar PHP a una versión corregida (8.5.12, 8.4.27, 8.3.36 u 8.2.35) y reiniciar los servicios. Si no puedes actualizar hoy, aplica las mitigaciones temporales que se explican más abajo.

Qué ha pasado

El 20 de octubre, el equipo de PHP avisó de que prepararía versiones de seguridad fuera de calendario. Ese mismo día se filtraron en un foro público datos sobre los fallos, antes de la divulgación coordinada, y el lanzamiento se mantuvo para el 21 de octubre. Según PHP, todas las instalaciones que sirven peticiones web están en riesgo: PHP-FPM, Apache con mod_php, php-cgi, FrankenPHP y LiteSpeed.

El riesgo es mayor con mod_php, porque existe un exploit demostrado en el que una petición sin autenticar puede activar el fallo antes de que se ejecute una sola línea del código de tu aplicación. PHP-FPM también se considera vulnerable, así que no conviene dejarlo para después.

A fecha de redacción, varias fuentes indican que se ha publicado una prueba de concepto, pero no habían confirmado explotación activa generalizada. Eso puede cambiar rápido, por lo que conviene actuar ya.

Los dos fallos, explicados

CVE-2026-109618: corrupción de memoria por falta de memoria (OOM). Cuando una petición supera el memory_limit, PHP aborta la petición de forma abrupta. Un atacante puede provocar ese error en un momento en que la memoria de la petición no está completamente inicializada, corromperla y acabar ejecutando código con los permisos del proceso del servidor web.

CVE-2026-109619: estado interno obsoleto (use-after-free). Parte del estado interno de la petición sobrevive más tiempo que la memoria de la que depende. Si no se limpia correctamente antes de liberar esa memoria, se puede acceder a ella después, lo que permite ejecutar código.

En ambos casos, el impacto potencial es el control del proceso web: leer archivos de tu sitio, robar credenciales de la base de datos, modificar contenido o instalar puertas traseras.

Versiones afectadas y versiones corregidas

Rama de PHP

Vulnerable si es anterior a

Actualiza a

8.5

8.5.12

8.5.12

8.4

8.4.27

8.4.27

8.3

8.3.36

8.3.36

8.2

8.2.35

8.2.35

Las ramas 8.1 y anteriores ya no reciben actualizaciones oficiales de la comunidad. Por la gravedad del caso, el equipo de PHP creó retroadaptaciones mínimas del parche para 7.4, 8.0 y 8.1, pero la recomendación es migrar a una versión con soporte, usar los paquetes de tu distribución o compilar desde el código fuente.

Cómo saber si estás afectado

  1. Comprueba la versión que usa tu servidor web, no solo la de la consola. Un php -v muestra la versión de línea de comandos, que puede ser distinta de la que usa PHP-FPM o Apache. Revisa también el panel de tu hosting.
  2. Ten en cuenta los parches retroadaptados. Algunas distribuciones (Debian, Ubuntu, RHEL y derivadas) corrigen el fallo sin cambiar el número de versión. En ese caso, confirma el estado en el aviso de seguridad de tu distribución o en el changelog del paquete.
  3. Inventaría todo lo que incluya PHP: contenedores Docker, imágenes base, aplicaciones empaquetadas, entornos de pruebas y servidores olvidados.

Cómo solucionarlo

Opción 1: servidor propio (Debian/Ubuntu)

sudo apt update
sudo apt upgrade

Después, reinicia los servicios para que los procesos antiguos no sigan en memoria (ajusta el nombre a tu versión):

sudo systemctl restart php8.3-fpm
sudo systemctl restart apache2   # o nginx, según tu caso

Opción 2: Docker

Actualiza la imagen base de PHP a una etiqueta corregida, reconstruye la imagen y vuelve a desplegar los contenedores. No basta con reiniciar un contenedor existente.

Opción 3: hosting compartido o gestionado

Entra en el panel (cPanel, Plesk u otro), cambia la versión de PHP a una rama corregida y, si tu proveedor aún no ha publicado la actualización, escríbele para preguntar por su calendario de parcheo.

Opción 4: WordPress, Drupal, Moodle, Laravel y otros

Estas aplicaciones no tienen el fallo, lo tiene el PHP sobre el que se ejecutan. Actualizar el CMS no soluciona el problema: hay que actualizar PHP en el servidor.

Si no puedes actualizar todavía: mitigaciones temporales

El propio proyecto PHP insiste en que actualizar es la única solución completa. Mientras tanto, estas medidas reducen el riesgo, pero no sustituyen al parche. Aplícalas en un lugar que la aplicación no pueda sobrescribir (por ejemplo, php_admin_value en el pool de PHP-FPM o en la configuración de Apache) y reinicia todos los procesos de PHP.

Ajuste

Para qué fallo

Nota

memory_limit = -1

CVE-2026-109618

Elimina el límite de memoria por petición. Comprueba que ningún pool, directorio o aplicación vuelva a fijar un límite finito.

post_max_size = 8M (32M si necesitas subir archivos) y upload_max_filesize por debajo

CVE-2026-109618

Mantiene pequeño el tamaño de las peticiones.

session.upload_progress.enabled = 0

CVE-2026-109619

Bloquea las vías confirmadas con sesiones, pero no todas las variantes posibles.

fatal_error_backtraces = 0 (solo PHP 8.5)

CVE-2026-109619

Bloquea la vía confirmada de trazas de errores fatales.

Importante: quitar el límite de memoria tiene un coste. Un script defectuoso o un atacante podrían consumir toda la RAM del servidor. Compénsalo limitando el tamaño de las peticiones en el servidor web o proxy (por ejemplo, client_max_body_size en Nginx o LimitRequestBody en Apache), fijando límites de memoria a nivel de contenedor o del sistema, y vigilando el consumo. Revierte estos cambios cuando hayas actualizado.

Medidas adicionales mientras llega el parche:

  • Poner un cortafuegos de aplicaciones web (WAF) delante del sitio.
  • Restringir el acceso por IP o añadir autenticación a nivel de red en paneles y áreas internas.
  • Si es viable, sacar temporalmente de línea los servicios PHP expuestos a internet que no sean esenciales.

Cómo detectar si ya te han atacado

Tras actualizar, revisa si hubo actividad sospechosa durante los días de exposición:

  • Procesos o comandos inesperados lanzados por el usuario del servidor web (www-data, apache, nginx).
  • Archivos nuevos o modificados en el directorio web, sobre todo archivos .php desconocidos.
  • Cuentas de usuario nuevas, tareas programadas (cron) que no reconozcas o claves SSH añadidas.
  • Conexiones salientes extrañas desde el servidor.
  • Picos de errores de memoria o peticiones anómalas muy grandes en los registros.

Si encuentras algo sospechoso, aísla el servidor, restaura desde una copia limpia anterior a la exposición y cambia contraseñas, claves de API y credenciales de base de datos.

Lista de comprobación final

  • Identificar todas las instalaciones de PHP (servidores, contenedores, hosting).
  • Actualizar a 8.5.12, 8.4.27, 8.3.36 u 8.2.35, o confirmar el parche de tu distribución.
  • Reiniciar PHP-FPM, Apache o el servidor que corresponda.
  • Si usas PHP 8.1 o anterior, planificar la migración a una versión con soporte.
  • Aplicar mitigaciones temporales si el parche no es inmediato, y revertirlas después.
  • Revisar registros y archivos en busca de actividad sospechosa.
  • Mantener copias de seguridad recientes y probadas.

Conclusión

Se trata de fallos en el propio intérprete de PHP, con un exploit demostrado y una prueba de concepto circulando. La buena noticia es que existe parche oficial y que aplicarlo es sencillo en la mayoría de los casos. Actualiza cuanto antes, reinicia los servicios y comprueba que la versión corregida es la que realmente atiende las peticiones de tu web.

lunes, 23 de octubre de 2023

Problemas con adaptador USB-C con RJ45 sobre Windows 11 y una VPN con Forticlient

 

En un portátil con la versión de Windows 11 “22H2” si le conecto un adaptador USB-C con RJ45 funciona correctamente. El problema es cuando intento activar la VPN con el cliente Forticlient VPN versión 7.0.9.0493.

Si la conexión de la VPN la hago por wifi funciona correctamente pero si intento hacerla por el conector USB-C RJ45 no funciona.

En este caso el adaptador USB-C tiene un chip Realtek RTL8153 y la versión del driver instalado por Windows 11 es la 1153.13.20.420.

No consigo hacerlo funcionar con la VPN por RJ45, leyendo por los foros de Forti veo que hay mucha gente que le esta pasando y uno de ellos indica que con una versión del driver inferior vuelve a funcionar correctamente.

En mi caso desinstale los drivers del adaptador e instale una versión para Windows 10 concretamente la versión 10.59.20.420, reinicie el portátil i funciona con el cliente Forticlient vpn por RJ45.

miércoles, 11 de octubre de 2023

Error al instalar un nuevo rol en Windows server 2019

Quería instalar un nuevo rol "DHCP" en un servidor con Windows Server 2019 y me encontré con este error.


1- Buscamos en la carpeta "windows\logs\CBS\" el archivo CBS.log y lo abrimos con el Bloc de Notas. 

2- Ahora buscaremos dentro del archivo para descubrir que ha fallado, en mi caso encuentro estas dos lineas.

CBS    Failed to pin deployment while resolving Update: Package_3368_for_KB5016690~31bf3856ad364e35~amd64~~10.0.1.10.5016690-6282_neutral from file: (null) [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]


CBS    Failed to bulk stage deployment manifest and pin deployment for package:Package_3785_for_KB5031361~31bf3856ad364e35~amd64~~10.0.1.9 [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]

3 - Podemos ver que ha fallado por no tener estos dos KB concretamente el KB5016690 y KB5031361.

4 - Los buscamos en internet y los descargamos.

5 - Una vez descargados los vamos a extraer para posteriormente instalarlos, primero creamos una carpeta llamada "KB" y dentro de ellos crearemos dos carpetas más "KB-1" y "KB-2". Movemos los dos archivos KB dentro de la carpeta "KB" y ejecutamos los siguientes comandos:

a. expand -f:* c:\kb\windows10.0-kb5016690-x64_7b9d9b5d259b0b5e7f5d8e2b144d967673a01655.msu c:\kb\kb-1

b. expand -f:* c:\kb\windows10.0-kb5031361-x64_961e82abaca6fa50073f65c96143730824956f7d.msu c:\kb\kb-2

 6 - Una vez expandido los archivos vamos a instalarlos.

a. dism /online /add-package /packagepath:c:\kb\kb-1\Windows10.0-KB5016690-x64.cab

b.  dism /online /add-package /packagepath:c:\kb\kb-2\Windows10.0-KB5031361-x64.cab 

7 - Ahora reiniciamos el servidor y volvemos a lanzar la instalación del rol. 

8 - En mi caso se ha solucionado.



miércoles, 23 de junio de 2021

Problemas con la conexión por cable en Windows 10

 Desde hace unos días mi ordenador conectado por cable se desconectaba de la red varias veces al día. Mi sistema actual es Windows 10 Pro versión 2004. Lo he podido solucionar de la siguiente manera:

1- Nos vamos a "Administrador de dispositivos" o ejecutamos "WIN+R" y escribimos "devmgmt.msc".

 


 

2- Buscamos "Adaptadores de red" y seleccionamos nuestro adaptador de red.

 

 

3- Con el botón derecho seleccionamos "Propiedades".

4- Hacemos clic en el botón "Configurar"

5- Nos vamos a la pestaña "Opciones avanzadas".

6- Buscamos en la lista la opción "Velocidad y Dúplex" y seleccionamos en la parte derecha la opción "100 Mbps".

 


 

Para mi esta opción me soluciono las desconexiones.


miércoles, 4 de diciembre de 2019

Actualizar licencia Windows 10 HOME a PRO


Hace unos días compramos un portátil en la empresa con una licencia de Windows 10 HOME (el modelo no existe con versión PRO) pero para la empresa necesitábamos la versión Windows 10 PRO.

Si intentabas cambiar la licencia por "Configuración", "Activación", "Cambiar la clave de producto" el sistema da un error "0xc004f050".

Después de un rato descubrí que era necesario utilizar una KEY de Microsoft “VK7JG-NPHTM-C97JM-9MPGT-3V66T” para poder realizar el upgrade de versión, pero nada daba otro error, concretamente "0x803fa067".

La solución fue solo desconectar de internet ya sea desconectando el cable de red o el WIFI. Una vez desconectado ya puedes poner la KEY de Microsoft y reinicias. Cuando vuelvas a encender el pc o portátil ya tendrás una versión PRO cambias la licencia por la nueva y listo.

jueves, 25 de abril de 2019

0xC1900101 – 0x4001E: Error de instalación en la fase SECOND_BOOT con un error durante la operación PRE_OOBE

Hoy quería actualizar mi versión de Windows 10 build 1709 a 1809 pero me encontraba con este error:



Después de buscar información sobre este error y probar varias cosas como:

1- Revisar la fecha y la hora del pc.
2- Actualizar los controladores.
3- Espacio en el disco duro.
4- Desconectar todos los dispositivos USB.
5- Desinstalar el antivirus.
6- Reparar Windows Update.

Encontré la solución al problema era por culpa del "Provisioning" del registro y de la carpeta del sistema!!

Explico lo que hice:

1- Accedemos al menú ejecutar pulsando image+R, escribimos "regedit" y "Aceptar".




2- Se abrirá la siguiente pantalla y buscamos la siguiente ruta.


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Provisioning





3- Ahora vamos a realizar un backup de esta clave por precaución ya que es peligroso tocar el registro de Windows. Nos ponemos encima de la clave "Provisioning" y clic con el botón derecho, aparecerá la opción "Exportar"



Ahora le damos el nombre que queramos por ejemplo "Provisioning" y aceptamos.



4- Una vez hecho el backup de la clave vamos a proceder a modificar los permisos de dicha clave. Botón derecho encima de la clave "Provisioning" y seleccionamos "Permisos".



5- Accedemos a "Opciones Avanzadas" y en la parte superior nos aparece el propietario que seguramente sera "SYSTEM". hacemos clic a la opción "Cambiar".



6- Ahora lo cambiamos por "Administradores".



7- En este paso marcamos la siguiente opción "Remplazar propietario en subcontenedores y objetos" y "Aplicar".



8- Ahora hacemos clic en el botón "Deshabilitar herencia" y nos aparecerá la siguiente pantalla.






9- Marcamos la opción "Convertir los permisos heredados en permisos explícitos en este objeto".



10- Ahora marcamos la opción "Remplazar todas las entradas de permisos de objetos secundarios por entradas de permisos heredables de este objeto" y "Aplicar".



11- Contestamos que "Si" a la ventana que nos aparecerá y luego aceptamos dos veces para cerrar las ventanas.



12- Ahora vamos a cambiar el nombre de la clave del registro de "Provisioning" a "Provisioning.old"


13- Después de esto podemos cerrar el registro de Windows y ahora vamos a realizar un cambio de nombre a la carpeta "Provisioning" ubicada en "C:\Windows\Provisioning". Abrimos un explorador de archivos y buscamos la ruta.



14- Botón derecho y le cambiamos el nombre de "Provisioning" por "Provisioning.old".



15- Ahora reiniciamos el PC y volvemos a ejecutar la actualización de Windows 10.

16- Si todo ha ido bien ya podremos eliminar la clave "Provisioning.old" del registro de Windows y también podremos eliminar la carpeta "Provisioning.old" dentro de la carpeta "C:\Windows".

miércoles, 20 de febrero de 2019

Asociación de archivos predeterminados en Windows 10 a través de GPO

El otro día me encontré con un problema, necesitaba cambiar el programa predeterminado de PDF por otro y necesitaba ejecutarlo a 100 equipos con Windows 10 Pro. Hice lo siguiente:

1 - Instalar la aplicación que queremos predeterminar a los PC clientes.

2 -  Exportar las asociaciones predeterminadas de archivos de un equipo, abrimos una ventana de  “Símbolo de sistema” y ejecutamos el siguiente comando:


 Dism.exe /online /Export-DefaultAppAssociations:C:\Temp\DefaultApplications.xml

 Esto nos generara un archivo llamado “DefaultApplications.xml” dentro de la carpeta “Temp”.




3 -  Ahora editamos el archivo “DefaultApplications.xml” y dejamos las asociaciones que queremos. En este caso las pertenecientes a los archivos que abriremos los PDF. 



4 - Una vez modificado el archivo XML lo ubicamos en un sitio donde lo puedan leer todos los equipos del dominio. 


5 - Ahora nos conectamos al servidor Domain Controller y creamos una nueva Política de Grupo llamada “Programas Predeterminados”.



6 - Buscamos “Computer Configuration” - “Polices” - “Administrative Templates” - “Windows Components” - “File Explorer” y abrimos “Set a default associations configuration file”



6- Editamos y marcamos “Enable” e indicamos la ruta donde tenemos el archivo XML y aplicamos.



7- Ahora reiniciamos un PC de un cliente y vemos si están hechos los cambios.