{"id":"CVE-2026-19484","aliases":["EUVD-2026-57759","GHSA-xjh9-v7x6-24jw","ROOT-APP-NPM-CVE-2026-19484"],"status":"published","title":"@fastify/busboy vulnerable to Denial of Service via oversized multipart boundary","description":"@fastify/busboy is a multipart form-data parser. In versions 3.1.0 through 3.2.0, a remote unauthenticated attacker can stall the Node.js event loop by sending a multipart request whose boundary is crafted to a specific length. The vendored streaming search stores its skip table in a fixed 256 entry byte array, and a boundary of exactly 252 bytes makes the search needle 256 bytes, which truncates the default skip distance to zero and turns the search into a CPU bound loop on a small body. A single small request can keep one core busy and deny service to other requests handled by the same process. The issue is fixed in @fastify/busboy 3.2.1, which widens the skip table so the skip distance is preserved. Users should upgrade to 3.2.1.","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-09","score":0.00615,"percentile":0.49728,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-1322","CWE-835"],"published":"2026-08-13T08:50:47Z","modified":"2026-10-28T02:30:40Z","fixes":[{"ecosystem":"npm","package":"@fastify/busboy","fixed_in":["3.2.1"],"sources":["ghsa","osv"]},{"ecosystem":"Root:npm","package":"@fastify/busboy","fixed_in":["3.2.0-aikido.2"],"sources":["osv"]},{"ecosystem":"Root:npm","package":"@rootio/fastify__busboy","fixed_in":["3.2.0-root.io.2"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"npm","package":"@fastify/busboy","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.1.0"},{"fixed":"3.2.1"}]}]},{"source":"osv","ecosystem":"npm","package":"@fastify/busboy","ranges":[{"type":"SEMVER","events":[{"introduced":"3.1.0"},{"fixed":"3.2.1"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"@fastify/busboy","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.2.0-aikido.2"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"@rootio/fastify__busboy","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.2.0-root.io.2"}]}]}],"products":[{"vendor":"@fastify/busboy","product":"@fastify/busboy"},{"vendor":"fastify","product":"fastify\\/busyboy"}],"references":[{"url":"https://github.com/fastify/busboy/security/advisories/GHSA-xjh9-v7x6-24jw","tags":["Vendor Advisory","advisory","web"]},{"url":"https://cna.openjsf.org/security-advisories.html","tags":["Third Party Advisory","advisory","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-19484","tags":["advisory"]},{"url":"https://github.com/fastify/busboy/commit/632a237e7fb6b3b7a30e0de8fab2ee72ca5bf722","tags":["web"]},{"url":"https://github.com/fastify/busboy/releases/tag/v3.2.1","tags":["web"]},{"url":"https://github.com/advisories/GHSA-xjh9-v7x6-24jw"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/19xxx/CVE-2026-19484.json","tags":["advisory"]},{"url":"https://github.com/fastify/busboy","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-19484","title":"@fastify/busboy vulnerable to Denial of Service via oversized multipart boundary","description":"@fastify/busboy is a multipart form-data parser. In versions 3.1.0 through 3.2.0, a remote unauthenticated attacker can stall the Node.js event loop by sending a multipart request whose boundary is crafted to a specific length. The vendored streaming search stores its skip table in a fixed 256 entry byte array, and a boundary of exactly 252 bytes makes the search needle 256 bytes, which truncates the default skip distance to zero and turns the search into a CPU bound loop on a small body. A single small request can keep one core busy and deny service to other requests handled by the same process. The issue is fixed in @fastify/busboy 3.2.1, which widens the skip table so the skip distance is preserved. Users should upgrade to 3.2.1.","status":"published","published":"2026-08-13T08:50:47.361Z","modified":"2026-08-13T14:27:01.128Z","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-835","CWE-1322"],"updated_at":"2026-11-02T13:47:28.691429Z"}],"euvd":[{"id":"EUVD-2026-57759","description":"@fastify/busboy is a multipart form-data parser. In versions 3.1.0 through 3.2.0, a remote unauthenticated attacker can stall the Node.js event loop by sending a multipart request whose boundary is crafted to a specific length. The vendored streaming search stores its skip table in a fixed 256 entry byte array, and a boundary of exactly 252 bytes makes the search needle 256 bytes, which truncates the default skip distance to zero and turns the search into a CPU bound loop on a small body. A single small request can keep one core busy and deny service to other requests handled by the same process. The issue is fixed in @fastify/busboy 3.2.1, which widens the skip table so the skip distance is preserved. Users should upgrade to 3.2.1.","status":"published","published":"2026-08-13T08:50:47Z","modified":"2026-08-13T14:27:01Z","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-02T18:01:56.761721Z"}],"ghsa":[{"id":"GHSA-xjh9-v7x6-24jw","title":"@fastify/busboy vulnerable to Denial of Service via oversized multipart boundary","description":"### Impact\n\nVersions of `@fastify/busboy` from 3.1.0 and prior to 3.2.1 are vulnerable to a Denial of Service. The vendored streaming multipart search stores its default skip distance in a `Uint8Array(256)`. A multipart boundary of exactly 252 bytes makes the search needle 256 bytes, and the table entry wraps to zero, so a crafted request keeps the search in a CPU-bound loop and stalls the Node.js event loop. An unauthenticated client can trigger this with a single small request. Applications that use `@fastify/busboy` to parse multipart/form-data, directly or through `@fastify/multipart`, are affected.\n\n### Patches\n\nFixed in version 3.2.1.\n\n### Workarounds\n\nValidate the multipart boundary before parsing and reject any boundary longer than the RFC 2046 limit of 70 characters (for example at a reverse proxy or in an onRequest hook). Upgrading to 3.2.1 removes the issue.","status":"published","published":"2026-10-02T23:16:17Z","modified":"2026-10-02T23:17:29Z","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-835","CWE-1322"],"updated_at":"2026-11-02T14:41:25.889593Z"}],"nvd":[{"id":"CVE-2026-19484","description":"@fastify/busboy is a multipart form-data parser. In versions 3.1.0 through 3.2.0, a remote unauthenticated attacker can stall the Node.js event loop by sending a multipart request whose boundary is crafted to a specific length. The vendored streaming search stores its skip table in a fixed 256 entry byte array, and a boundary of exactly 252 bytes makes the search needle 256 bytes, which truncates the default skip distance to zero and turns the search into a CPU bound loop on a small body. A single small request can keep one core busy and deny service to other requests handled by the same process. The issue is fixed in @fastify/busboy 3.2.1, which widens the skip table so the skip distance is preserved. Users should upgrade to 3.2.1.","status":"published","published":"2026-08-13T10:17:11.64Z","modified":"2026-09-03T19:10:52.893Z","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-835","CWE-1322"],"updated_at":"2026-11-02T14:12:37.217486Z"}],"osv":[{"id":"CVE-2026-19484","title":"@fastify/busboy vulnerable to Denial of Service via oversized multipart boundary","description":"@fastify/busboy is a multipart form-data parser. In versions 3.1.0 through 3.2.0, a remote unauthenticated attacker can stall the Node.js event loop by sending a multipart request whose boundary is crafted to a specific length. The vendored streaming search stores its skip table in a fixed 256 entry byte array, and a boundary of exactly 252 bytes makes the search needle 256 bytes, which truncates the default skip distance to zero and turns the search into a CPU bound loop on a small body. A single small request can keep one core busy and deny service to other requests handled by the same process. The issue is fixed in @fastify/busboy 3.2.1, which widens the skip table so the skip distance is preserved. Users should upgrade to 3.2.1.","status":"published","published":"2026-08-13T08:50:47.361Z","modified":"2026-10-28T02:30:40.25196538Z","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-1322","CWE-835"],"updated_at":"2026-11-02T15:44:58.024074Z"},{"id":"GHSA-xjh9-v7x6-24jw","title":"@fastify/busboy vulnerable to Denial of Service via oversized multipart boundary","description":"### Impact\n\nVersions of `@fastify/busboy` from 3.1.0 and prior to 3.2.1 are vulnerable to a Denial of Service. The vendored streaming multipart search stores its default skip distance in a `Uint8Array(256)`. A multipart boundary of exactly 252 bytes makes the search needle 256 bytes, and the table entry wraps to zero, so a crafted request keeps the search in a CPU-bound loop and stalls the Node.js event loop. An unauthenticated client can trigger this with a single small request. Applications that use `@fastify/busboy` to parse multipart/form-data, directly or through `@fastify/multipart`, are affected.\n\n### Patches\n\nFixed in version 3.2.1.\n\n### Workarounds\n\nValidate the multipart boundary before parsing and reject any boundary longer than the RFC 2046 limit of 70 characters (for example at a reverse proxy or in an onRequest hook). Upgrading to 3.2.1 removes the issue.","status":"published","published":"2026-10-02T23:16:17Z","modified":"2026-10-02T23:30:05.674605566Z","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-1322","CWE-835"],"updated_at":"2026-11-02T15:47:00.198893Z"},{"id":"ROOT-APP-NPM-CVE-2026-19484","title":"CVE-2026-19484 in @fastify/busboy - Patched by Root","description":"Root has patched CVE-2026-19484 in the @fastify/busboy package for Root:npm. Multiple fixed versions available.","status":"published","published":"2026-10-12T09:43:55Z","modified":"2026-10-12T10:15:04.404962794Z","updated_at":"2026-11-02T15:53:27.649662Z"}]}}
