ben-slates/CVE-2024-37054
PoC files
3 filesFile viewing is interactive and short-lived. Downloads are password-protected ZIP archives using password eip.
Analysis
Technical assessment
A Python exploit for CVE-2024-37054 that achieves remote code execution on MLflow Tracking Server by overwriting a model's python_model.pkl artifact with a malicious pickle payload and triggering deserialization via a prediction request.
Backdoor review
No backdoor observed in reviewed code
The supplied evidence consists of a Python proof-of-concept exploit (poc.py) and its documentation (readme.md) for CVE-2024-37054, a pickle deserialization vulnerability in MLflow. The code implements a documented exploit chain: authenticate, upload training data, retrieve a run ID, overwrite a model artifact with a malicious pickle payload, and trigger deserialization to execute a user-supplied command or reverse shell. All behavior is consistent with the stated purpose of demonstrating the CVE. No concealed, deceptive, or unrelated harmful behavior was observed.
Classification basis and observed behavior
Classification basis
The artifact contains a complete, functional Python script (poc.py) that implements a multi-step exploit chain to achieve remote code execution on a vulnerable MLflow server. The script generates a malicious pickle payload, uploads it to overwrite a model artifact, and triggers deserialization to execute arbitrary commands. The README explicitly describes it as a 'Proof-of-concept exploit'.
poc.py:1-644readme.md:9Requirements
- Network access to the MLflow Tracking Server
readme.md:34 - Valid MLflow credentials (default or otherwise)
readme.md:35 - Write access to artifacts (granted to all authenticated users)
readme.md:36
Observed behavior
- Authenticates to the target application using provided credentials
poc.py:319-357 - Uploads a training CSV to register a new MLflow model version
poc.py:359-403 - Retrieves the run_id from the MLflow Tracking API
poc.py:405-460 - Overwrites the python_model.pkl artifact with a malicious pickle payload via HTTP PUT
poc.py:462-498 - Triggers model deserialization by sending a prediction request, causing the pickle payload to execute
poc.py:500-529 - The pickle payload uses os.system() to execute a reverse shell or custom command
poc.py:286-317
Behaviors behind the backdoor verdict
Observables
- Exploit Chain
- The exploit performs a multi-step attack: login, model registration, run ID retrieval, artifact overwrite with a pickle payload, and deserialization trigger.This is the documented exploit flow for CVE-2024-37054 and matches the vulnerability description.
poc.py:198-211poc.py:531-597 - Payload Generation
- The payload is generated using pickle.dumps() with a __reduce__ method that calls os.system() with a user-provided command or a hardcoded reverse shell.This is the standard technique for pickle deserialization RCE and is explicitly described in the documentation.
poc.py:286-317readme.md:46-51 - Network Activity
- The script makes HTTP requests to the target application and MLflow API endpoints for authentication, data upload, run search, artifact upload, and prediction triggering.All network activity is directed at the user-specified targets and is necessary for the exploit.
poc.py:319-357poc.py:359-403poc.py:405-460poc.py:462-498poc.py:500-529
What the analysis did not establish
- One file (LICENSE) was omitted from the text evidence due to size budget; it is unlikely to contain exploit logic.
- The evidence does not include any binary or non-text files.
- One file (LICENSE) was omitted from the text evidence; its content is not reviewed, but it is typically a standard license file and unlikely to contain executable behavior.
- Binary content was not present; the artifact consists solely of text files.
This review is limited to the supplied PoC code and context. It does not assert that the code works or is safe to execute.