漏洞概述 该网页主要揭示了 MLflow 平台中的两个关键安全漏洞: 1. 存储型 XSS (通过 YAML 反序列化): MLflow 的前端在解析模型工件(Model Artifacts)时,使用了不安全的 方法(来自 库)。 攻击者可以构造包含恶意 标签的 YAML 内容。 当其他用户查看该工件时,前端解析器会实例化 JavaScript 对象并执行其中的代码(例如弹出 alert)。 漏洞利用链: 解析出包含函数的对象 -> 传入 -> 调用 强制转换 -> 触发函数执行。 2. 权限绕过 (Authorization Bypass): MLflow 的元数据端点(Metadata endpoints)和工件下载端点(Artifact download endpoints)使用了不同的权限检查机制。 元数据端点基于 protobuf 服务定义,而工件下载端点是手写的 Flask 路由。 MLflow 的认证层主要基于 protobuf 定义构建权限映射,导致可能无法正确拦截对工件的非法访问请求,允许用户访问其无权访问的模型工件。 影响范围 环境: 所有使用 MLflow 进行模型管理的共享部署环境。 攻击者: 任何能够上传模型工件的用户。 受害者: 任何查看包含恶意工件的模型的用户(触发 XSS)。 数据: 模型工件(Artifacts)及其元数据。 修复方案 1. 针对 XSS 漏洞: 将代码中的 替换为 。 会剥离危险 YAML 标签的支持,防止在反序列化期间构建可执行对象。 注意:虽然 3.14.0 版本默认将 改为安全模式,但在 3.x 版本中 仍是不安全的。 2. 针对权限绕过: 需要统一工件下载端点的权限检查逻辑,确保其与元数据端点保持一致。 在 Flask 路由中显式添加权限检查,确保 auth 层能正确拦截请求。 POC 代码 以下是网页中提供的 Proof of Concept (PoC) Python 脚本,用于构造恶意工件: