MongoDB 於 2025 年底爆發類似 HeartBleed 的重大記憶體洩漏漏洞——MongoBleed。此漏洞源於 zlib 壓縮元件的邏輯缺陷,攻擊者無需身分驗證,即可透過惡意 BSON 封包觸發未初始化的堆疊記憶體外洩,導致明文密碼、Session Token 及 API 金鑰等敏感資訊曝光。影響範圍涵蓋幾乎所有版本,且已被應用於實戰攻擊。
企業應立即採取行動:更新至修補版本、暫時停用 zlib 壓縮,並監測 Event ID 22943/22944 等異常連線紀錄。本文深入探討漏洞成因與防護措施,助您守護資料庫安全。
MongoDB開發團隊於2025年12月19日發布了高風險(CVSS v3.1 score 7.5/v4.0 score 8.7)的堆疊記憶體洩漏漏洞CVE-2025-14847,因其效果類似HeartBleed,被命名為MongoBleed。
該漏洞早在2017年便存在MongoDB中,影響範圍幾乎涵括了所有版本,並且被應用於實際攻擊中。MongoDB開發團隊已於同月22日進行了漏洞修補,並於24日發布了修補後的版本。
而產生該漏洞的原因出在zlib元件的資訊壓縮邏輯缺陷,使攻擊者在不需要經過任何身分驗證的情況下可以透過發送惡意的封包取得未初始化的堆疊記憶體的內容,導致敏感資料與憑證的外洩。
漏洞成因:
1、MongoDB通訊中使用BSON作為訊息格式,經過壓縮的請求如下圖所示,其中uncompressedSize欄位代表解壓縮後的有效載荷的實際大小:
2、message_compressor_zlib.cpp回傳的是已分配的緩衝區長度,而非實際解壓縮後的長度。當uncompressedSize大於解壓縮後的實際有效載荷時,伺服器並不會檢查有效載荷的大小導致未初始化的堆疊資料被包含於其中。
未初始化的堆疊資料中,可能包含:個人或客戶資訊文密碼、憑證、session token、API金鑰、系統資訊、資料庫設定、檔案路徑、IP等機密資訊。
3、攻擊者可反覆傳送uncompressedSize過大、經過壓縮且不包含終止符號(\0)的無效BSON物件,迫使伺服器繼續掃描錯誤分配的記憶體中未初始化的緩衝區直到找到終止符號並回傳包含了未初始化記憶體片段的錯誤訊息,來達到掃描資料庫堆疊記憶體的效果。
影響:
由於該漏洞發生於驗證之前,只要能透過網路存取該MongoDB資料庫,任何人皆可取得資料庫中潛在的敏感資料,所有暴露於網路上且未更新的MongoDB資料庫皆存在被濫用MongoBleed漏洞導致資訊洩漏的風險。
可採取的措施:
1、暫時停用zlib,或以snappy、zstd取代。
2、更新MongoDB版本。
3、限制MongoDB伺服器的網路存取,避免直接暴露於網際網路中減少攻擊面。
4、監測認證前連線行為、意外崩潰或發生錯誤的記錄。
→ MongoDB會在建立連線後傳送客戶端metadata的訊息,產生event ID 51800。
然而利用MongoBleed漏洞所產生的快速連線則不會產生event ID 51800,而是留下反覆存取產生的大量event ID 22943、22944。
想了解更多產品資訊,請連至官網https://www.neithnet.com/zh/,或直接與NEITHNET資安專家聯繫:info@neithnet.com
參考資料:
4. MongoBleed Explained Simply
5. Hunting MongoBleed – Eric Capuano