redyank/CVE-2026-29780
GitHub: redyank/CVE-2026-29780
一个声称与CVE-2026-29780相关的eml邮件解析项目,但漏洞编号存在异常,需进一步核实其真实性和用途。
Stars: 0 | Forks: 1
# 官方示例脚本中的路径遍历导致任意文件写入
### 概述
官方示例脚本 `examples/recursively_extract_attachments.py` 存在路径遍历漏洞,允许在预期的输出目录之外进行任意文件写入。从解析的电子邮件中提取的附件文件名直接用于构造输出文件路径,且未经过任何清理,这使得受攻击者控制的文件名可以逃逸出目标目录。
### 详情
文件:`examples/recursively_extract_attachments.py`
行号:61–64
```
for a in m['attachment']:
out_filepath = out_path / a['filename'] # No sanitization
print(f'\tWriting attachment: {out_filepath}')
with out_filepath.open('wb') as a_out:
a_out.write(base64.b64decode(a['raw']))
```
`a['filename']` 的值可以通过精心构造的电子邮件附件标头被攻击者控制:
```
Content-Disposition: attachment; filename="../outside/pwned.txt"
```
在写入之前,未执行任何路径规范化或边界验证。
### PoC
1. 创建一个恶意的 `.eml` 文件:
```
Content-Disposition: attachment; filename="../outside/pwned.txt"
```
2. 运行示例脚本:
```
python recursively_extract_attachments.py -p ./emails -o ./safe
```
3. 预期结果:`./safe/pwned.txt`
4. 实际结果:`./outside/pwned.txt` ← 写入到了预期目录之外
在 Kali Linux 上通过 pip 在虚拟环境中安装 eml-parser 进行了验证。
### 影响
此漏洞仅限于**示例脚本**,不影响 eml-parser 核心库。然而,由于该脚本是官方仓库的一部分且很可能被改编用于生产环境,攻击者通过提供精心构造的电子邮件,可以在执行上下文中实现任意文件写入。
潜在的攻击场景包括:
- Cron job 注入:`filename="../../etc/cron.d/backdoor"`
- Web shell 上传:`filename="../../var/www/html/shell.php"`
- SSH key 注入:`filename="../../home/user/.ssh/authorized_keys"`
### 修复建议
```
import os.path
for a in m['attachment']:
filename = os.path.basename(a['filename'])
out_filepath = out_path / filename
if not out_filepath.resolve().is_relative_to(out_path.resolve()):
print(f'[!] Skipping suspicious filename: {a["filename"]}')
continue
print(f'\tWriting attachment: {out_filepath}')
with out_filepath.open('wb') as a_out:
a_out.write(base64.b64decode(a['raw']))
```
标签:PoC, Python, 任意文件写入, 无后门, 暴力破解, 漏洞披露, 路径穿越, 邮件解析