标签 Keras 3 下的文章


前言

Keras 3 是一个多后端深度学习框架,支持 JAX、TensorFlow、PyTorch 和 OpenVINO(仅用于推理)。它可以轻松构建和训练用于计算机视觉、自然语言处理、音频处理、时间序列预测、推荐系统等领域的模型。

漏洞概述

Keras 3.11.3 版本在提取 tar 归档文件时,其 `keras.utils.get_file()` 函数存在路径遍历漏洞。该漏洞的产生是由于该函数使用了 Python 的 `tarfile.extractall()` 方法,但缺少安全关键参数 `filter='data'`。尽管 Keras 尝试使用 `filter_safe_paths()` 过滤不安全路径,但此过滤操作发生在提取之前,而提取过程中会触发一个 PATH_MAX 符号链接解析漏洞。该漏洞会导致符号链接解析因路径长度限制而失败,从而绕过安全机制,允许将文件写入预期提取目录之外。这可能导致缓存目录之外的任意文件写入,进而造成系统安全漏洞或恶意代码执行。该漏洞会影响使用 `get_file()` 处理 tar 归档文件的 Keras 安装,但不会影响使用适当过滤器参数保护此提取方法的版本。

漏洞分析/复现

漏洞分析

keras.utils.getfile调用了extract_archive

image.png



使用python tarfile.extractall() 方法,但是没有配置filter="data" 参数

image.png



虽然使用了filter_safe_paths进行过滤

image.png



PATH_MAX 符号链接解析错误发生在路径过滤之前,于是可以绕过检查

image.png



漏洞复现

使用pip安装相关依赖

搭建一个测试场景,平台允许用户上传测试数据集,处理数据集时会调用keras.utils.get_file()提取归档文件,从而触发漏洞

image.png



创建恶意文件

image.png



上传恶意文件

image.png



当点击处理数据集时会调用getfile来处理,从而触发漏洞,成功写入文件

image.png