社内の申請の仕組みや、取引先から書類を受け取るWebの画面を、Node.jsとExpressで作っている会社は少なくありません。そのファイルのアップロードの受け取りに、よく使われるのがmulterです。Expressの開発の団体が保守しています。
このmulterに、認証のいらない1回の要求で、Node.jsのプロセスを止められる脆弱性CVE-2026-113872が見つかりました。深刻度はHigh(CVSS 7.5)です。条件は、受け取るファイルを選ぶ処理(fileFilter)を非同期で書いていることです。10月22日に出た2.5.0で直っています。
multerの勧告。非同期のfileFilterで1回の要求でも落ちる出典: GitHub Advisory Database「GHSA-q7qp-rjg7-q26m」(引用)
起きることと条件
| 項目 |
内容 |
| CVE |
CVE-2026-113872(GHSA-q7qp-rjg7-q26m) |
| 深刻度 |
High(CVSS 3.1で7.5)。影響は可用性(サービスの停止) |
| 起きること |
Node.jsのプロセスが落ちる |
| 条件 |
fileFilterを非同期で設定している。保存先(ディスク・メモリなど)の種類は問わない |
| 認証 |
要らない。1回の要求で起きる |
| 影響しない場合 |
fileFilterが同期の処理 |
| 対象 |
2.0.0以上2.5.0未満 |
| 直った版 |
2.5.0(2026年10月22日) |
| 回避策 |
fileFilterを同期の処理にする |
なぜ1回の要求で落ちるのか
勧告によると、1つの要求に複数のファイルが入っていて、あるファイルが断られるなどして要求が打ち切られたとき、別のファイルの非同期のfileFilterがまだ結果を返していないことがあります。その処理があとから終わると、multerがもう片づけた読み込みの流れを動かそうとします。下で使っている部品(busboy)がその流れでエラーを出しますが、受け止める処理がもう無いため、Node.jsはこれを処理されないエラーとして扱い、プロセスを終わらせます。
ファイルの中身を調べる、データベースに問い合わせる、といった処理をfileFilterの中で待つ書き方は、珍しくありません。その書き方が、今回の条件にそのまま当てはまります(当社の見立て)。
1.x系は別の理由で上げる
今回の範囲は2.x系だけですが、1.x系を使い続けている仕組みもあります。npmは1.x系の最後の版(1.4.5-lts.2)に、「1.x系は複数の脆弱性の影響を受けており、2.x系で直っている。最新の2.x系に上げるように」との注意を付けています。1.x系の仕組みは、この機会に2.5.0へ上げる計画に入れます。