
MongoDB CVE-2025-14847 Heap-Speicherleck-Scanner | OP_COMPRESSED zlib Sicherheitslücke | Bug Bounty & Red Team Tool
MongoBleed ist ein leistungsstarker PoC-Scanner für CVE-2025-14847, eine Schwachstelle zur Offenlegung von Heap-Speicher vor der Authentifizierung im MongoDB C++-Treiber. Das Tool ist für die schnelle Identifizierung anfälliger Instanzen über große Netzwerkbereiche hinweg ausgelegt.
Die Schwachstelle beruht auf einem Out-of-Bounds (OOB)-Lesevorgang bei der Verarbeitung von OP_COMPRESSED-Nachrichten im MongoDB-Wire-Protokoll.
Wenn ein Server ein OP_COMPRESSED-Paket empfängt, vertraut er auf das vom Angreifer bereitgestellte Feld uncompressedSize, um einen Puffer für die Dekomprimierung zuzuweisen. Wenn die tatsächlichen dekomprimierten Daten deutlich kleiner sind als die angegebene uncompressedSize, schneidet der Treiber den Puffer nicht ab oder löscht ihn. Infolgedessen gibt der Server den gesamten zugewiesenen Speicherblock zurück, der nicht initialisierte Heap-Daten enthalten kann, wodurch möglicherweise vertrauliche Informationen wie Sitzungstokens, interne Zeiger oder Fragmente anderer Datenbankabfragen preisgegeben werden.
asyncio für Scans mit hoher Parallelitätvulnerable_targets.txtgit clone https://github.com/Black1hp/mongobleed-scanner/
cd mongobleed-scanner
Keine externen Abhängigkeiten erforderlich (nur Python-Standardbibliothek).
Grundlegende Verwendung:
python3 mongobleed.py -i targets.txt
Erweiterte Konfiguration:
python3 mongobleed.py -i targets.txt -c 100 -t 5
-i : Eingabedatei mit Zielen (IP, Domain oder IP:Port)-c : Parallelitätsstufe (Standard: 50)-t : Verbindungszeitüberschreitung in Sekunden (Standard: 5)Der Scanner identifiziert die Schwachstelle durch Ausnutzung einer Größenabweichung während der BSON-Dekomprimierungsphase:
OP_COMPRESSED-Paket mit einer kleinen zlib-komprimierten Nutzlast, z. B. 16-30 Bytes .uncompressedSize im Paketkopf wird absichtlich auf einen viel größeren Wert gesetzt (z. B. 64KB).MessageLength antwortet, die mit der angeforderten großen Puffergröße übereinstimmt und nicht mit der tatsächlichen Größe der dekomprimierten Nutzlast.uncompressedSize, um die Antwortlänge zu definieren. Da er diese Länge nicht mit den tatsächlich während der Dekomprimierung geschriebenen Bytes aktualisiert, streamt er blind den gesamten zugewiesenen Heap-Puffer – einschließlich nicht initialisierten Speichers – zurück zum Client.Hinweis: Das obige Video zeigt den Scanner, der mehrere anfällige Instanzen identifiziert und in Echtzeit Heap-Fragmente erfasst.
Black1hp Sicherheitsforscher | Bug Hunter | Red Teamer
Dieses Tool ist ausschließlich für autorisierte Sicherheitstests und Forschungszwecke bestimmt. Der Autor übernimmt keine Verantwortung für unbefugte Nutzung oder Schäden, die durch dieses Tool entstehen.