CVE-2026-4137MLflow 在 3.11.0 版本之前存在安全漏洞。由于 `get_or_create_nfs_tmp_dir()` 和 `_create_model_downloading_tmp_dir()` 函数创建了权限过于宽松的临时目录(分别为 0o777 和 0o770),在共享 NFS 挂载环境(如 Databricks)中,本地攻击者可篡改存储于这些目录中的模型工件(如 cloudpickle 序列化对象)。当系统通过 `cloudpickle.load()` 反序列化被篡改的文件时,将导致任意代码执行。此问题是 CVE-2025-10279 的部分修复残留。
该漏洞的核心在于 MLflow 处理临时目录时的权限控制不当。具体而言,`mlflow/utils/file_utils.py` 中的 `get_or_create_nfs_tmp_dir()` 函数将目录权限设置为 0o777(所有人可读写执行),而 `_create_model_downloading_tmp_dir()` 设置为 0o770(组可写)。在多用户共享文件系统(如 NFS)环境下,这种权限配置允许非特权用户修改其他用户创建的临时文件。攻击者利用此漏洞的路径通常涉及模型加载流程。当 MLflow 下载模型并将其临时存储在上述目录时,攻击者可以替换或修改其中的 `model.pkl` 或其他序列化文件。由于 MLflow 使用 Python 的 `cloudpickle` 库进行反序列化,而 `cloudpickle` 在加载对象时会执行其中的 Python 代码,攻击者只需在篡改的文件中注入恶意代码(如 `__reduce__` 方法),即可在受害者进程(通常是具有高权限的 Driver 进程)上下文中执行任意命令。