{"id":"CVE-2026-113872","kind":"vulnerability","aliases":["CVE-2026-113872","GHSA-q7qp-rjg7-q26m"],"related":[],"title":"multer vulnerable to Denial of Service via a pending asynchronous fileFilter after request teardown","description":"multer is a middleware for Node.js that handles multipart/form-data file uploads. In versions from 2.0.0 before 2.5.0, when multer is configured with an asynchronous fileFilter, a single request can crash the Node.js process. If the request is aborted while one file's asynchronous fileFilter is still pending, the pending callback later resumes a parsing stream that multer has already torn down, and the underlying parser emits an error on a stream that no longer has an error listener, which Node raises as an unhandled error event so the process exits. Any application using multer with an asynchronous fileFilter is affected regardless of storage engine, while uploads using a synchronous fileFilter are not affected. The issue is fixed in multer 2.5.0, and users should upgrade to 2.5.0 or later. As a workaround, use a synchronous fileFilter.","summary":"multer, a Node.js middleware for multipart uploads, crashes the whole process when a request is aborted while an asynchronous fileFilter is still pending. A single unauthenticated request is enough to take the application down repeatedly.","severity":"high","cvss":7.5,"epss":0.00441,"exploited":false,"exploited_at":null,"products":[{"name":"multer","fixed":["2.5.0"],"affected":">= 2.0.0, < 2.5.0","ecosystem":"npm"}],"ecosystems":["npm"],"tags":["cwe-248","cwe-404","express","multer","node.js","package","self-hosted"],"not_affected_if":["sync-filefilter","version-outside-range"],"how_to_check":"- Run `npm ls multer` to see the installed version.\n- Search the code for `fileFilter` and check whether the function is async (returns a promise or uses a callback that runs later).","fix":"- Upgrade `multer` to `2.5.0` or later.\n- Workaround until upgrade: switch the `fileFilter` to a synchronous function.","status":"open","published_at":"2026-10-22T15:17:05+00:00","first_seen_at":"2026-10-23T21:57:31+00:00","triaged_at":"2026-10-25T03:15:10+00:00","updated_at":"2026-10-25T03:15:10+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-25T03:15:10Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade `multer` to `2.5.0` or later.\n- Workaround until upgrade: switch the `fileFilter` to a synchronous function.","reach":"internet","title":"multer: aborted upload with async fileFilter crashes Node.js process","impact":"low","summary":"multer, a Node.js middleware for multipart uploads, crashes the whole process when a request is aborted while an asynchronous fileFilter is still pending. A single unauthenticated request is enough to take the application down repeatedly.","category":"package","nicknames":[],"who_cares":["node.js","multer","self-hosted","express"],"confidence":0.8,"needs_auth":"no","worst_case":"Single request crashes the Node.js process, causing denial of service","analyst_note":"","how_to_check":"- Run `npm ls multer` to see the installed version.\n- Search the code for `fileFilter` and check whether the function is async (returns a promise or uses a callback that runs later).","needs_analyst":false,"not_affected_if":["sync-filefilter","version-outside-range"],"who_is_affected":"Applications that run multer from `2.0.0` before `2.5.0` with an asynchronous fileFilter, whatever the storage engine. Uploads that use a synchronous fileFilter, or apps on versions outside that range, are not affected.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"unknown"},"cost_usd":0.000607,"input_tokens":3622,"output_tokens":490,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-113872':17A,25A '-2026':16A,24A '-248':28B '-404':30B '2.0.0':87C '2.5.0':89C,192C,198C 'abort':53B,110C 'affect':172C,185C 'alreadi':131C 'applic':70B,164C 'asynchron':10A,56B,96C,115C,169C 'callback':122C 'configur':93C 'crash':45B,102C 'cve':15A,23A 'cwe':27B,29B 'denial':4A 'emit':138C 'engin':176C 'enough':66B 'error':140C,149C,157C 'event':158C 'exit':162C 'express':31B 'file':82C,113C 'filefilt':11A,57B,97C,116C,170C,182C,207C 'fix':189C 'ghsa':19A 'ghsa-q7qp-rjg7-q26m':18A 'handl':80C 'host':37B 'issu':187C 'later':123C,200C 'listen':150C 'longer':146C 'middlewar':41B,76C 'multer':1A,26A,32B,38B,73C,91C,129C,166C,191C 'multipart':43B 'multipart/form-data':81C 'node':152C 'node.js':33B,40B,78C,104C 'one':112C 'packag':34B 'pars':126C 'parser':137C 'pend':9A,60B,119C,121C 'process':48B,105C,161C 'q26m':22A 'q7qp':20A 'rais':153C 'regardless':173C 'repeat':72B 'request':13A,51B,64B,100C,108C 'resum':124C 'rjg7':21A 'self':36B 'self-host':35B 'servic':6A 'singl':62B,99C 'still':59B,118C 'storag':175C 'stream':127C,143C 'synchron':181C,206C 'take':68B 'teardown':14A 'torn':132C 'unauthent':63B 'under':136C 'unhandl':156C 'upgrad':196C 'upload':44B,83C,178C 'use':165C,179C,204C 'user':194C 'version':85C 'via':7A 'vulner':2A 'whole':47B 'workaround':203C","nicknames":[],"mitigations":[],"who_affected":"Applications that run multer from `2.0.0` before `2.5.0` with an asynchronous fileFilter, whatever the storage engine. Uploads that use a synchronous fileFilter, or apps on versions outside that range, are not affected.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-22T15:17:05+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","cvss_by":"GitHub","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-113872","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-113872","severity":null,"published_at":"2026-10-22T15:17:05+00:00","modified_at":"2026-10-22T19:17:36+00:00","first_seen_at":"2026-10-23T21:57:31+00:00","fetched_at":"2026-10-23T22:29:02+00:00","note":null},{"source":"ghsa","external_id":"GHSA-q7qp-rjg7-q26m","url":"https://github.com/advisories/GHSA-q7qp-rjg7-q26m","severity":"high","published_at":"2026-10-23T22:08:22+00:00","modified_at":"2026-10-23T22:08:22+00:00","first_seen_at":"2026-10-23T22:15:56+00:00","fetched_at":"2026-10-23T22:15:56+00:00","note":null},{"source":"epss","external_id":"CVE-2026-113872","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-113872","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-24T07:15:51+00:00","fetched_at":"2026-10-24T07:15:51+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}