一个最小化、可运行的**路径穿越(CWE-22)**漏洞类演示,以近期披露的 CVE-2026-14628 作为现实世界的参考点。
CVE-2026-14628 影响 'NousResearch/hermes-agent'(< 2026.5.16)。
gateway/platforms/base.py 中的 extract_media 函数会根据传入的 webhook 载荷构建文件系统路径,但未对其进行验证,从而允许远程未认证攻击者读取预期媒体目录之外的文件。
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:Nhermes-agent 代码库。相反,它以一个小型、自包含的示例重现该漏洞的确切模式,以便在审查其他代码时,能够轻松研究该缺陷及其修复方法,并将其用作参考。| 文件 | 用途 |
|---|---|
vulnerable_example.py | 重现存在缺陷的逻辑:通过朴素的字符串拼接构建路径,不进行任何验证 |
secure_example.py | 修复版本:验证解析后的绝对路径仍位于预期的根目录之内 |
python3 vulnerable_example.py
输出显示"攻击者"使用类似 ../secret_outside_media_root.txt 的输入,成功读取了位于预期 media_storage/ 目录之外的文件(secret_outside_media_root.txt)。
python3 secure_example.py
相同的恶意输入会被拒绝,并抛出明确的 PathTraversalError。
secure_example.py 中应用了两层互补的防御:
.. 或路径分隔符的文件名(快速失败,为合法调用者提供清晰的错误信息)。candidate_path = os.path.abspath(os.path.join(MEDIA_ROOT, filename))
if not candidate_path.startswith(MEDIA_ROOT + os.sep):
raise PathTraversalError(...)
路径穿越是处理文件上传、下载或任何用户可控文件名的软件中最常见、也最易避免的漏洞类之一 — webhook 处理器、媒体处理器、日志查看器、模板引擎和文件服务 API 都是常见目标。修复成本很低(只需几行代码);忽略它的代价是任意文件泄露,更严重的情况下(结合写入权限)可导致远程代码执行。
本项目仅用于教育目的。它是对已知漏洞类别的通用重现,并非针对任何特定运行中或未打补丁软件的可用的漏洞利用。请勿对你不拥有或未经明确授权测试的系统使用这些技术。