27017,27018 - Pentesting MongoDB
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Informazioni di base
MongoDB è un sistema di gestione di database open source che utilizza un modello di database orientato ai documenti per gestire diverse forme di dati. Offre flessibilità e scalabilità per la gestione di dati non strutturati o semi-strutturati in applicazioni come analisi dei big data e gestione dei contenuti. Porta predefinita: 27017, 27018
PORT STATE SERVICE VERSION
27017/tcp open mongodb MongoDB 2.6.9 2.6.9
Enumerazione
Manuale
from pymongo import MongoClient
client = MongoClient(host, port, username=username, password=password)
client.server_info() #Basic info
#If you have admin access you can obtain more info
admin = client.admin
admin_info = admin.command("serverStatus")
cursor = client.list_databases()
for db in cursor:
print(db)
print(client[db["name"]].list_collection_names())
#If admin access, you could dump the database also
Alcuni comandi MongoDB:
show dbs
use <db>
show collections
db.<collection>.find() #Dump the collection
db.<collection>.count() #Number of records of the collection
db.current.find({"username":"admin"}) #Find in current db the username admin
Automatico
nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used
Shodan
- Tutti i mongodb: “mongodb server information”
- Cerca mongodb completamente aperti: “mongodb server information” -“partially enabled”
- Solo auth parzialmente abilitata: “mongodb server information” “partially enabled”
Login
Per impostazione predefinita mongo non richiede password.
Admin è un database mongo comune.
mongo <HOST>
mongo <HOST>:<PORT>
mongo <HOST>:<PORT>/<DB>
mongo <database> -u <username> -p '<password>'
Lo script nmap: mongodb-brute controllerà se sono necessarie creds.
nmap -n -sV --script mongodb-brute -p 27017 <ip>
Brute force
Controlla /opt/bitnami/mongodb/mongodb.conf per verificare se sono necessarie credenziali:
grep "noauth.*true" /opt/bitnami/mongodb/mongodb.conf | grep -v "^#" #Not needed
grep "auth.*true" /opt/bitnami/mongodb/mongodb.conf | grep -v "^#\|noauth" #Not needed
Predizione ObjectId di Mongo
Esempio from here.
Gli Object ID di Mongo sono stringhe esadecimali di 12 byte:

