
Auditoría de CVE-2026-109618 / CVE-2026-109619: se reprodujo el envenenamiento de sesión hasta la ejecución de comandos; se reprodujo la precondición de OOM de BGCTX; no se reprodujo el UAF de progress-array alegado en compilaciones estándar.
Auditoría de las afirmaciones de "php2shell", más un PoC local funcional.
中文 · PHP 8.5.4 · solo laboratorio
MITRE:
CVE_RECORD_DNE· NVD: sin registro · php.net: solo preanuncio. Este repositorio audita las afirmaciones técnicas; no confirma los identificadores.
| Pregunta | Respuesta |
|---|---|
| ¿Puede dar una shell? | ✅ localmente — con un sink unserialize() + un gadget __destruct |
| ¿Es eso el CVE en sí? | ⚠️ probablemente no — el CVE parece ser los huérfanos de contexto BG (nota 08) |
| ¿Es pre-autenticación? | ❌ la ruta pre-auth se detiene en ARM / crash en nuestras pruebas |
| ¿Es correcto el bundle filtrado? | ❌ el UAF de post_bytes_processed no se reproduce |
multipart POST ──► php_hash_environment() ← antes de RINIT
│
├─ serialize encode ──► OOM ──► BG(serialize) huérfano (64 B)
└─ unserialize decode ──► OOM ──► BG(unserialize) huérfano (8208 B)
│
▼
¿SAPI sobrevive? ── sí ──► la siguiente petición reutiliza el contexto liberado
│ │
no ├─ Bug S: crash / fuga
▼ └─ Bug U: clase RCE
solo DoS
Bug separado usado por nuestro PoC:
var_destroy() ──► libera chunks de referencia inversa ──► recorrido dtor (sin serialize_lock)
└─ __destruct ──► unserialize interno ──► R:N lee chunk liberado
└─ closure falsa ──► zif_system(cmd)
php exploit/var_destroy_uaf_rce.php "id > /tmp/proof"
cat /tmp/proof # uid=... gid=...
Requiere: PHP vulnerable (8.5.4 verificado) · unserialize() sobre datos del atacante · una
clase __destruct · /proc/self/mem de Linux · offsets por build desde nm.
| Afirmación | Resultado |
|---|---|
Bundle filtrado: UAF de post_bytes_processed | ❌ no reproducido (Z_TRY_ADDREF) |
Bug S — huérfano BG(serialize) | ⚠️ UAF 3/3 bajo ASAN · arm reproducido · sin RCE |
Bug U — huérfano BG(unserialize) | ⚠️ arm reproducido · kill / system no reproducido |
| var_destroy UAF → RCE | ✅ funciona, 10/10, auto-localizante |
Envenenamiento de sesión → include | ✅ reproducido (técnica preexistente) |
Desajuste de handler → __destruct | ✅ reproducido (requiere una clase gadget) |
| Offsets del binario de demostración | ✅ coinciden con 8.5.4-0ubuntu1.3 (delta 0xbe3f0) |
| Ruta | Qué |
|---|---|
exploit/var_destroy_uaf_rce.php | PoC de UAF → RCE auto-localizante |
analysis/01-05 | tiempo de vida · ablación · versiones · bundle filtrado · alcanzabilidad |
analysis/06 | ruta BG(serialize) + recibo de ASAN |
analysis/07 | envenenamiento de sesión → ejecución de comandos |
analysis/08 | huérfanos de contexto BG (paquete re-up) |
analysis/09 | var_destroy UAF → RCE (offsets, auto-localizante) |
evidence/ | trazas de ASAN · logs de OOM · offsets de binario · ejecuciones |
lab/ | scripts de build · disparadores · matriz · ablación |
PROVENANCE.md | URLs de artefactos · fechas · hashes |
Builds locales, laboratorios locales de Apache / php-fpm / Docker, y el paquete de Ubuntu mencionado. El PoC se ejecuta como el usuario del proceso PHP; la precondición del gadget es real.