机器学习漏洞大汇总——利用机器学习服务
在本节中,我们将展示机器学习框架中存在的漏洞,这些漏洞会直接处理模型工件,或者通过工件存储或模型注册表的凭证来处理。利用此类漏洞,攻击者可以在企业系统内部进行非常强大的横向移动,从而劫持被利用的模型注册表中的机器学习模型。
WANDB Weave 目录遍历 - CVE-2024-7340
[Weave]是一个用于评估和跟踪大型语言模型 (LLM) 应用程序的工具包,由 Weights & Biases (WANDB) 构建。
Weave 允许从特定目录获取文件,但由于缺乏输入验证,因此也可能通过目录遍历读取整个文件系统的文件。此漏洞已在 Weave 0.50.8 版本中修复。
当 Weave 作为 WANDB 服务器的一部分运行时,通过读取特定文件,该漏洞允许低权限的经过身份验证的用户将其权限升级到管理员角色。
技术细节
Weave Server API 路径 __weave/file/path:path 允许低权限的认证用户从文件系统的特定目录中获取文件。服务器代码旨在检查用户提供的路径是否位于特定目录中,但其逻辑很容易被绕过,从而访问文件系统中的任何文件:
@blueprint.route("/__weave/file/<path:path>")
def send_local_file(path):# path is given relative to the FS root. check to see that path is a subdirectory of the# local artifacts path. if not, return 403. then if there is a cache scope function defined# call it to make sure we have access to the pathabspath = "/" / pathlib.Path(path) # add preceding slash as werkzeug strips this by default and it is reappended below in send_from_directorytry:local_artifacts_path = pathlib.Path(filesystem.get_filesystem_dir()).absolute()except errors.WeaveAccessDeniedError:abort(403)if local_artifacts_path not in list(abspath.parents):abort(403)return send_from_directory("/", path)
用户提供的路径参数附加到 / 后,并存储在名为 abspath 的变量中。然后,代码检查 abspath 是否以 local_artifacts_path 开头(通过将其与 abspath 的任意父目录进行比较)。
由于代码从未规范化 abspath 变量,因此 abspath 可以包含 …/ 序列以进行目录遍历。
因此,如果 local_artifacts_path 目录是 /some/authorized/path,攻击者可以提供以下路径:some/authorized/path/…/…/…/…/evil/path 以绕过检查,其路径指向 /evil/path 文件。
函数的最后一行将路径传递给 send_from_directory 函数,该函数是一个安全的函数,用于避免目录遍历,详见此处。它不允许在第一个参数指定的目录之外提供文件。但是,当指定的目录是文件系统的根文件夹 (/) 时,它将允许从整个文件系统获取文件,这违背了防止目录遍历的初衷。简而言之,这允许攻击者从文件系统下载&#