影響を受ける Akamai Hunt のお客様には、脆弱性のある資産の詳細なマッピングとともに、実行可能な緩和手順をすでに提供しています。
エグゼクティブサマリー
2025 年 12 月 19 日、MongoDB インスタンスで、MongoDB の展開の大部分に影響を与える新たな脆弱性が公表されました。
MongoBleed と呼ばれるこの脆弱性は、MongoDB の zlib 圧縮メッセージの処理に潜み、認証されていないクライアントが初期化されていないヒープメモリーをデータベースから漏えいさせることができるというものです。
CVE には、CVSSv4 スコアが 8.7 と評価されています。
2025 年 12 月 29 日、米国サイバーセキュリティ・社会基盤安全保障庁(CISA)は、既知の悪用された脆弱性(KEV)カタログに CVE-2025-14847 を追加し、これが実際に悪用されていることを確認しました。並行して、Akamai のテレメトリーでは、エンタープライズネットワークの約 62% で MongoDB 通信が行われていることがわかっています。
このブログ記事では、MongoBleed を技術的に解説し、影響を受ける MongoDB バージョンの概要(およびパッチ分析)、そして Akamai Guardicore Segmentation の Insight 機能のクエリーを使用して脆弱な資産を特定するなどの実用的な緩和ガイダンスを提供します。
脆弱性の詳細
MongoBleed は、MongoDB が圧縮されたワイヤプロトコルメッセージを処理する方法に起因します。この機能は、デフォルトで有効になっています。
MongoDB は、OP_MSG オペコードでフラグが付けられたメッセージを使用して通信します。ここで、リクエストペイロードはバイナリー JSON(BSON)形式でエンコードされます。圧縮メッセージが送信されると、元の OP_MSG ペイロードは OP_COMPRESSED 構造体内にラップされます。
OP_COMPRESSED メッセージには、OP_MSG ペイロードと非圧縮ペイロードの予想サイズが含まれます。
struct OP_COMPRESSED {
struct MsgHeader {
int32 messageLength;
int32 requestID;
int32 responseTo;
int32 opCode;
};
int32_t originalOpcode;
int32_t uncompressedSize;
uint8_t compressorId;
char *compressedMessage;
};
攻撃者は、uncompressedSize フィールドを操作して、圧縮されたペイロードの実際のサイズよりも大きくすることができます。この値は検証されないため、この操作では、初期化されていないヒープメモリーが割り当てられ、バッファの割り当てが過剰になります。
漏えいしたメモリーには、以前ヒープを占有していたものに応じて、クリアーテキストのパスワード、認証情報、API キー、その他の機微なインメモリーデータの情報の一部が含まれる可能性があります。
MongoDB のエラー処理ロジックにより、流出はさらに拡大します。送信された不正な形式の BSON オブジェクトにヌル終端文字が含まれていない場合、サーバーはヌル終端文字が検知されるまでメモリーを解析します。解析が最終的に失敗すると、サーバーは元のメッセージと漏えいしたヒープコンテンツを含むエラー応答を返します。
この記事の執筆時点で、インターネットに公開された MongoDB インスタンスの件数を Shodan が 213,000 件以上と報告した一方で、Censys は 87,000 件以上と報告しており、この脆弱性によって公開されたインスタンスが広範囲にわたることを強調しています。
一般公開されている悪用の手口
この脆弱性の公表から数日以内に、実際の悪用の手口が GitHub で公開されました。この悪用は、不正な圧縮リクエストを繰り返し送信することに依存しているため、攻撃者はヒープメモリーの大部分を徐々に漏えいさせることができてしまいます。
影響を受けるバージョン
MongoBleed は、次の MongoDB バージョンに影響します。
8.2.0–8.2.2
8.0.0–8.0.16
7.0.0–7.0.27
6.0.0–6.0.26
5.0.0–5.0.31
4.4.0–4.4.29
すべての v3.6、v4.0、v4.2 バージョン
パッチ分析
1 行修正用パッチでは、OP_COMPRESSED BSON で提供される値を単に信頼するのではなく、出力サイズから派生したメッセージのサイズを計算するようになっています。これにより、実際のメッセージサイズを超える追加メモリーが割り当てられることがなくなります。
- return {output.length()};
+ return length;
緩和策
パッチが適用されたバージョンにアップグレードする
パッチが適用されているのは、バージョン 8.2.3、8.0.17、7.0.28、6.0.27、5.0.32、4.4.30 です。
いずれかのバージョンにアップグレードすると、脆弱性が完全に修復されます。
ネットワークセグメンテーションによって露出を抑える
パッチが適用されるまでは、セグメンテーションを使用して以下の対応をとれば、露出を大幅に縮小することができます。
ポート TCP/27017 で MongoDB インスタンスへのインバウンド・インターネット・アクセスをブロックする
明示的に信頼されたソースからの接続のみを許可する
Akamai Guardicore Segmentation で脆弱なホストを特定する
Akamai Guardicore Segmentation の Insight 機能の下記クエリーは、脆弱性のある MongoDB インスタンスを実行しているホストを特定します。
Linux 資産
WITH LINUX AS (
SELECT DISTINCT name, version, source
FROM deb_packages
WHERE name = 'mongodb-org-server'
UNION ALL
SELECT DISTINCT name, version, source
FROM rpm_packages
WHERE name = 'mongodb-org-server'
),
PARSED AS (
SELECT name, source, version,
CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 1) AS INTEGER) AS major,
CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 2) AS INTEGER) AS minor,
CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 3) AS INTEGER) AS patch
FROM LINUX
)
SELECT name, source, version
FROM PARSED
WHERE
(major = 8 AND minor = 2 AND patch BETWEEN 0 AND 2)
OR
(major = 8 AND minor = 0 AND patch BETWEEN 0 AND 16)
OR
(major = 7 AND minor = 0 AND patch BETWEEN 0 AND 27)
OR
(major = 6 AND minor = 0 AND patch BETWEEN 0 AND 26)
OR
(major = 5 AND minor = 0 AND patch BETWEEN 0 AND 31)
OR
(major = 4 AND minor = 4 AND patch BETWEEN 0 AND 29)
OR
(major = 3 AND minor = 6)
OR
(major = 4 AND minor IN (0, 2))
Windows 資産
WITH WINDOWS AS (
WITH MONGO_PROGRAMS AS (
SELECT DISTINCT name, version, install_source AS source, REGEX_MATCH(name, 'MongoDB [0-9].*', 0) AS mongo_match
FROM programs
WHERE name LIKE "MongoDB%"
)
SELECT DISTINCT name, version, source
FROM MONGO_PROGRAMS
WHERE LENGTH(mongo_match) > 0
),
PARSED AS (
SELECT name, source, version,
CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 1) AS INTEGER) AS major,
CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 2) AS INTEGER) AS minor,
CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 3) AS INTEGER) AS patch
FROM WINDOWS
)
SELECT name, source, version
FROM PARSED
WHERE
(major = 8 AND minor = 2 AND patch BETWEEN 0 AND 2)
OR
(major = 8 AND minor = 0 AND patch BETWEEN 0 AND 16)
OR
(major = 7 AND minor = 0 AND patch BETWEEN 0 AND 27)
OR
(major = 6 AND minor = 0 AND patch BETWEEN 0 AND 26)
OR
(major = 5 AND minor = 0 AND patch BETWEEN 0 AND 31)
OR
(major = 4 AND minor = 4 AND patch BETWEEN 0 AND 29)
OR
(major = 3 AND minor = 6)
OR
(major = 4 AND minor IN (0, 2))
圧縮リクエストを無効化する(一時的な緩和策)
インスタンスをアップグレードまたはセグメント化できない場合は、zlib 圧縮リクエストを無効化することで悪用を防止できます。詳細な手順については、MongoDB の公式情報である Issue Tracker を参照してください。
まとめ
MongoBleed(CVE-2025-14847)は、遠隔操作で悪用可能な MongoDB の脆弱性です。認証されていない攻撃者が初期化されていないヒープメモリーを漏えいさせることができてしまいます。
悪用の手口が一般公開されており、インターネット上に公開されたインスタンスは数千件に上ることから、機微な情報の漏えいリスクは切迫していると考えられます。影響を受けるバージョンを稼働している組織は、パッチが適用されたリリースにアップグレードするか、ネットワーク・セグメンテーション・ルールを適用して、リスクを最小限に抑える必要があります。
今後の情報提供
タグ