
CVE-2025-14847 説明とラボ
参考 CVE : CVE-2025-14847
このリポジトリは、データベースワイヤプロトコルにおける「圧縮フレーミング / サイズメタデータのメモリ開示」として説明される問題のクラスの 概念 を実証する 教育用ラボ です。
これは防御的な理解を支援するために書かれています: MongoDB のネットワーク圧縮がどのようにネゴシエーションおよびフレーミングされるか、なぜ サイズフィールド が重要なのか、そして堅牢なパーサーがどのように意図しないメモリ露出を防ぐのか。
CVE 参照に関する注意: このラボは CVE-2025-14847 として参照されるアイデアを中心に構成されています。このリポジトリは、特定のベンダーのバグを検証、再現、悪用したり、特定の MongoDB バージョンが影響を受けると主張したりするものでは ありません。これは一般的な障害モード (圧縮ペイロード周辺のサイズメタデータの不一致) と緩和策に焦点を当てています。
このリポジトリには、特定の CVE に対して脆弱またはパッチが適用されている MongoDB バージョンの証拠は 含まれておらず (また使用すべきではありません)。
レポートのために「脆弱」と「パッチ適用済み」のバージョンを正しく文書化するには、その CVE に関する 公式のベンダーアドバイザリ / リリースノート を使用し、それを引用してください。
実行中のものを確認するための実用的な手順:
docker compose exec mongodb mongod --versiondocker compose exec mongodb mongosh --quiet --eval "db.version()"mongod --versionmongosh --quiet --eval "db.version()"使用しているアドバイザリのリンクを共有していただければ、推測せずに README に「影響を受ける / 修正済み」の表をきれいにフォーマットできます。
このラボは 圧縮フレーミング / サイズメタデータの不一致 障害モードを示しています:
OP_COMPRESSED エンベロープにより さらに多くの サイズフィールド (外部メッセージ長、宣言された非圧縮サイズ、内部メッセージ自身の長さ) が追加されます。詳細なフレーミングの説明については protocol_overview.md を参照してください。
このラボの終了時には、以下ができるようになるはずです:
行うこと:
compression: ["zlib"] を含む非圧縮の hello を送信するOP_COMPRESSED メッセージを送信する行わないこと:
docker-compose.yml – zlib 圧縮を有効にし、localhost のみ に公開された MongoDB コンテナを実行する。protocol_overview.md – ワイヤプロトコル + BSON + 圧縮ワークフロー + 概念的な脆弱性の説明。mitigation.md – 防御ガイダンス: パッチ適用、設定、および検出のアイデア。lab_probe.py – 圧縮をネゴシエートし、メッセージサイズを安全にログに記録するオリジナルのプローブ。このリポジトリのディレクトリから:
docker compose up -d
実行中であることを確認:
docker compose ps
python .\lab_probe.py
期待される出力:
hello からネゴシエートされた圧縮方式を表示hello を送信し、圧縮および解凍されたメッセージサイズの両方をログに記録python .\lab_probe.py --toy-demo
これはローカルのパースチェックのみを実行し、サイズ検証 がなぜ重要かを示します。
docker compose down
127.0.0.1:27017 にバインドされています。