CVE-2025-14847:MongoBleed について知っておくべきこと

影響を受ける 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 の脆弱性です。認証されていない攻撃者が初期化されていないヒープメモリーを漏えいさせることができてしまいます。

悪用の手口が一般公開されており、インターネット上に公開されたインスタンスは数千件に上ることから、機微な情報の漏えいリスクは切迫していると考えられます。影響を受けるバージョンを稼働している組織は、パッチが適用されたリリースにアップグレードするか、ネットワーク・セグメンテーション・ルールを適用して、リスクを最小限に抑える必要があります。

今後の情報提供

Akamai Security Intelligence Group は、お客様とセキュリティコミュニティ全体のために、このような脅威を監視し、報告し、緩和策を作成し続けます。Akamai Security Intelligence Group の最新ニュースは、Akamai の調査ホームページをご覧になるか、Akamai のソーシャルメディアをフォローしてご確認いただくことができます。

タグ

共有する

関連するブログ投稿

セキュリティリサーチ
AIベースの再起動:WebアプリとAPIの防御を再検討する
April 22, 2025
脅威アクターは現在、AIで生成されたキルチェーンを展開し、攻撃ライフサイクル全体を自動化しています。貴組織を保護する方法を学びましょう。
サイバーセキュリティ
修正の内部を探る:CVE-2026-21513 の悪用に関する分析
February 20, 2026
PatchDiff-AI が解明した、活発に悪用された MSHTML の脆弱性である CVE-2026-21513 の根本原因と、その脆弱性を APT28 が実際の攻撃で悪用した手口をご覧ください。
セキュリティリサーチ
脆弱性検知に活躍する AI:人間による監視と注意が必要
March 13, 2026
セキュリティの脆弱性を見つけ出す際に、責任ある AI システムの利用を実現するには、人間による監視が不可欠である理由と、フォールス・ポジティブ(誤検知)を回避する方法を説明します。