
Script de Detecção para Exploração do MongoBleed
Ferramenta offline de análise do MongoDB para CVE-2025-14847 (MongoBleed)
Uma ferramenta autônoma de linha de comando para Linux que analisa dados do MongoDB para identificar provável exploração de CVE-2025-14847 usando múltiplos módulos de detecção.
MongoBleed (CVE-2025-14847) é uma vulnerabilidade de divulgação de memória na descompactação zlib do MongoDB que permite a atacantes extrair dados sensíveis — credenciais, tokens de sessão, PII — diretamente da memória do servidor sem autenticação.
Esta ferramenta ajuda respondedores a incidentes a detectar tentativas de exploração usando múltiplas fontes de evidência:
Analisa logs JSON do MongoDB para detectar padrões de exploração:
| ID do Evento | Tipo | Descrição |
|---|---|---|
| 22943 | Conexão Aceita | Registrado quando um cliente conecta |
| 51800 | Metadados do Cliente | Registrado quando um cliente envia informações de driver/aplicativo |
| 22944 | Conexão Fechada | Registrado quando um cliente desconecta |
Insight-chave: Drivers legítimos do MongoDB sempre enviam metadados do cliente. O exploit MongoBleed conecta, extrai memória e desconecta — mas nunca envia metadados.
Analisa snapshots de db.serverStatus().asserts para detectar padrões incomuns nos contadores asserts.user:
asserts.user a outros tipos de assert. Se os asserts de usuário forem desproporcionalmente altos (proporção ≥250x) ou todos os outros tipos forem zero, sinaliza como suspeito (confiança MÉDIA)Nota: Contadores cumulativos podem produzir falsos positivos. Use em combinação com FTDC (Módulo B2) para melhores resultados.
Analisa arquivos de Captura de Dados de Diagnóstico em Tempo Integral (FTDC) do MongoDB para detectar picos localizados no tempo nos contadores de assert. O FTDC amostra o serverStatus periodicamente, permitindo a cronometragem precisa de possíveis ataques.
jq - processador de JSONawk (gawk recomendado)gzip - Para suporte a logs compactadospymongo - Para decodificação de arquivos FTDCssh, scp)# Shell script dependencies
# Debian/Ubuntu
apt-get install jq gawk gzip
# RHEL/CentOS/Fedora
dnf install jq gawk gzip
# macOS
brew install jq gawk
# Python dependencies (for FTDC decoding)
pip install -r requirements.txt
# Clone the repository
git clone https://github.com/your-org/mongobleed-detector.git
cd mongobleed-detector
# Make scripts executable
chmod +x mongobleed-detector.sh
chmod +x mongobleed-remote.py
chmod +x ftdc-decode.py
# Install Python dependencies (optional, for FTDC support)
pip install -r requirements.txt
Analise dados que foram coletados manualmente de hosts MongoDB.
Colete automaticamente dados de múltiplos hosts via SSH e depois analise localmente.
Colete dados de seus hosts MongoDB e organize-os nesta estrutura:
./collected-data/
├── logs/ # MongoDB JSON logs
│ ├── mongod.log
│ ├── mongod.log.1
│ └── mongod.log.2.gz
├── assert-counts/ # serverStatus().asserts snapshots
│ ├── asserts-2025-01-01.json
│ └── asserts-2025-01-02.json
└── ftdc-files/ # FTDC diagnostic.data contents
├── metrics.2025-01-02T10-00-00Z-00000
└── metrics.interim
# Copy from remote host
scp user@mongohost:/var/log/mongodb/mongod.log* ./collected-data/logs/
Execute este comando no host MongoDB (requer acesso ao mongosh):
mongosh --quiet --eval 'JSON.stringify({
timestamp: new Date().toISOString(),
hostname: db.hostInfo().system.hostname,
asserts: db.serverStatus().asserts,
uptime: db.serverStatus().uptime
})' > asserts-$(date +%Y%m%d-%H%M%S).json
Copie o arquivo JSON resultante para ./collected-data/assert-counts/.
Dica: Execute este comando várias vezes (ex.: a cada hora) para estabelecer uma linha de base e detectar picos.
Os arquivos FTDC estão localizados em:
<storage.dbPath>/diagnostic.data/ (comumente /var/lib/mongodb/diagnostic.data/)systemLog.path (ex.: /var/log/mongodb/mongos.diagnostic.data/)# Copy FTDC files (may require sudo)
sudo cp /var/lib/mongodb/diagnostic.data/metrics.* ./collected-data/ftdc-files/
# Auto-discovery mode - analyzes all available data
./mongobleed-detector.sh --data-dir ./collected-data/
# With custom thresholds
./mongobleed-detector.sh --data-dir ./collected-data/ \
-t 1440 \ # 24-hour lookback
-c 50 \ # Lower connection threshold
--spike-threshold 50 # Lower spike threshold
Para compatibilidade reversa, você ainda pode analisar logs diretamente:
# Scan default paths
./mongobleed-detector.sh
# Scan specific log files
./mongobleed-detector.sh -p /path/to/logs/*.json
# Forensic mode (analyze multiple hosts)
./mongobleed-detector.sh --forensic-dir /evidence/
Colete automaticamente dados de múltiplos hosts e analise:
# Create hosts file
cat > hosts.txt << EOF
mongo-prod-01.example.com
mongo-prod-02.example.com
mongo-staging.example.com
EOF
# Collect and analyze
./mongobleed-remote.py --hosts-file hosts.txt --user admin --output-dir ./collected-data/
# Use specific SSH key
./mongobleed-remote.py --hosts-file hosts.txt --user admin --key ~/.ssh/mongodb_key
# Parallel execution
./mongobleed-remote.py --hosts-file hosts.txt --user admin --parallel 10
# Skip FTDC collection (faster)
./mongobleed-remote.py --hosts-file hosts.txt --user admin --skip-ftdc