MLflow Server
A container running MLflow 2.14.1 UI on port 5000, using a file-based backend store at /home/nit/mlruns. It is the target for the deserialization exploit.
Dockerfile:24-33File viewing is interactive and short-lived. Downloads are password-protected ZIP archives using password eip.
The artifact is a Proof of Concept (PoC) for CVE-2024-37054, a deserialization vulnerability in MLflow. It contains two Python scripts: one that logs a malicious model containing a pickled payload (poc/log_malicious_model.py), and another that loads the model, triggering arbitrary code execution via cloudpickle deserialization (poc/load_vulnerable_model.py). The README explicitly describes the steps to execute the attack and observe the RCE.
No backdoor observed in reviewed code
The repository is a documented Proof of Concept for CVE-2024-37054, demonstrating a known MLflow deserialization vulnerability. The payload (os.system call) is explicitly described in the README and source code as the intended exploit demonstration. No concealed, unrelated, or operator-directed harmful behavior was observed.
The artifact contains functional Python code that, when executed, logs a malicious model and then loads it to trigger arbitrary command execution. The README explicitly labels it as a 'Proof of Concept (PoC)' and provides step-by-step instructions to perform the attack. This is code intended to exercise a vulnerability, meeting the definition of an exploit.
README.md:19README.md:34poc/log_malicious_model.py:1-53poc/load_vulnerable_model.py:1-30README.md:49Dockerfile:26poc/log_malicious_model.py:6poc/log_malicious_model.py:46-50poc/load_vulnerable_model.py:24poc/log_malicious_model.py:17-23poc/load_vulnerable_model.py:21-24README.md:48poc/log_malicious_model.py:22README.md:155poc/log_malicious_model.py:22-23README.md:96-97Dockerfile:26This review is limited to the supplied PoC code and context. It does not assert that the code works or is safe to execute.
A Dockerized MLflow 2.14.1 server intended as a vulnerable target for CVE-2024-37054 deserialization RCE. The image runs as non-root user 'nit' and serves the MLflow UI on port 5000.
Dockerfile:1-33The README explicitly states this is a Proof of Concept for CVE-2024-37054, a deserialization vulnerability in MLflow. The Dockerfile installs a vulnerable version (2.14.1) and the repository includes attacker and victim scripts to demonstrate RCE.
README.md:1-179Dockerfile:24A container running MLflow 2.14.1 UI on port 5000, using a file-based backend store at /home/nit/mlruns. It is the target for the deserialization exploit.
Dockerfile:24-33A Python script that connects to the MLflow server, crafts a malicious model containing a pickled payload (os.system call), and logs it to the server. The payload creates a file 'pwned.txt' and prints a message.
poc/log_malicious_model.py:1-53A Python script that connects to the MLflow server and loads the malicious model using mlflow.pyfunc.load_model, triggering deserialization of the payload and executing the attacker's command.
poc/load_vulnerable_model.py:1-30Supported by supplied evidence
The README describes CVE-2024-37054 as a deserialization vulnerability in mlflow.pyfunc.load_model affecting versions up to 2.14.1. The Dockerfile installs mlflow==2.14.1, and the PoC scripts demonstrate RCE via a malicious pickled model, consistent with the CVE description.
README.md:1-179Dockerfile:24poc/log_malicious_model.py:1-53poc/load_vulnerable_model.py:1-30README.md:60-65README.md:72README.md:60-65poc/log_malicious_model.py:5README.md:62-63README.md:65README.md:100README.md:120README.md:123-125The payload in the attacker script only echoes a message and creates a file named pwned.txt. It does not target the host, exfiltrate data, establish persistence, or perform any destructive action. The Dockerfile runs as a non-root user and does not mount the Docker socket or use privileged mode. All behavior is contained within the lab's intended demonstration of CVE-2024-37054.
poc/log_malicious_model.py:17-19Dockerfile:1-33This review is limited to the supplied lab evidence packet. It does not assert that the environment runs, reproduces a vulnerability, or is safe to execute. Contract: eip-docker-lab-analysis-v1.