Repository navigation
CVE-2026-12590 CVE-2026-82417 CVE-2026-82562 CVE-2026-110816 CVE-2026-111181 body-parser, qs: Crash on trailing bytes after a compressed body, ignored invalid limit, and qs stringify/comma-parse DoS (body-parser 1.20.5 -> 1.20.9, qs 6.15.2 -> 6.16.2) - #1207
Merged
vharseko merged 1 commit intoOct 29, 2026
Merged
vharseko merged 1 commit into
vharseko merged 1 commit into
Conversation
Bumps [qs](https://github.com/ljharb/qs) and [body-parser](https://github.com/expressjs/body-parser). These dependencies needed to be updated together. Updates `qs` from 6.15.2 to 6.16.2 - [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md) - [Commits](ljharb/qs@v6.15.2...v6.16.2) Updates `body-parser` from 1.20.5 to 1.20.9 - [Release notes](https://github.com/expressjs/body-parser/releases) - [Changelog](https://github.com/expressjs/body-parser/blob/1.20.9/HISTORY.md) - [Commits](expressjs/body-parser@1.20.5...1.20.9) --- updated-dependencies: - dependency-name: qs dependency-version: 6.16.2 dependency-type: indirect - dependency-name: body-parser dependency-version: 1.20.9 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com>
utafrali
approved these changes
Oct 28, 2026
utafrali
left a comment
There was a problem hiding this comment.
Routine dependabot bump of qs (6.15.2 → 6.16.2) and body-parser in the UI module. All qs changes are bug fixes (parse mutation, stringify encoding, dot-to-bracket conversion) with no breaking changes, and the +46/-8 diff is consistent with a package-lock.json update. Safe to merge.
dependabot
Bot
deleted the
dependabot/npm_and_yarn/openam-ui/openam-ui-ria/multi-ef216ddcc6
branch
October 29, 2026 10:20
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps
body-parserfrom 1.20.5 to 1.20.9 andqsfrom 6.15.2 to 6.16.2 inopenam-ui/openam-ui-ria(package-lock.jsononly), clearing Dependabot alert #389 (qs, GHSA-6pq8-jhm2-2vcw). The two move together:body-parser1.20.5 pinsqs@~6.15.1, and only 1.20.7 widened that to~6.16.0. This follows #1026, which took the module tobody-parser1.20.5 andqs6.15.2 for CVE-2026-8723. Four more advisories cover the old versions; Dependabot auto-dismissed their alerts as development-scope —body-parser#274 (2026-07-21) and #381 (2026-10-27),qs#309 (2026-09-03) and #319 (2026-09-07) — so they are not open, but 1.20.5 and 6.15.2 are inside their ranges and this bump is what takes the module past them.openam-ui-riais the only lock file in the repository that resolves either package.Advisories
CVE-2026-111181 / GHSA-27r3-jxmh-p828 (
body-parser, fixed in 1.20.9) — Uncaught exception (CWE-248). When a request carries aContent-Encodingsuch asgzip,read()pipes it into a zlib decompression stream and, once the body has been read, leaves that stream piped with noerrorlistener. A body of one valid compressed member followed by trailing bytes decodes and is answered normally, but the trailing bytes then reach the finished decoder, whose error is re-thrown as an uncaught exception and terminates the process. Every parser with the defaultinflate: trueis affected, and since parsing runs before routing, no authentication or matching route is needed. 1.20.9 unpipes and destroys the decompression stream once the body is read, gives it a no-operrorlistener and drains the rest of the request; it also checks the charset before creating the stream, so an early 415 can no longer leave a decoder behind (expressjs/body-parser@1260c38).CVE-2026-12590 / GHSA-v422-hmwv-36x6 (
body-parser, fixed in 1.20.6) — Allocation of resources without limits (CWE-770). An invalidlimitoption — an unparseable string orNaN— madebytes.parse()returnnull, and the body size check was then silently skipped. 1.20.6 throws aTypeErrorfor such a value when the parser is created;nullandundefinedstill fall back to the 100 kB default (expressjs/body-parser#698).CVE-2026-110816 / GHSA-6pq8-jhm2-2vcw (
qs, fixed in 6.16.1) — Uncaught exception; incorrect type conversion (CWE-248, CWE-704).qs.stringify(obj, { arrayFormat: 'comma' })coerces every array element to a string, throughArray.prototype.joinor, withencodeValuesOnly, through the value encoder. An element with an own non-callabletoString—{"a":[{"toString":"x"}]}from a JSON body, ora[0][toString]=xparsed withallowPrototypes: true— makes it throwTypeError: Cannot convert object to primitive value. This is a different element type on the path that the CVE-2026-8723 fix (#1026) guarded only fornullandundefined. 6.16.1 coerces the elements throughutils.toCoerciblebefore joining (ljharb/qs@a952e75).CVE-2026-82417 / GHSA-4mjr-xmp4-gh2g (
qs, fixed in 6.16.0) — Uncaught exception (CWE-248, CWE-703).utils.isBuffer(), whichstringifyruns on every value, calledobj.constructor.isBuffer(obj)without checking that it is a function, so a value such as{"constructor":{"isBuffer":"x"}}madestringifythrowTypeError.qs.parseproduces that shape itself fromx[constructor][isBuffer]=ywhenplainObjects: trueorallowPrototypes: trueis set, so aparse→stringifyround-trip of an untrusted query string is enough. 6.16.0 requirestypeof obj.constructor.isBuffer === 'function'(ljharb/qs@e83d321).CVE-2026-82562 / GHSA-x5fp-wj9c-mxmx (
qs, fixed in 6.16.0, affected since 6.14.2) — Allocation of resources without limits (CWE-770). Withcomma: true,parseArrayValue()enforcedarrayLimitandthrowOnLimitExceededonly for flat keys: the bracket forma[]=1,2,3,4was wrapped after splitting and its inner array was never checked, so a single parameter could build an array of any size. 6.16.0 counts the commas of every comma value, bracket key or not, before splitting it (ljharb/qs@8859c37).body-parser)AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)body-parser)AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L)qs)AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L)qs)AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L)qs)AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L), CVSS 4.0 6.3All five are availability-only. The
body-parser2.x line received the same fixes in 2.4.0 and 2.3.0; it is not in this lock file.Impact on OpenAM
None at runtime. Both packages are transitive development dependencies of
openam-ui-ria(dev: true) and run only inside Node during the build; nothing fromnode_modulesis copied into the module's zip (target/compiled) or into the XUI in the WAR.body-parseris required (^1.19.0) only bykarma6.4.3, the test runner.qsis required bybody-parser(~6.16.0) and bytiny-lr1.1.1 (^6.4.0), the LiveReload server ofgrunt-contrib-watch1.1.0. No OpenAM source imports either.The Maven build does run one of them. The
npm-testexecution (testphase) runsnpm run test→grunt karma:build, which starts a Karma server for the headless-Chrome run:0.0.0.0by default (DEFAULT_LISTEN_ADDR, overridable throughLISTEN_ADDR), andkarma.conf.jssets onlyport: 9876, so the server is reachable on every interface of the build host while the tests run./__run__and/runand, once a browser is captured, parses the request withrequire('body-parser').json()— default options, soinflate: trueand the 100 kB limit. That is exactly the GHSA-27r3 shape: onePOST /runwithContent-Type: application/json,Content-Encoding: gzipand bytes after the gzip member raises an uncaught exception, which Karma's ownuncaughtExceptionhandler turns into a shutdown with exit code 1, failing the test phase. GHSA-v422 does not apply, since Karma passes nolimit./stop(process.kill(process.pid, 'SIGINT')), unauthenticated. Either way the worst outcome is an aborted test run; no code, data or artifact is affected.qsis never reached:body-parserloads its parsers lazily and requiresqsonly for theurlencodedparser. Karma uses onlyjson(), so on that pathqsis not even loaded.tiny-lrcalls onlyqs.parse(query)with default options — nocomma,plainObjectsorallowPrototypes— andgrunt-contrib-watchstarts it only when alivereloadoption is set. The Gruntfile'swatchtask sets none, and it runs only undergrunt dev(npm start), never in the Maven build.qs.stringify, the sink of GHSA-6pq8 and GHSA-4mjr, and nothing passescomma: true, which GHSA-x5fp needs.Only GHSA-27r3 is reachable here, and only as a second way to end a test run that can already be stopped. The bump takes the build toolchain out of the affected ranges.
Change
openam-ui/openam-ui-ria/package-lock.jsononly;package.jsonis untouched. No code change.body-parser1.20.5 → 1.20.9 (version,resolved,integrity). Itsqsrange~6.15.1→~6.16.0is the only dependency change between the two.qs6.15.2 → 6.16.2. 6.16.x addses-define-property(^1.0.1, already in the tree at 1.0.1) and raisesside-channelto^1.1.1. The top-levelside-channel1.1.0 stays forinternal-slot(^1.1.0), so npm nestsside-channel1.1.1 underqs/node_modules, together withside-channel-list1.0.1, which 1.1.1 needs (^1.0.1) and the top-level 1.0.0 does not satisfy. Its other dependencies (side-channel-map1.0.1,side-channel-weakmap1.0.2,object-inspect1.13.4,es-errors1.3.0) resolve to the existing top-level copies.tiny-lr's^6.4.0is satisfied by 6.16.2, so it uses the same copy.6.16.2 is the newest
qsthatbody-parser's~6.16.0allows (6.17.0 is out of that range), and 1.20.9 is the newestbody-parser1.x. Apart from the fixes above, v6.15.2...v6.16.2 adds adepthoption tostringifyand a number of parse and stringify bug fixes;body-parser1.20.8 is a re-release of 1.20.7 that tested the new release process. 1.20.9 is published from GitHub Actions through npm trusted publishing, which is the new releaser Dependabot reports.Verified:
integrityhashes match the npm registry and the SHA-512 of the downloaded tarballs:body-parser@1.20.9,qs@6.16.2,side-channel@1.1.1,side-channel-list@1.0.1body-parser@1.20.9carries the fixes:lib/read.jsunpipes and destroys the decompression stream after the body is read, with anerrorlistener, and checks the charset before creating it;lib/types/json.jsrejects an invalidlimit. Its registry entry was published by theGitHub Actionstrusted publisher with an SLSA provenance attestation, and itsgitHeadis expressjs/body-parser@a64f140 (1.20.9)qs@6.16.2carries the fixes:utils.isBufferchecks thatconstructor.isBufferis a function, the comma branch ofstringifyjoins throughutils.toCoercible, andparseArrayValuecounts the commas of bracket-key values tookarma@6.4.3requiresbody-parseronly forjson()inlib/middleware/runner.jsand binds0.0.0.0by default;tiny-lr@1.1.1usesqsonly forqs.parseinlib/server.js;grunt-contrib-watch@1.1.0startstiny-lronly under alivereloadoptionopenam-ui-js-sdkandopenam-ui-apilock files do not resolveqsorbody-parserbody-parser@1.20.9,qs@6.16.2,side-channel@1.1.1orside-channel-list@1.0.1References