日本語
AI版
企業紹介 AI 時代のシステム開発 ブログ お問い合わせ AI向けページ

BLOG

1通のリクエストであなたのサーバーが止まる?Multerの脆弱性を放置してはいけない理由

Node.js/Express でファイルアップロードを書いたなら、ほぼ全員が使ってる Multer。実は 1.x 系には 2025〜2026 年に立て続けに HIGH 脆弱性が 7 件公開され、すべて 2.x で修正されました。仕組みと対策を身近な例えで。

#Node.js#Express#Multer#セキュリティ#脆弱性

いつも画像アップロードで使っている multer。実は 2025 年以降、立て続けに 7 件の HIGH severity 脆弱性 が公開されました。「脆弱性って難しそう…」と思うかもしれませんが、放置するとあなたのサービスがある日突然動かなくなるかもしれません。

この記事ではジュニアエンジニア向けに、Multer の役割から、今回の問題の正体、そして 5 分で終わる対策まで噛み砕いて解説します。

アップロードを仕分ける事務員さんと警告サイン

① Multer ってそもそも何をしているの?

Express でファイルアップロードを実装したことがあるなら、multer は必ず触っているはず。でも改めて聞かれると「何を解決してくれているのか」答えにくくありません?

ブラウザから <input type="file"> で送られたデータは、HTTP リクエストの中に 巨大なテキストの塊 として乗ってきます。Content-Type: multipart/form-data という、独特なフォーマットで複数のファイルやフォームフィールドが連結された状態。

このままでは Node.js でファイルとして扱えません。Multer は、その「塊」から画像や PDF を切り分けて、ディスクに保存し、req.file / req.files という使いやすい形に整えてくれる「仕分け担当の事務員さん」 です。

ブラウザから Multer を経て Express で扱える形になる流れ

import multer from "multer";

const upload = multer({ dest: "uploads/" });

app.post("/upload", upload.single("photo"), (req, res) => {
  // req.file に保存先のパスやファイル情報がもう入ってる
  res.json({ saved: req.file.path });
});

たった数行でファイルアップロードが書ける。それは、事務員さんが裏で頑張って書類を仕分けてくれているから。

② 今回の脆弱性を身近な例えで

通常はこうです:

あなた「この multipart リクエスト、画像とテキストに仕分けて保存しといて」

事務員(Multer)「了解、3 ミリ秒で済みます」

今回の脆弱性は、「事務員さんを意図的にパニックにさせるリクエストの送り方」 が複数発見されたという話です。

通常時は処理完了、攻撃時はパニックして処理待ちが積み上がる

具体的には、攻撃者が次のようなリクエストを送ると…

  • 空のフィールド名を含む変な書類 → 事務員パニック → サーバプロセスごと落ちる (CVE-2025-48997)
  • アップロードの途中で接続を切る動作を大量に繰り返す → 事務員が片付けられない書類が机の上に積み上がる → メモリと FD が枯渇 (CVE-2025-47935、CVE-2026-2359)
  • 入れ子が異常に深い書類を送る → 事務員が「ページめくり地獄」に陥って机ごと吹っ飛ぶ (再帰スタックオーバーフロー、CVE-2026-3520)

つまり、「データを盗まれる」より「サービスがまるごと止まる」タイプの脆弱性 (DoS, Denial of Service) が中心。1 通の悪意あるリクエストを送るだけで Node.js プロセスがクラッシュするようなものもあります。

③ 影響:データ漏洩より怖い「停止」

「データが漏れるわけじゃないなら、別にいいんじゃない?」と思うかもしれません。でも実務的にはこちらの方がしんどいんですわ。

  • 深夜 2 時にサーバが落ちる → 監視アラート → エンジニアが叩き起こされる
  • サービスが落ちている間の売上ゼロ → 1 時間落ちたら EC サイトなら数十万円消える
  • 復旧後の事後対応 → 顧客への謝罪、原因究明、ポストモーテム書き
  • 小さな攻撃の繰り返しでメモリ枯渇 → ジワジワ重くなって誰のせいか分からないまま現場が疲弊

つまり「脆弱性を放置する=ある日突然、夜に起きる確率を上げる」ということ。これは怖いですよね。

④ 公開された 7 件の脆弱性 (一次情報まとめ)

参考までに、2025〜2026 年に公開された Multer の HIGH severity 脆弱性を時系列でまとめておきます。リンクはすべて GitHub Security Advisory (一次情報源) です。

公開日CVE種別影響バージョン修正
2025-05-19CVE-2025-47944未処理例外で crash<2.0.02.0.0
2025-05-19CVE-2025-47935メモリ/FD リーク<2.0.02.0.0
2025-06-03CVE-2025-48997空フィールド名で crash<2.0.12.0.1
2025-07-17CVE-2025-7338不正リクエストで crash<2.0.22.0.2
2026-02-27CVE-2026-2359切断時のリソース未解放<2.1.02.1.0
2026-02-27CVE-2026-3304クリーンアップ不全<2.1.02.1.0
2026-03-04CVE-2026-3520深いネストで再帰暴走<2.1.12.1.1

CVSS は概ね 7.5〜8.7 (HIGH) の範囲。multer 1.x (1.4.5-lts.2 を含む) は 全滅 と思っていい状況です。

⑤ 対策:あなたのコードを救う 3 ステップ

5 分で終わります。

Step 1. 今のバージョンを確認

npm ls multer
# または
cat package.json | grep multer

1.x 系 (1.4.x も含む) なら脆弱性対象です。

Step 2. 最新の 2.x にアップデート

npm install multer@latest
# pnpm なら
pnpm add multer@latest
# yarn なら
yarn add multer@latest

これで multer@2.1.1 以上が入ります (執筆時点)。

Step 3. アップデート後に動作確認

Multer 1.x → 2.x の API は 基本互換 ですが、いくつか変更点があります:

  • multer.diskStorage / multer.memoryStorage はそのまま使える
  • 一部の deprecated コールバックが削除された
  • ファイルフィルタのエラーハンドリングが少し厳しくなった

簡単な動作確認とテストを実行して、エラーが出なければ完了:

npm audit
# "found 0 vulnerabilities" が理想

GitHub のリポジトリで Dependabot を有効化していれば、こういう脆弱性公開時に自動で PR を立ててくれるので、まだなら設定をおすすめします。

締め

脆弱性は誰のせいでもありません。OSS のメンテナも人間で、攻撃手法も日々進化しています。重要なのは「定期的にアップデートを取り込み続けるオペレーション」をプロジェクトに組み込むこと。これが、ジュニアからプロのエンジニアになる分かれ道だったりします。

npm install multer@latest の 1 コマンドで、夜中に叩き起こされる確率がぐっと下がります。今すぐ package.json を開いてみてください。


Refs (一次情報):

CONTACT

お問い合わせ

プロジェクトのご相談、お気軽にどうぞ。通常 2 営業日以内にご返信します。