
Prueba de concepto (PoC) para CVE-2026-23918 (doble liberación en Apache mod_http2). Incluye DoS multimodo (Rapid-RST, Slow-Drip) y detección pasiva de RCE/vulnerabilidades para Apache 2.4.66.
Este es un exploit de prueba de concepto para la vulnerabilidad de doble liberación en mod_http2 de Apache (CVE-2026-23918). Es un bug desagradable que afecta a la ruta de limpieza de streams en h2_mplx.c.
Básicamente, si sincronizas bien el momento, puedes lograr que el servidor intente limpiar el mismo stream dos veces, lo que normalmente provoca un SIGSEGV y el bloqueo de un worker.

No seas estúpido. Usa esto solo para pruebas autorizadas. Si lo usas en algo que no te pertenece, es bajo tu propia responsabilidad. No soy responsable de lo que hagas con ello.
CVE-2026-23918 afecta a Apache 2.4.66. Fue parcheado en la versión 2.4.67 a principios de este mes (mayo de 2026).
Es una condición de carrera en cómo Apache maneja los frames RST_STREAM tempranos. Si un cliente envía un frame HEADERS y lo sigue inmediatamente con un RST_STREAM antes de que el multiplexor siquiera registre el stream, dos callbacks diferentes intentan hacer la limpieza.
Un callback maneja el reset, el otro maneja el cierre del stream. Ambos llaman a m_stream_cleanup(), que empuja el mismo puntero al array de limpieza. Cuando Apache finalmente intenta destruir esos streams, el segundo intento accede a memoria ya liberada.
DoS: Extremadamente fácil. Una sola conexión puede bloquear workers. Como Apache los reinicia, puedes mantener el servidor bajo presión constante con muy poco ancho de banda. Esto es lo que demuestra este PoC, y ha sido probado y confirmado funcionando en Apache 2.4.66.
RCE: Teóricamente posible pero no práctico para la mayoría de los atacantes. Requiere:
mmap, el predeterminado en Debian/Ubuntu/Docker)No existe ningún exploit RCE público, y construir uno es un esfuerzo de ingeniería nada trivial. El impacto real para la mayoría de las organizaciones es un DoS fiable, no un RCE.

Necesitarás Python 3.9+ y la librería h2.
git clone https://github.com/xeloxa/CVE-2026-23918-Apache-H2-PoC.git
cd CVE-2026-23918-Apache-H2-PoC
pip install -r requirements.txt
Bloqueando un laboratorio local:
# DoS agresivo
python3 cve-2026-23918.py --target 127.0.0.1 --port 8443 --mode dos
Comprobando si un objetivo podría ser vulnerable:
# Esto es pasivo, solo comprueba cabeceras y soporte H2
python3 cve-2026-23918.py --target example.com --mode rce-detect
Presión sostenida:
# Bajo ancho de banda, larga duración
python3 cve-2026-23918.py --target 10.0.0.50 --mode slow-drip -d 60
Si estás ejecutando la versión 2.4.66, necesitas migrar a la 2.4.67.
Si no puedes actualizar ahora mismo, puedes deshabilitar HTTP/2 añadiendo Protocols http/1.1 a tu configuración (o simplemente elimina h2 de la lista). No es ideal para el rendimiento, pero detiene el bloqueo.
He probado esto en varias compilaciones de Debian y Ubuntu. El DoS es muy fiable. El RCE es mucho más "delicado" y no contaría con él en un escenario del mundo real a menos que el objetivo tenga un estado del heap muy predecible.