开源机器学习工具存在安全漏洞
关键要点
- JFrog研究团队发现,多款开源机器学习工具存在漏洞,可能导致恶意代码在客户端执行或路径穿越,即使是加载“安全”模型格式时也不例外。
- 这四个漏洞是其发现的22个漏洞中的一部分,影响到MLflow、H2O、PyTorch和MLeap等不同的机器学习项目。
- 攻击者可利用这些漏洞进行横向移动,访问其他机器学习服务或执行更恶意的操作。
- JFrog发现的漏洞包括:MLflow的跨站脚本(XSS)漏洞,H2O的客户端代码执行漏洞,PyTorch的TorchScript路径穿越漏洞,以及MLeap的“ZipSlip”漏洞。
JFrog研究人员在周三发布的一篇文章中揭示,多个开源机器学习(ML)工具存在漏洞。这些漏洞可能导致客户端恶意代码执行或路径穿越,甚至在加载被认为是“安全”的模型格式时也是如此。
此次研究团队发现的四个漏洞是他们在过去几个月中发现的22个漏洞中的一部分,涉及15个不同的机器学习项目。团队在博客中提供了关于影响MLflow、H2O、PyTorch和MLeap的漏洞的新细节。
攻击机器学习客户端可能导致横向移动至其他机器学习服务,JFrog的研究人员在前期的研究中已对此进行过描述。若一个ML客户端被攻破,攻击者可以利用客户端的访问权,访问其他服务如模型注册和机器学习操作(MLOps)管道,从而进行进一步的恶意活动,例如盗取或植入后门于机器学习模型。
JFrog博客中首个描述的客户端风险是一个在开源平台MLflow中被追踪的漏洞,标识为,
MLflow旨在帮助开发人员管理其机器学习项目的整个生命周期。该漏洞是一个跨站脚本(XSS)漏洞,可通过构造恶意的MLflow“食谱”来利用。
MLflow食谱是用于自动化机器学习工作流的结构框架,使用特定于MLflow的YAML文件进行配置。研究人员发现,当一个食谱运行失败时,系统会呈现错误信息为HTML格式,其中包含变量“failure_traceback”,该变量引用异常信息。
要利用CVE-2024-27132,攻击者可以故意导致错误,通过用无效输入替换“recipe.yaml”文件的部分内容,同时包含恶意脚本。由于缺乏适当的清理,此恶意脚本将成为呈现为HTML的异常消息的一部分,导致XSS攻击。
此外,当MLflow在JupyterLab中使用时,此漏洞还可用于任意代码执行,因为JupyterLab支持在每个单元的输出中呈现HTML。由于通过该方法运行的任何任意JavaScript代码不受Jupyter网络应用的沙箱保护,加上该网络应用能够执行任意Python代码,攻击者可以构造一个MLflow食谱负载,在JupyterLab中创建一个新的“代码”单元,并执行攻击者的恶意Python代码。
研究人员还发现了一个在开源分布式内存机器学习平台H2O中存在的客户端代码执行漏洞,该漏洞源于使用ObjectInputStream从字节数组反序列化对象。
JFrog团队发现,导入到H2O中的模型的超参数映射是通过ObjectInputStream反序列化的,如果在超参数映射中包含恶意代码,将会导致在反序列化时执行该代码。此漏洞被追踪为。
“安全”模型格式并非总是安全
本文中描述的另外两个漏洞即使在使用被认为“安全”的模型时也能够利用,因为这些模型不支持加载时的代码执行。第一个漏洞出现在PyTorchML库的TorchScript功能中,研究人员解释称,该功能允许从PyTorch代码创建序列化和优化的模型。
在加载PyTorch文档(包括TorchScript文档)时,使用“torch.load”API,PyTorch提供“weights_only”参数来加载不可信的文档,该参数将阻止反序列化(或“取消拾取”)可能导致代码执行的数据类型。然而,即便使用了