# 1通のリクエストであなたのサーバーが止まる?Multerの脆弱性を放置してはいけない理由 > Node.js/Express でファイルアップロードを書いたなら、ほぼ全員が使ってる Multer。実は 1.x 系には 2025〜2026 年に立て続けに HIGH 脆弱性が 7 件公開され、すべて 2.x で修正されました。仕組みと対策を身近な例えで。 Date: 2026-04-28 Tags: Node.js, Express, Multer, セキュリティ, 脆弱性 --- いつも画像アップロードで使っている `multer`。実は 2025 年以降、立て続けに **7 件の HIGH severity 脆弱性** が公開されました。「脆弱性って難しそう…」と思うかもしれませんが、放置するとあなたのサービスが**ある日突然動かなくなる**かもしれません。 この記事ではジュニアエンジニア向けに、Multer の役割から、今回の問題の正体、そして 5 分で終わる対策まで噛み砕いて解説します。 ![アップロードを仕分ける事務員さんと警告サイン](https://img.wiredxeco.com/wiredxeco/multer-vulnerabilities-2025-2026/hero.png) ## ① Multer ってそもそも何をしているの? Express でファイルアップロードを実装したことがあるなら、`multer` は必ず触っているはず。でも改めて聞かれると「何を解決してくれているのか」答えにくくありません? ブラウザから `` で送られたデータは、HTTP リクエストの中に **巨大なテキストの塊** として乗ってきます。`Content-Type: multipart/form-data` という、独特なフォーマットで複数のファイルやフォームフィールドが連結された状態。 このままでは Node.js でファイルとして扱えません。**Multer は、その「塊」から画像や PDF を切り分けて、ディスクに保存し、`req.file` / `req.files` という使いやすい形に整えてくれる「仕分け担当の事務員さん」** です。 ![ブラウザから Multer を経て Express で扱える形になる流れ](https://img.wiredxeco.com/wiredxeco/multer-vulnerabilities-2025-2026/role.png) ```js 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 ミリ秒で済みます」 今回の脆弱性は、**「事務員さんを意図的にパニックにさせるリクエストの送り方」** が複数発見されたという話です。 ![通常時は処理完了、攻撃時はパニックして処理待ちが積み上がる](https://img.wiredxeco.com/wiredxeco/multer-vulnerabilities-2025-2026/attack.png) 具体的には、攻撃者が次のようなリクエストを送ると… - **空のフィールド名**を含む変な書類 → 事務員パニック → サーバプロセスごと落ちる ([CVE-2025-48997](https://github.com/expressjs/multer/security/advisories/GHSA-g5hg-p3ph-g8qg)) - アップロードの**途中で接続を切る**動作を大量に繰り返す → 事務員が片付けられない書類が机の上に積み上がる → メモリと FD が枯渇 ([CVE-2025-47935](https://github.com/expressjs/multer/security/advisories/GHSA-44fp-w29j-9vj5)、[CVE-2026-2359](https://github.com/expressjs/multer/security/advisories/GHSA-v52c-386h-88mc)) - **入れ子が異常に深い**書類を送る → 事務員が「ページめくり地獄」に陥って机ごと吹っ飛ぶ (再帰スタックオーバーフロー、[CVE-2026-3520](https://github.com/expressjs/multer/security/advisories/GHSA-5528-5vmv-3xc2)) つまり、**「データを盗まれる」より「サービスがまるごと止まる」タイプの脆弱性 (DoS, Denial of Service)** が中心。1 通の悪意あるリクエストを送るだけで Node.js プロセスがクラッシュするようなものもあります。 ## ③ 影響:データ漏洩より怖い「停止」 「データが漏れるわけじゃないなら、別にいいんじゃない?」と思うかもしれません。でも実務的にはこちらの方がしんどいんですわ。 - **深夜 2 時にサーバが落ちる** → 監視アラート → エンジニアが叩き起こされる - **サービスが落ちている間の売上ゼロ** → 1 時間落ちたら EC サイトなら数十万円消える - **復旧後の事後対応** → 顧客への謝罪、原因究明、ポストモーテム書き - **小さな攻撃の繰り返しでメモリ枯渇** → ジワジワ重くなって誰のせいか分からないまま現場が疲弊 つまり「脆弱性を放置する=ある日突然、夜に起きる確率を上げる」ということ。これは怖いですよね。 ## ④ 公開された 7 件の脆弱性 (一次情報まとめ) 参考までに、2025〜2026 年に公開された Multer の HIGH severity 脆弱性を時系列でまとめておきます。リンクはすべて GitHub Security Advisory (一次情報源) です。 | 公開日 | CVE | 種別 | 影響バージョン | 修正 | |---|---|---|---|---| | 2025-05-19 | [CVE-2025-47944](https://github.com/expressjs/multer/security/advisories/GHSA-4pg4-qvpc-4q3h) | 未処理例外で crash | <2.0.0 | 2.0.0 | | 2025-05-19 | [CVE-2025-47935](https://github.com/expressjs/multer/security/advisories/GHSA-44fp-w29j-9vj5) | メモリ/FD リーク | <2.0.0 | 2.0.0 | | 2025-06-03 | [CVE-2025-48997](https://github.com/expressjs/multer/security/advisories/GHSA-g5hg-p3ph-g8qg) | 空フィールド名で crash | <2.0.1 | 2.0.1 | | 2025-07-17 | [CVE-2025-7338](https://github.com/expressjs/multer/security/advisories/GHSA-fjgf-rc76-4x9p) | 不正リクエストで crash | <2.0.2 | 2.0.2 | | 2026-02-27 | [CVE-2026-2359](https://github.com/expressjs/multer/security/advisories/GHSA-v52c-386h-88mc) | 切断時のリソース未解放 | <2.1.0 | 2.1.0 | | 2026-02-27 | [CVE-2026-3304](https://github.com/expressjs/multer/security/advisories/GHSA-xf7r-hgr6-v32p) | クリーンアップ不全 | <2.1.0 | 2.1.0 | | 2026-03-04 | [CVE-2026-3520](https://github.com/expressjs/multer/security/advisories/GHSA-5528-5vmv-3xc2) | 深いネストで再帰暴走 | <2.1.1 | 2.1.1 | CVSS は概ね 7.5〜8.7 (HIGH) の範囲。multer 1.x (`1.4.5-lts.2` を含む) は **全滅** と思っていい状況です。 ## ⑤ 対策:あなたのコードを救う 3 ステップ 5 分で終わります。 ### Step 1. 今のバージョンを確認 ```bash npm ls multer # または cat package.json | grep multer ``` `1.x` 系 (`1.4.x` も含む) なら脆弱性対象です。 ### Step 2. 最新の 2.x にアップデート ```bash 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 コールバックが削除された - ファイルフィルタのエラーハンドリングが少し厳しくなった 簡単な動作確認とテストを実行して、エラーが出なければ完了: ```bash npm audit # "found 0 vulnerabilities" が理想 ``` GitHub のリポジトリで Dependabot を有効化していれば、こういう脆弱性公開時に自動で PR を立ててくれるので、まだなら設定をおすすめします。 ## 締め 脆弱性は誰のせいでもありません。OSS のメンテナも人間で、攻撃手法も日々進化しています。**重要なのは「定期的にアップデートを取り込み続けるオペレーション」をプロジェクトに組み込むこと**。これが、ジュニアからプロのエンジニアになる分かれ道だったりします。 `npm install multer@latest` の 1 コマンドで、夜中に叩き起こされる確率がぐっと下がります。今すぐ `package.json` を開いてみてください。 --- **Refs (一次情報):** - [GitHub Security Advisories — expressjs/multer](https://github.com/expressjs/multer/security/advisories) - [Multer 公式リポジトリ](https://github.com/expressjs/multer) - [npm package: multer](https://www.npmjs.com/package/multer)