- 作者: 纯情
- 时间:
- 分类: 资讯
Keras 价值 750$的目录穿越漏洞 漏洞描述 Keras 的 keras.utils.get_file() 函数在解压缩下载的 tar 归档文件时存在目录遍历漏洞。尽管该函数实现了 filter_safe_paths() 来过滤不安全的路径,但该过滤函数存在逻辑缺陷,允许创建指向父目录 (..) 的符号链接。攻击者可构造恶意归档文件,在解压后创建指向预期目录之外的符号链接,从而可能访问或修改外部文件。 Keras 是啥 https://github.com/keras-team/keras Keras 3 是一个多后端深度学习框架,支持 JAX、TensorFlow、PyTorch 和 OpenVINO(仅用于推理)。轻松构建和训练计算机视觉、自然语言处理、音频处理、时间序列预测、推荐系统等模型。 加速模型开发 :借助 Kera 的高级用户体验和如 PyTorch 或 JAX 等易于调试的运行时,更快交付深度学习解决方案。
最先进的性能 :通过选择最适合你模型架构的后端(通常是 JAX!),相比其他框架,实现 20%到 350%的加速。这里是基准测试。
数据中心级培训 :自信地从笔记本电脑扩展到大型 GPU 或 TPU 集群。
加入近三百万开发者行列,从初创企业到全球企业,共同利用 Keras 3 的力量。 环境搭建 测试环境 组件 | 版本 |
操作系统 | Linux (Docker 容器) |
Python | 3.11.14 |
Keras | 3.11.2 |
Docker 运行环境 源码获取 漏洞复现 PoC 代码 复现结果 然后我们来验证 两种方法,我们验证和执行一起 结果 验证成功 或者我们直接通过符号链接访问外部文件 漏洞分析 数据流分析 代码分析 文件位置: keras/src/utils/file_utils.py 关键函数 代码结构分析: 函数 | 作用 |
resolve_path() | 规范化路径,对已存在的符号链接会解析 |
is_path_in_dir() | 检查路径是否在 base_dir 内 |
is_link_in_dir() | 检查符号链接目标是否在安全范围内 |
filter_safe_paths() | 过滤不安全的文件,yield 安全的 TarInfo |
2. filter_safe_paths() 的执行流程 我们看这个流程 ● filter_safe_paths() 先检查路径名,后检查符号链接 ● 符号链接的路径名 subdir/link_to_parent 是安全的 ● 符号链接的指向目标 .. 应该被 is_link_in_dir() 检查 ● 但 elif 分支永远不会执行,目标未被检查 3. resolve_path() 的关键行为 关键问题就是 os.path.realpath() 对不存在的路径不会解析符号链接 打了个解压差异 ● 检查时路径不存在,resolve_path() 返回路径本身 ● "/app/subdir/link_to_parent".startswith("/app") = True ●检查通过,符号链接被创建 4. extractall() 执行解压 代码: 分析: ● 符号链接 link_to_parent 被成功创建 ● 指向父目录 ..,可以访问解压目录外的文件 目录穿越原理 梳理后就是这样 所以 POC 是这样的 ● 符号链接的路径名 subdir/link_to_parent 在解压目录 /app/cache_123/ 内 ✓ ● 符号链接的指向目标 .. 解析后是 /app/ ✗ ● 任何遍历解压目录的代码都可能通过 link_to_parent 访问 /app/ 下的文件 漏洞修复 官方修复方案 Keras 3.13.0 修复内容: 1 调整检查顺序: 符号链接检查优先于普通文件检查 2 添加 filter 参数: 在 Python 3.12-3.13 版本中使用 filter="data" 3 重命名函数: filter_safe_paths → filter_safe_tarinfos,逻辑改进 **Keras 3.11.2 - `keras/src/utils/file_utils.py: **Keras 3.13.0 - keras/src/utils/file_utils.py: 如果理解了漏洞原理,就能明白为什么这样就能够修复我们的漏洞呢? 我们再次来看看这个流程 看完这个流程,就很清楚了 添加 filter="data" 支持 - `keras/src/utils/file_utils.py: 参考资料 1Python tarfile 安全警告 2CWE-22: Improper Limitation of a Pathname to a Restricted Directory 3Keras GitHub Repository 4Keras Release Notes 5Google Security Research: Tarfile Exploitation 6报告 免责声明 本报告仅供安全研究和教育目的使用。所有测试均在授权环境中进行。 ●请勿将本文提供的信息用于任何非法目的 ●本文所述漏洞利用方法仅用于帮助理解和修复安全漏洞 ●使用本文信息造成的任何后果,由使用者自行承担
标签: 漏洞复现, 安全漏洞, 漏洞修复, 目录穿越漏洞, Keras, get_file()函数, 符号链接