CVE-2025-14847 — MongoBleed
- CVE-2025-14847 (MongoBleed) leckt MongoDB-Server-Heap-Speicher ohne Authentifizierung.
- Ursache ist das Vertrauen in die vom Client gelieferte uncompressedSize bei der OP_COMPRESSED-Dekompression.
- Geleakter Speicher kann Benutzernamen, Passwörter, Tokens und Konfiguration preisgeben; auf die Fix-Releases patchen.
CVE-2025-14847, auch bekannt als MongoBleed, ist eine Schwachstelle, die es Angreifern erlaubt, unbefugt Daten aus dem Heap-Speicher des Servers auszulesen, auf dem MongoDB läuft — und das ganz ohne Authentifizierung.
MongoDB ist eine dokumentenorientierte, quelloffene NoSQL-Datenbank. Sie speichert Daten in Formaten wie JSON, BSON und XML und unterstützt Such-, Lösch- und Aktualisierungsoperationen über diese Daten.
Hintergrund
MongoDB verwendet zwischen Client und Server ein socket-basiertes Protokoll namens MongoDB Wire Protocol. Nachdem eine Verbindung hergestellt ist, erfolgt die Kommunikation durch das Senden und Empfangen von OP_MSG-Nachrichtenpaketen. Für die performante Übertragung großer Nutzdaten verwendet MongoDB das Paketformat OP_COMPRESSED.
Der entscheidende Parameter ist uncompressedSize — „die Größe, die die vom Client an den Server gesendeten komprimierten Daten im Speicher einnehmen, sobald sie auf dem Server dekomprimiert wurden.“
Grundursache
// line 72 — client value assigned to length length = uncompressedSize; // line 73 — uncompress computes the real size into length uncompress(output.data(), &length, input.data(), input.size()); // line 83 — ROOT CAUSE // length was updated, but output.length() still returns the client's size! return SharedBuffer::allocate(output.length());
Innerhalb von decompressData wird Speicher entsprechend der vom Client gelieferten uncompressedSize reserviert. Daten werden in der vom Client gewählten Größe aus dem Heap des Servers gelesen und an den Client zurückgegeben, als wären sie das Ergebnis der Dekomprimierung. Der geleakte Speicher kann Benutzernamen, Passwörter, Tokens und Systemkonfigurationsdaten enthalten.
Das BSON-Leck
Objekte in MongoDB werden dem Client in BSON (Binary JSON) serialisiert bzw. deserialisiert. Beim Parsen wird das Ende eines Werts durch einen \0-Nullterminator erkannt. Endet das vom Client gelieferte BSON nicht mit \0, durchsucht Mongo den reservierten Bereich weiter nach einem solchen. Da kein gültiges BSON-Objekt zustande kommt, wird ein Fehler ausgelöst — und diese Fehlermeldung leakt Speicherinhalte.
Die Behebung
Die Schwachstelle wurde behoben, indem bei der decompressData-Operation die tatsächliche Länge der dekomprimierten Daten anstelle des vom Client gelieferten Werts verwendet wird.
- 8.2.x — 8.2.2 und früher
- 8.0.x — 8.0.16 und früher
- 7.0.x — 7.0.27 und früher
- 6.0.x — 6.0.26 und früher
- 5.0.x — 5.0.31 und früher
Häufig gestellte Fragen
Was ist MongoBleed (CVE-2025-14847)?
Ein unauthentifiziertes Heap-Speicherleck in MongoDB. Mit einem präparierten OP_COMPRESSED-Paket bringt ein Angreifer den Server dazu, mehr Speicher als vorgesehen zurückzugeben, wodurch Heap-Inhalte wie Zugangsdaten und Tokens zum Client gelangen.
Welche MongoDB-Versionen sind betroffen und wie behebe ich es?
Betroffen sind Versionen bis 8.2.2, 8.0.16, 7.0.27, 6.0.26 und 5.0.31. Der Fix nutzt die reale dekomprimierte Länge statt der Client-Angabe; ein Upgrade auf ein gepatchtes Release schließt das Leck.

