PHP2Shell: cómo un fallo de memoria en PHP acaba en ejecución remota de código
PHP2Shell Deep Dive

Análisis técnico en primera persona de la cadena de exploits PHP2Shell, que combina CVE-2026-109618 y CVE-2026-109619 para pasar de un agotamiento de memoria (OOM) a la ejecución remota de código. El autor explica desde cero el uso de punteros obsoletos (stale pointers) y los Use-After-Free, el heap grooming, las fugas de punteros de heap y de código para derrotar ASLR, y la falsificación de estructuras como zend_string y HashTable para secuestrar pDestructor. Incluye además un apartado sobre por qué el ataque resulta mucho más difícil en un servidor de producción real.
PHP no le entrega un puntero obsoleto a un atacante a propósito... no, PHP no es tan generoso. Ese puntero es el resultado de un fallo sutil en cómo una función legítima de PHP interactúa con el mecanismo de manejo de errores del Zend Engine.
- djad04
Soy yo quien escribió esto. Originalmente intenté enviarlo yo mismo aquí pero sin mucha suerte, así que me alegra ver que otra persona lo compartió. ¡Gracias por traerlo aquí!
Además, si alguien tiene otro PoC funcional para esa build específica, agradecería mucho que lo compartiera, porque viendo cómo funciona el exploit, hace algo que no se hace en ninguna otra solución que encontré para otras builds; ninguna de ellas mantiene el lugar con un resize (la clave "1050" se envía dos veces) y luego hace que un buffer intermedio del siguiente campo ("1999") caiga ahí. Es el único enfoque que he visto que usa una clave repetida de esa manera.
Me pregunto si hay una forma más directa de lograr eso, como en las soluciones para otras builds. Si la hay, creo que sería interesante comparar la fiabilidad de los distintos enfoques basándose en la manipulación de memoria en sí misma, más que en cómo llegan al objetivo.
- t1234s
Lo más impresionante fue encadenar este exploit con otro exploit de Linux para obtener acceso como root.
Una semana para pasar a la historia.