漏洞概述 标题: Path Traversal in Keras Archive Extraction via CWD Validation Bypass Leading to Arbitrary File Write in keras-team/keras 描述: Keras的档案提取功能( )存在路径遍历漏洞。函数 和 在验证档案成员时,使用当前工作目录(CWD)而非实际提取目标路径。当进程以 运行时(常见于Docker容器、CI/CD运行器和Jupyter内核),验证边界变为文件系统根目录,导致所有路径通过安全检查。 此外,zip文件包含一个属性引用错误,当遇到阻塞条目时会导致提取崩溃,而Python 3.11(一个官方支持的版本)没有 保护,使得有缺陷的过滤器成为唯一防线。 影响范围 受影响版本: 测试环境: , Python 3.12.3 漏洞类型: CWE-22: Path Traversal 严重性: 高 (B) 攻击复杂度: 低 特权要求: 无 用户交互: 需要 范围: 未改变 机密性: 高 完整性: 高 可用性: 高 修复方案 修复版本: 修复者: hertschuh 漏洞细节 漏洞A — CWD-based validation bypass 和 使用 (CWD)而不是传递给 的 参数来计算其安全边界。 参数控制文件实际写入的位置,但过滤器验证的是完全不同的目录。 漏洞B — ZipInfo AttributeError crash 使用 验证条目,但引用了 ,导致警告路径中的 。 漏洞C — No protection on Python 3.11 代码仅对Python 3.12-3.13应用Python的 安全机制。Keras官方支持Python >= 3.11,而Python 3.11不支持 ,因此CWD过滤是唯一的防线。结合漏洞A,Python 3.11安装在容器化环境中几乎没有有效的tar-based路径遍历保护。 利用流程 1. 攻击者托管一个包含遍历条目的恶意tar档案,如 。 2. 受害者在Docker容器中调用 ,其中 。 3. 计算 。 4. 遍历条目被检查: .startswith("/") -> True。 5. 过滤器批准遍历路径。 6. 在预期提取目录外写入文件。 7. 在Python 3.12+上, 捕获此外部写入,但Keras本身已批准。 8. 在Python 3.11上,没有外部安全网,完整路径遍历成功。 利用摘要 一个包含遍历条目的恶意档案,如 ,当进程工作目录为 时,会被 批准。档案提取然后将文件写入预期提取目录之外。 影响 ML环境中的攻击向量 数据集投毒攻击: 托管在研究存储库或数据集中心上的恶意数据集。 受污染的ML教程: 通过 下载数据集的教育内容。 供应链攻击: 通过 自动提取管道的受污染档案。 模型文件攻击: 通过漏洞B导致部分提取的定制 zip文件。 危险攻击结果 配置文件覆盖: SSH密钥、云凭据、API令牌。 代码注入: 应用程序目录中的恶意脚本, 修改。 ML管道攻击: 训练数据操纵、模型投毒。 静默数据损坏: 漏洞B导致不完整模型/数据集提取,无错误。 概念验证 (POC) POC结果