本文へ移動

AI Buildersのための最新のニュース、知見、事例を毎日お届け

運営会社
企業のセキュリティ対策Mongoose

Mongoose、件数を数える処理で入力の無害化が効かない脆弱性 修正版へ上げる

Node.jsからMongoDBを使うライブラリ「Mongoose」の開発チームは11月3日(日本時間)、入力の無害化の設定が件数を数える処理で効かない脆弱性「CVE-2026-125120」を公表した。6系から9系が当たり、それぞれの修正版へ上げる必要がある。

記事の内容を自社でどう進めるか、内容が固まっていない段階でも相談できます。仕事の相談

毎週 1 回、その週の記事から 5 本と実践の 1 本を選んでメールで届けます。ニュースレターを購読する(無料)

Mongooseの公式文書にある、文書を保存する時の処理の流れを6つの箱でつないだ図
画像: Mongoose

Node.jsからMongoDBを使うためのライブラリ「Mongoose」の開発チームは11月3日(日本時間)、入力の無害化が件数を数える処理で効かない脆弱性の公告を出した。GitHubの脆弱性データベースは11月11日(日本時間)にこの公告を確認して載せた。当たるのは、無害化の設定「sanitizeFilter」を有効にし、利用者の入力を件数の数え方「countDocuments()」の検索条件に渡すアプリだ。使っている系の修正版へ上げる必要がある。

6系から9系の古い版が当たる

公告とGitHubの脆弱性データベースの記録によると、対象と修正版は次のとおりだ。

  • 対象: npmのパッケージ「mongoose」の6.13.11未満、7.0.0以上7.8.12未満、8.0.0以上8.24.3未満、9.0.0以上9.9.2未満
  • 修正版: 6.13.11、7.8.12、8.24.3、9.9.2
  • CVE番号: CVE-2026-125120(NVDの記録は11月10日に公開)
  • 深刻度: CVSS 3.1で9.8(GitHubの評価)。認証も利用者の操作も要らない
  • 弱点の種類: CWE-943(データの問い合わせの組み立ての不備)
  • 中身: sanitizeFilterを有効にしても、countDocuments()に渡した検索条件は無害化されず、入力に紛れた演算子がそのまま演算子として働いていた

公式の文書によると、sanitizeFilterは、検索条件の中で「$」で始まる演算子を、ただの値との一致を調べる形に包む設定だ。デフォルトでは切れている。NVDの説明によると、この包みが件数を数える処理で抜けていたため、本来は一致しない文書まで件数に入る。アプリがその件数で権限や処理の分かれ道を決めていると、その判断が崩れ得る。NVDは11月11日の時点で独自の評価をまだ付けておらず、9.8はGitHubが付けた評価だ。

使っている版を確かめる

公式の文書に、この脆弱性専用の確かめ方は見当たらなかった。npmの一般的なコマンド「npm ls mongoose」で、アプリが入れている版を見る。別のパッケージが中で使う分も一覧に出る。版が上の範囲にあれば当たる。手元の開発の環境だけでなく、本番に置いた版も見る。ロックファイル(package-lock.jsonなど)に書かれた版が、実際に動いている版と同じかも確かめたい。コンテナで動かしているなら、作り直す前のイメージに古い版が残っていないかも見る。

あわせて、コードを文字列で検索し、sanitizeFilterを有効にしているかと、countDocumentsに利用者の入力を渡していないかを見たい。NVDの説明が挙げる条件は、この2つがそろうことだ。どちらか一方でも見つかれば、版を上げる前提で進めるのが早い。

修正版へ上げ、上げる前は包む

公告は、6.13.11、7.8.12、8.24.3、9.9.2で直したと書く。9.9.2の公開の記録によると、これらの版は8月11日(日本時間)に出ており、countDocuments()とcursor()でもsanitizeFilterを効かせるよう直した。公告が出る3か月近く前から、修正版は手に入っていたことになる。

公式の版の支援の方針によると、5系は2024年3月1日に支援を終えており、修正版も無い。記録の範囲には5系も入るが、5系にはsanitizeFilterの設定そのものが無い。6系もセキュリティの修正と、求めのあった不具合の修正だけを受ける段階で、2027年2月1日に支援を終える。5系を使っているなら、6系以降へ移る必要がある。上げた後は、もう一度「npm ls mongoose」を流し、別のパッケージが中で使う分も含めて、全部が修正版以上になったことを確かめる。古い版を固定した依存が残ると、そこだけ直らない。

すぐ上げられない場合の回避策として、公告は、全部のモデルに共通の処理を足し、countDocuments()が動く直前に検索条件をmongoose.sanitizeFilter()で包む方法を示している。ただし公告の見本のコードは、関数の引数の書き方が抜けていて、そのままでは動かない。また、回避策が包むのはcountDocuments()だけで、修正版が直したcursor()は含まない。回避策は上げるまでのつなぎとし、修正版へ上げる方が確実だ。

悪用の報告はまだ無い

CVE-2026-125120は、11月11日の時点で、米CISAの悪用を確認した脆弱性の一覧(KEV)に載っていない。悪用の報告も公告には無い。一方で、直した内容は、8月から修正版の公開の記録とコードの変更で誰でも読める。

SAGUSでは当たらなかった

SAGUSは、開発に使う2台の端末と本番のサイトについて、Mongooseを使っていないかを確かめた。端末では、開発の作業場所のpackage.jsonとロックファイルにmongooseが無いこと、入った依存の中にも無いこと、コードにsanitizeFilterが無いことを見た。社のGitHubのリポジトリも検索し、mongooseを使う物は無かった。本番のサイトもMongooseを使っておらず、当たらなかった。

編集部の見方

編集部は、Mongooseを使うアプリは、sanitizeFilterを有効にしているかに関わらず、今週中に使っている系の修正版へ上げるべきだと考える。修正版は8月から出ており、同じ系の中で上げるだけで済むからだ。sanitizeFilterに頼って入力の型の確認を省いているアプリほど、件数を使った判断が崩れやすい。上げた後も、件数で権限を決める作りなら、入力が文字列や数値であることを確かめる処理を足したい。

出典

に確認(日本時間)

  1. 入力の無害化が件数を数える処理で効かない脆弱性の公告(github.com)
  2. GitHubの脆弱性データベースの記録(github.com)
  3. NVDの記録(nvd.nist.gov)
  4. 公式の文書(mongoosejs.com)
  5. 9.9.2の公開の記録(github.com)
  6. 公式の版の支援の方針(mongoosejs.com)
  7. KEV(cisa.gov)

この記事をシェア

この記事は役に立ちましたか