{"id":"CVE-2026-113872","aliases":["CLSA-2026-1793097623","CLSA-2026-1793098630","DEBIAN-CVE-2026-113872","EUVD-2026-108188","GHSA-q7qp-rjg7-q26m","ROOT-APP-NPM-CVE-2026-113872"],"status":"published","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.","severity":{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-12","score":0.00442,"percentile":0.38852,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":true,"fix_available":true},"cwes":["CWE-248","CWE-404"],"published":"2026-10-22T14:20:18Z","modified":"2026-11-04T10:00:36Z","exploits":[{"source":"pocgithub","id":"santihabib/multer-CVE-2026-113872","title":"santihabib/multer-CVE-2026-113872","date":"2026-10-23","url":"https://github.com/santihabib/multer-CVE-2026-113872"}],"fixes":[{"ecosystem":"npm","package":"multer","fixed_in":["2.5.0"],"sources":["ghsa","osv"]},{"ecosystem":"TuxCare:npm","package":"multer","fixed_in":["2.2.0-tuxcare.4","2.4.0-tuxcare.1"],"sources":["osv"]},{"ecosystem":"Debian:14","package":"node-multer","fixed_in":["2.5.0+~cs3.3.0-1"],"sources":["osv"]},{"ecosystem":"Root:npm","package":"multer","fixed_in":["2.3.0-aikido.1","2.4.0-aikido.1","2.0.2-aikido.7","2.2.0-aikido.2","2.3.0-aikido.2"],"sources":["osv"]},{"ecosystem":"Root:npm","package":"@rootio/multer","fixed_in":["2.3.0-root.io.1","2.4.0-root.io.1","2.0.2-root.io.7","2.2.0-root.io.2","2.3.0-root.io.2"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"npm","package":"multer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.0.0"},{"fixed":"2.5.0"}]}]},{"source":"osv","ecosystem":"TuxCare:npm","package":"multer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.2.0-tuxcare.0"},{"fixed":"2.2.0-tuxcare.4"}]}],"versions":["2.2.0","2.2.0-tuxcare.1","2.2.0-tuxcare.2","2.2.0-tuxcare.3"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"multer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.4.0-tuxcare.0"},{"fixed":"2.4.0-tuxcare.1"}]}],"versions":["2.4.0"]},{"source":"osv","ecosystem":"Debian:14","package":"node-multer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.5.0+~cs3.3.0-1"}]}],"versions":["2.2.0+~cs3.1.0-1","2.2.0+~cs3.1.0-2","2.2.0+~cs3.2.0-1","2.4.0+~cs3.2.0-1"]},{"source":"osv","ecosystem":"npm","package":"multer","ranges":[{"type":"SEMVER","events":[{"introduced":"2.0.0"},{"fixed":"2.5.0"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"multer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.3.0-aikido.1"},{"fixed":"2.4.0-aikido.1"},{"fixed":"2.0.2-aikido.7"},{"fixed":"2.2.0-aikido.2"},{"fixed":"2.3.0-aikido.2"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"@rootio/multer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.3.0-root.io.1"},{"fixed":"2.4.0-root.io.1"},{"fixed":"2.0.2-root.io.7"},{"fixed":"2.2.0-root.io.2"},{"fixed":"2.3.0-root.io.2"}]}]}],"products":[{"vendor":"expressjs","product":"multer"},{"vendor":"multer","product":"multer"}],"references":[{"url":"https://github.com/expressjs/multer/security/advisories/GHSA-q7qp-rjg7-q26m","tags":["advisory","web"]},{"url":"https://cna.openjsf.org/security-advisories.html","tags":["advisory","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-113872","tags":["advisory"]},{"url":"https://github.com/expressjs/multer/commit/80a2d9df1dfd63b5fab631b8b9966164ed647adf","tags":["web"]},{"url":"https://github.com/expressjs/multer/releases/tag/v2.5.0","tags":["web"]},{"url":"https://github.com/advisories/GHSA-q7qp-rjg7-q26m"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/113xxx/CVE-2026-113872.json","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-113872","tags":["advisory"]},{"url":"https://github.com/expressjs/multer","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-113872","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.","status":"published","published":"2026-10-22T14:20:18.363Z","modified":"2026-10-22T19:00:31.884Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"cna"}],"cwes":["CWE-248","CWE-404"],"updated_at":"2026-11-02T13:44:29.519518Z"}],"euvd":[{"id":"EUVD-2026-108188","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.","status":"published","published":"2026-10-22T14:20:18Z","modified":"2026-10-22T19:00:31Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-02T16:59:34.021826Z"}],"ghsa":[{"id":"GHSA-q7qp-rjg7-q26m","title":"multer vulnerable to Denial of Service via a pending asynchronous fileFilter after request teardown","description":"### Impact\n\nWhen `multer` is configured with an asynchronous `fileFilter`, a single request can crash the Node.js process. If a request is aborted (for example when one file is rejected) while another file's async `fileFilter` is still pending, the pending callback later resumes a parsing stream that multer has already torn down. busboy then emits an error on a stream that no longer has an error listener, which Node raises as an unhandled `'error'` event, and the process exits. A single unauthenticated request is enough, so any application using `multer` with an asynchronous `fileFilter` is affected, regardless of storage engine. Uploads using a synchronous `fileFilter` are not affected.\n\n### Patches\n\nUsers should upgrade to `multer` `2.5.0` or later.\n\n### Workarounds\n\nUse a synchronous `fileFilter`.","status":"published","published":"2026-10-23T22:08:22Z","modified":"2026-10-23T22:08:22Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"cwes":["CWE-248","CWE-404"],"updated_at":"2026-11-02T14:41:35.723785Z"}],"nvd":[{"id":"CVE-2026-113872","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.","status":"published","published":"2026-10-22T15:17:05.377Z","modified":"2026-10-22T19:17:36.023Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"secondary"}],"cwes":["CWE-248","CWE-404"],"updated_at":"2026-11-02T14:13:02.724605Z"}],"osv":[{"id":"CVE-2026-113872","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.","status":"published","published":"2026-10-22T14:20:18.363Z","modified":"2026-10-28T02:30:23.362122049Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"cwes":["CWE-248","CWE-404"],"updated_at":"2026-11-02T15:44:56.310988Z"},{"id":"DEBIAN-CVE-2026-113872","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.","status":"published","published":"2026-10-22T15:17:05.377Z","modified":"2026-11-04T10:00:36.521619627Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-04T10:05:32.187009Z"},{"id":"GHSA-q7qp-rjg7-q26m","title":"multer vulnerable to Denial of Service via a pending asynchronous fileFilter after request teardown","description":"### Impact\n\nWhen `multer` is configured with an asynchronous `fileFilter`, a single request can crash the Node.js process. If a request is aborted (for example when one file is rejected) while another file's async `fileFilter` is still pending, the pending callback later resumes a parsing stream that multer has already torn down. busboy then emits an error on a stream that no longer has an error listener, which Node raises as an unhandled `'error'` event, and the process exits. A single unauthenticated request is enough, so any application using `multer` with an asynchronous `fileFilter` is affected, regardless of storage engine. Uploads using a synchronous `fileFilter` are not affected.\n\n### Patches\n\nUsers should upgrade to `multer` `2.5.0` or later.\n\n### Workarounds\n\nUse a synchronous `fileFilter`.","status":"published","published":"2026-10-23T22:08:22Z","modified":"2026-10-23T22:15:04.285056362Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"cwes":["CWE-248","CWE-404"],"updated_at":"2026-11-02T15:46:54.055966Z"},{"id":"CLSA-2026-1793097623","title":"TuxCare security update for multer (1 CVE)","description":"TuxCare rebuilt multer to address 1 CVE. Fixed in 2.2.0-tuxcare.4.","status":"published","published":"2026-10-27T10:40:23Z","modified":"2026-10-27T13:30:07.475545303Z","updated_at":"2026-11-02T15:43:55.34846Z"},{"id":"CLSA-2026-1793098630","title":"TuxCare security update for multer (1 CVE)","description":"TuxCare rebuilt multer to address 1 CVE. Fixed in 2.4.0-tuxcare.1.","status":"published","published":"2026-10-27T10:57:10Z","modified":"2026-10-27T13:30:13.221018041Z","updated_at":"2026-11-02T15:43:55.34846Z"},{"id":"ROOT-APP-NPM-CVE-2026-113872","title":"CVE-2026-113872 in multer - Patched by Root","description":"Root has patched CVE-2026-113872 in the multer package for Root:npm. Multiple fixed versions available.","status":"published","published":"2026-11-04T08:05:48Z","modified":"2026-11-04T09:15:05.973887173Z","updated_at":"2026-11-04T09:34:03.871859Z"}]}}
