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, 任意文件写入, 无后门, 暴力破解, 漏洞披露, 路径穿越, 邮件解析