MongoDB Node.js Driverで接続先を偽装、修正版あり
MongoDB Node.js Driverの脆弱性で、mongodb+srv://を使うアプリはDNS応答の改ざんで接続先をすり替えられます。7.8.0以上へ更新し、接続文字列の形式をまず確認してください。
急ぎ度: 早めに
CVSS v3は7.4、v4は9.1で、修正版7.8.0が公開されているため、定例の更新を待たずに早めに当てる段階と考えます。
関係があるか
Node.jsアプリからMongoDBに、mongodb+srv:// 形式の接続文字列で接続している組織が対象です。mongodb:// 形式の接続文字列を使うアプリは影響を受けません。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| MongoDB Node.js Driver | 3.3.3以上7.8.0未満 | 7.8.0 |
確かめ方
- 1プロジェクトのディレクトリで
npm ls mongodbを実行し、導入されているドライバーの版を確認します。Mongooseなど別のライブラリ経由で入っている場合も、この出力に現れます。 - 2接続文字列がmongodb+srv:// で始まるかを、設定ファイル・環境変数・シークレット管理の画面で確認します。接続文字列にはパスワードが含まれるので、画面共有や共有チャットに貼らないでください。
- 3版が7.8.0未満で、接続文字列がmongodb+srv:// 形式なら該当します。どちらか一方だけなら、この脆弱性の対象にはなりません。
何が起きたか
MongoDB Node.js Driverに、接続先をすり替えられる脆弱性が見つかりました。接続文字列がmongodb+srv:// 形式のとき、DNSの応答を偽造または変更できる第三者が、アプリの接続先を自分の用意したホストに向けられます。2026年11月12日に公表され、7.8.0で修正されています。
ドライバーはmongodb+srv:// を受け取ると、DNSのSRV応答に含まれる各ホスト名が、接続文字列のドメイン配下にあるかを検査します。ところが実際の接続アドレスは、検査を通った名前ではなく、元の名前から組み立てます。元の名前には、ホスト名をそこで終わらせてしまう文字を含められるため、検査した名前と接続先がずれます。CWEはCWE-88です。
攻撃の流れ
-
1
DNS応答に介入
第三者がアプリの問い合わせに対するSRV応答を偽造または変更する。
-
2
ドメイン検査を通過
ドライバーが、応答のホスト名を接続文字列のドメイン配下かどうかで検査する。
-
3
接続先がずれる
接続アドレスは元の名前から組み立てられ、特定の文字でホスト名が途中で終わる。
-
4
別ホストに接続
ドライバーは、すり替えられた先のホスト名に対して証明書を検証し、接続する。
-
5
情報の露出と改変
アプリのデータと認証情報が相手に渡り、返されるクエリ結果も書き換えられる。
どう悪用されるか
悪用に認証は要りません。ネットワーク経由で、DNSのSRV応答を偽造または変更できる第三者が対象のアプリを狙います。アプリの利用者に操作を求める必要もありません。CVSS v3の攻撃条件は「高」とされ、誰でも簡単に突けるわけではありません。
TLSを使っていても防げません。ドライバーがサーバー証明書を、すり替えられたホスト名に対して検証するためです。
悪用されると、アプリのデータや認証情報が意図せず相手に渡るおそれがあります。クエリ結果が書き換えられる可能性もあります。
今すぐやること
-
1
ドライバーを7.8.0以上に更新する
package.jsonの依存を更新してlockfileを作り直し、テストを通したうえで再デプロイします。Mongooseなど別のライブラリ経由で入っている場合は、そのライブラリを更新するか、依存の解決先を7.8.0以上に上げます。更新後は、同じコマンドで版が上がったことを確認します。
npm ls mongodb -
2
7.8.0に上げられない系統は告知で確認する
一次情報で修正版として示されているのは7.8.0だけです。6系以前など古い系統を使っていて、すぐに7.8.0へ上げられない場合は、MongoDBの告知とJiraのチケットで、その系統向けの修正が出ているかを確認してください。出ていると決めつけて待たないようにします。
-
3
SRVの検証を緩めるオプションは使わない
7.8.0では、許可するホストのドメインを指定するsrvAllowedHostsSuffixと、利用者が判定の関数を渡すsrvHostValidatorが加わります。変更記録は「Modifying the default SRV domain name validation can create vulnerabilities」と警告しています。既定の検証で困らない限り、設定しません。
-
4
接続先の履歴を点検する
更新前の期間について、DNSリゾルバーのSRV問い合わせのログと、アプリやデータベース側の接続元・接続先のログに、想定外のホスト名がないかを見ます。
すぐ更新できないとき
すぐに更新できないアプリは、mongodb:// 形式の接続文字列に切り替えると、この脆弱性の対象から外れます。ホスト名を接続文字列に並べる必要があります。mongodb+srv:// が自動で補っていた設定、たとえばTLSなどの接続オプションが抜けないよう、切り替え後に接続の状態を確認してください。この切り替えはつなぎとして使い、7.8.0への更新は予定どおり進めます。
背景
Node.js Driverは、Node.jsのアプリがMongoDBを使うときの接続を受け持つ公式のドライバーです。mongodb+srv:// 形式は、DNSのSRVレコードからクラスターのノード一覧を取得します。接続文字列にホストを並べなくて済み、ノードの構成を変えてもアプリの設定を書き換えずに済みます。その代わり、接続先の決定をDNSの応答に任せるので、返ってきた名前を検査する処理が防御の要になります。
7.8.0の対応チケットによると、従来のNode.js Driverはホスト名の末尾のドットだけを比較の中で取り除き、接続先の一覧はDNSから返った名前のまま作っていました。7.8.0では、ホスト名の正規化を1か所で行い、正規化した名前を接続先の一覧にも使う方針が書かれています。
よくある質問
Q.Node.js以外のMongoDBドライバーも対象ですか。
Q.更新前の期間に、すでに接続先をすり替えられた可能性はどう調べますか。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
影響パッケージ
| パッケージ | 影響を受ける版 → 修正版 | |
|---|---|---|
| MongoDBNode.js Driver |
3.3.3 以上 7.8.0 未満→ 7.8.0 |
7.8.0 |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
A validation flaw in the DNS SRV host discovery of the MongoDB Node.js driver may cause the driver to connect to a host outside the expected domain. For a mongodb+srv:// connection string, the driver checks each host name in the DNS SRV response against the domain of the connection string. The driver then builds the connection address from the original name, in which certain characters end the host name early. An unauthenticated party who can forge or change the DNS SRV response may redirect the connection to a host of their choice. TLS does not prevent this, because the driver verifies the server certificate against the redirected host name. This may result in unintended disclosure of application data and authentication credentials, and in altered query results. Applications that use mongodb:// connection strings are not affected.
出典: CVE.org (CVE Program・cvelistV5) NVD
参照URL
- web cna@mongodb.com
- web github.com