Ad esempio, ecco come possiamo scomporre un reale Object ID restituito da un’applicazione: 5f2459ac9fa6dc2500314019
- 5f2459ac: 1596217772 in decimal = venerdì, 31 luglio 2020 17:49:32
- 9fa6dc: Identificatore macchina
- 2500: ID del processo
- 314019: Un contatore incrementale
Di questi elementi, l’identificatore macchina rimarrà lo stesso finché il database è in esecuzione sulla stessa macchina fisica/virtuale. L’ID del processo cambierà solo se il processo MongoDB viene riavviato. Il timestamp viene aggiornato ogni secondo. L’unica difficoltà nel predire gli Object ID semplicemente incrementando il contatore e i valori del timestamp è che MongoDB genera e assegna gli Object ID a livello di sistema.
Lo strumento https://github.com/andresriancho/mongo-objectid-predict, dato un Object ID di partenza (puoi creare un account e ottenere un ID iniziale), restituisce circa 1000 probabili Object ID che potrebbero essere stati assegnati agli oggetti successivi, quindi devi solo bruteforzarli.
Post
Se sei root puoi modificare il file mongodb.conf così non sono necessarie credenziali (noauth = true) e login without credentials.
MongoBleed zlib Memory Disclosure (CVE-2025-14847)
Una diffusa divulgazione di memoria non autenticata (“MongoBleed”) colpisce MongoDB 3.6–8.2 quando il compressore di rete zlib è abilitato. L’intestazione OP_COMPRESSED si fida del campo fornito dall’attaccante uncompressedSize, quindi il server alloca un buffer di quella dimensione e lo copia nelle risposte anche se è stato fornito solo un payload compresso molto più piccolo. I byte extra sono dati heap non inizializzati provenienti da altre connessioni, da /proc o dalla cache WiredTiger. Gli attaccanti poi omettono il previsto BSON \x00 terminator, così il parser di MongoDB continua a scansionare quel buffer sovradimensionato finché non trova un terminatore, e la risposta di errore riecheggia sia il documento malevolo sia i byte della heap scansionata pre-auth su TCP/27017.
Requisiti di esposizione e controlli rapidi
- La versione del server deve rientrare negli intervalli vulnerabili (3.6, 4.0, 4.2, 4.4.0–4.4.29, 5.0.0–5.0.31, 6.0.0–6.0.26, 7.0.0–7.0.27, 8.0.0–8.0.16, 8.2.0–8.2.2).
net.compression.compressorsonetworkMessageCompressorsdevono includerezlib(default in molte build). Controllalo dalla shell con:
db.adminCommand({getParameter: 1, networkMessageCompressors: 1})
- L’attaccante ha solo bisogno di accesso di rete alla porta MongoDB. Non è necessaria alcuna autenticazione.
Exploitation & harvesting workflow
- Avvia l’handshake del wire-protocol dichiarando
compressors:["zlib"]in modo che la sessione utilizzi zlib. - Invia frame
OP_COMPRESSEDil cuiuncompressedSizedichiarato è molto più grande del reale payload decompresso per forzare allocazione heap sovradimensionata piena di dati obsoleti. - Costruisci il BSON incorporato senza un finale
\x00così il parser scorre oltre i dati controllati dall’attaccante nel buffer sovradimensionato mentre cerca il terminatore. - MongoDB emette un errore che include il messaggio originale più qualsiasi byte di heap scansionati, leaking memory. Ripeti con lunghezze/offset variabili per aggregare segreti (creds/API keys/session tokens), WiredTiger stats e artefatti di
/proc.
Il PoC pubblico automatizza il probing degli offset e il carving dei frammenti restituiti:
python3 mongobleed.py --host <target> --max-offset 50000 --output leaks.bin
Segnale di rumore di rilevamento (connessioni ad alta frequenza)
L’attacco genera solitamente molte richieste di breve durata. Prestare attenzione ai picchi di connessioni in ingresso verso mongod/mongod.exe. Esempio XQL hunt (>500 connections/min per remote IP, excluding RFC1918/loopback/link-local/mcast/broadcast/reserved ranges by default):
Cortex XQL connessioni Mongo ad alta velocità
```sql // High-velocity inbound connections to mongod/mongod.exe (possible MongoBleed probing)dataset = xdr_data | filter event_type = ENUM.NETWORK | filter lowercase(actor_process_image_name) in (“mongod”, “mongod.exe”) | filter action_network_is_server = true | filter action_remote_ip not in (null, “”) | filter incidr(action_remote_ip, “10.0.0.0/8”) != true and incidr(action_remote_ip, “192.168.0.0/16”) != true and incidr(action_remote_ip, “172.16.0.0/12”) != true and incidr(action_remote_ip, “127.0.0.0/8”) != true and incidr(action_remote_ip, “169.254.0.0/16”) != true and incidr(action_remote_ip, “224.0.0.0/4”) != true and incidr(action_remote_ip, “255.255.255.255/32”) != true and incidr(action_remote_ip, “198.18.0.0/15”) != true | filter action_network_session_duration <= 5000 | bin _time span = 1m | comp count(_time) as Counter by agent_hostname, action_remote_ip, _time | filter Counter >= 500
</details>
## Riferimenti
- [Unit 42 – Brief di minaccia: Vulnerabilità MongoDB (CVE-2025-14847)](https://unit42.paloaltonetworks.com/mongobleed-cve-2025-14847/)
- [Tenable – CVE-2025-14847 (MongoBleed): Vulnerabilità Memory Leak di MongoDB sfruttata nel mondo reale](https://www.tenable.com/blog/cve-2025-14847-mongobleed-mongodb-memory-leak-vulnerability-exploited-in-the-wild)
- [Avviso di sicurezza MongoDB SERVER-115508](https://jira.mongodb.org/browse/SERVER-115508)
- [Censys – Avviso MongoBleed](https://censys.com/advisory/cve-2025-14847)
- [PoC MongoBleed (joe-desimone/mongobleed)](https://github.com/joe-desimone/mongobleed)
---
> [!TIP]
> Impara e pratica il hacking AWS:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Impara e pratica il hacking GCP: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Impara e pratica il hacking Azure: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Supporta HackTricks</summary>
>
> - Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
> - **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos github.
>
> </details>


