2025. december. CVE-2025-14847, CVSS 8.7 besorolású sebezhetőség, "MongoBleed" becenévvel, mert pontosan úgy működik, mint a Heartbleed tizenegy évvel ezelőtt.
A MongoDB-ben a Zlib tömörítés alapértelmezés szerint engedélyezve van. Amikor egy tömörített üzenet érkezik, a szerver beolvas egy fejlécet, amely azt állítja, hogy az adat mekkora lesz a kicsomagolás után. A MongoDB lefoglalja ezt a memóriamennyiséget, kicsomagolja a hasznos adatot, és visszaküldi a választ.
A kód a teljes pufferméretet adta vissza a tényleges adathossz helyett. Küldj egy csomagot, amely azt állítja, hogy 1000 bájt, amikor valójában 100, és a MongoDB visszaküldi mind az 1000 bájtot. A plusz 900 bájt tartalmazza azt, ami a korábbi műveletekből a memóriában volt.
Ami kiszivárgott:
- Cleartext jelszavak és hitelesítő adatok
- Munkamenet-tokenek és API-kulcsok
- Ügyféladatok és személyazonosításra alkalmas adatok
- Adatbázis-konfigurációk és rendszerinformációk
- Docker elérési utak és kliens IP-címek
A támadás a hitelesítés előtt történik. Bejelentkezés nem szükséges. Ha egy támadó eléri a 27017-es portot, azonnal elkezdheti a memória kinyerését.
A kutatók tesztelték a nyilvános exploitot, és egyetlen vizsgálatból több mint 8700 bájt adatot gyűjtöttek 42 töredékben. A koncepció bizonyítása már elérhető a GitHubon. A Wiz szerint a felhőalapú környezetek 42%-ában van legalább egy sebezhető példány, és a támadások már most is zajlanak.
Hogyan észlelhető egy támadás:
Amikor egy MongoDB illesztőprogram csatlakozik, mindig metaadatokat küld az azonosítására. Az illesztőprogram neve, verziója, operációs rendszere. A MongoBleed exploit ezt teljesen kihagyja. Csatlakozik, memóriát foglal, majd lecsatlakozik anélkül, hogy megmondaná, mi az.
A különbség nyilvánvaló a naplókban. A normál forgalom percenként 1-3 kapcsolattal működik, 99-100%-os metaadatküldéssel. A tesztelés során a sebezhetőségi hiba percenként több mint 111 000 kapcsolatot generált 0%-os metaadatküldéssel. Ha azt látja, hogy egy IP-cím több ezer kapcsolatot létesít anélkül, hogy azonosítaná magát, az intő jel.
MongoDB Atlas-t használsz? A klaszterek automatikusan frissülnek, így védve kell hogy legyél. Ellenőrizd, hogy a frissítés már megtörtént-e.
A javítás egyetlen kódsor volt. A "return {output.length()};" értékét "return length;"-re kellett cserélni. Egy sor, ami a 3.6-os verzió óta minden MongoDB verzióban hibásan működik.
Érintett verziók:
- MongoDB 3.6.x, 4.0.x, 4.2.x (összes verzió)
- MongoDB 4.4.0 - 4.4.29
- MongoDB 5.0.0 - 5.0.31
- MongoDB 6.0.0 - 6.0.26
- MongoDB 7.0.0 - 7.0.27
- MongoDB 8.0.0 - 8.0.16
- MongoDB 8.2.0 - 8.2.2
Ellenőrizd, hogy sebezhető verziót futtatsz-e:
- Futtasd a "mongod --version" parancsot
- A 3.6 és 8.2.2 közötti verziók frissítésre szorulnak
Javított verziók: 8.2.3, 8.0.17, 7.0.28, 6.0.27, 5.0.32, 4.4.30
Nem tudod azonnal frissíteni? Tiltsd le a zlib tömörítést a networkMessageCompressors beállításával, hogy kizárja a zlibet. Használd helyette a Snappy-t vagy a Zstd-t. De a lehető leghamarabb javítsd ki a hibát.
A Heartbleed 2014-ben tanította meg ezt a leckét. Tizenegy évvel később 87 000 szerver még mindig ugyanazt a hibát követi el.
https://nvd.nist.gov/vuln/detail/CVE-2025-14847