{"id":"CVE-2026-102422","aliases":["CLSA-2026-1790673243","CLSA-2026-1794048503","DEBIAN-CVE-2026-102422","EUVD-2026-88629","GHSA-pqg4-j6r4-53mv","RHSA-2026:69544","RHSA-2026:72498","RHSA-2026:72507","RHSA-2026:72750","ROOT-APP-NPM-CVE-2026-102422","UBUNTU-CVE-2026-102422"],"status":"published","title":"shell-quote `quote()` command injection via a line terminator in a token after a `{ comment }` token","description":"shell-quote's `quote()` function emits a `{ comment }` token as `#` followed by its text, which comments out the rest of the shell line, including the opening quote of any later string token. A line terminator (\\n, \\r, U+2028, U+2029) in that later string therefore ends the comment, and the rest of the string is parsed as shell input: `quote(['echo', 'ok', { comment: 'x' }, 'a\\nid;#'])` runs `id` in sh, bash, dash, ksh and zsh. `parse()` emits a comment token for a `#` in the middle of a word (for example `http://example.com/#frag`), so callers that combine `parse()` output with another untrusted string, such as `quote(parse(untrustedCommand).concat(untrustedArg))`, are affected. The fix for CVE-2026-9277 rejected line terminators in the comment's own text, but not in the tokens after it. Fixed in 1.11.0: `quote()` throws a `TypeError` when a string after a `{ comment }` token contains a line terminator.","severity":{"version":"4.0","score":9.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","level":"critical","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-10","score":0.0048,"percentile":0.41719,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":true,"fix_available":true},"cwes":["CWE-78"],"published":"2026-09-29T03:47:36Z","modified":"2026-11-07T13:15:02Z","exploits":[{"source":"pocgithub","id":"DevVaibhav07/CVE-2026-102422","title":"DevVaibhav07/CVE-2026-102422","date":"2026-10-07","url":"https://github.com/DevVaibhav07/CVE-2026-102422"},{"source":"pocgithub","id":"federiconbaez/cortex9-shell-quote-comment-line-terminator-model","title":"federiconbaez/cortex9-shell-quote-comment-line-terminator-model","date":"2026-11-09","url":"https://github.com/federiconbaez/cortex9-shell-quote-comment-line-terminator-model"}],"fixes":[{"ecosystem":"npm","package":"shell-quote","fixed_in":["1.11.0"],"sources":["ghsa","osv"]},{"ecosystem":"TuxCare:npm","package":"shell-quote","fixed_in":["1.10.0-tuxcare.1","1.9.0-tuxcare.1"],"sources":["osv"]},{"ecosystem":"Debian:13","package":"node-shell-quote","fixed_in":["1.7.4+~1.7.1-1+deb13u2"],"sources":["osv"]},{"ecosystem":"Debian:14","package":"node-shell-quote","fixed_in":["1.12.0-1"],"sources":["osv"]},{"ecosystem":"Red Hat:hummingbird:1","package":"jaeger","fixed_in":["0:2.20.0-0.11.hum1"],"sources":["osv"]},{"ecosystem":"Root:npm","package":"shell-quote","fixed_in":["1.9.0-aikido.1","1.10.0-aikido.1","1.8.4-aikido.1"],"sources":["osv"]},{"ecosystem":"Root:npm","package":"@rootio/shell-quote","fixed_in":["1.9.0-root.io.1","1.10.0-root.io.1","1.8.4-root.io.1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"npm","package":"shell-quote","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.8.4"},{"fixed":"1.11.0"}]}]},{"source":"osv","ecosystem":"TuxCare:npm","package":"shell-quote","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.10.0-tuxcare.0"},{"fixed":"1.10.0-tuxcare.1"}]}],"versions":["1.10.0"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"shell-quote","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.9.0-tuxcare.0"},{"fixed":"1.9.0-tuxcare.1"}]}],"versions":["1.9.0"]},{"source":"osv","ecosystem":"Debian:12","package":"node-shell-quote","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.10.0-1","1.12.0-1","1.7.4+~1.7.1-1","1.7.4+~1.7.1-1+deb12u1","1.7.4+~1.7.1-2","1.8.3+~1.7.5-1","1.8.4+~1.7.5-1","1.9.0+~1.7.5-1"]},{"source":"osv","ecosystem":"Debian:13","package":"node-shell-quote","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.7.4+~1.7.1-1+deb13u2"}]}],"versions":["1.7.4+~1.7.1-1","1.7.4+~1.7.1-1+deb13u1"]},{"source":"osv","ecosystem":"Debian:14","package":"node-shell-quote","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.12.0-1"}]}],"versions":["1.10.0-1","1.7.4+~1.7.1-1","1.7.4+~1.7.1-2","1.8.3+~1.7.5-1","1.8.4+~1.7.5-1","1.9.0+~1.7.5-1"]},{"source":"osv","ecosystem":"npm","package":"shell-quote","ranges":[{"type":"SEMVER","events":[{"introduced":"1.8.4"},{"fixed":"1.11.0"}]}]},{"source":"osv","ecosystem":"Red Hat:hummingbird:1","package":"jaeger","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0:2.20.0-0.11.hum1"}]}]},{"source":"osv","ecosystem":"Red Hat:hummingbird:1","package":"grafana13.1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0:13.1.6-0.4.hum1"}]}],"bundled":4},{"source":"osv","ecosystem":"Red Hat:hummingbird:1","package":"grafana13.2","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0:13.2.1-0.8.hum1"}]}],"bundled":4},{"source":"osv","ecosystem":"Red Hat:hummingbird:1","package":"prometheus3.13","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0:3.13.3-0.2.hum1"}]}],"bundled":3},{"source":"osv","ecosystem":"Root:npm","package":"shell-quote","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.9.0-aikido.1"},{"fixed":"1.10.0-aikido.1"},{"fixed":"1.8.4-aikido.1"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"@rootio/shell-quote","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.9.0-root.io.1"},{"fixed":"1.10.0-root.io.1"},{"fixed":"1.8.4-root.io.1"}]}]},{"source":"osv","ecosystem":"Ubuntu:Pro:18.04:LTS","package":"node-shell-quote","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.6.1+20160617-git72fb5a8ce29b-1","1.6.1+20160617-git72fb5a8ce29b-1ubuntu0.1~esm1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:22.04:LTS","package":"node-shell-quote","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.7.3+~1.7.1-1","1.7.3+~1.7.1-1ubuntu0.1~esm1"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"node-shell-quote","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.7.4+~1.7.1-1","1.7.4+~1.7.1-1ubuntu0.24.04.1"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"node-shell-quote","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.8.3+~1.7.5-1","1.9.0+~1.7.5-1","1.10.0-1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:26.04:LTS","package":"node-shell-quote","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.7.4+~1.7.1-1","1.8.3+~1.7.5-1","1.8.3+~1.7.5-1ubuntu0.1~esm1"]}],"products":[{"vendor":"","product":"shell-quote"}],"references":[{"url":"https://github.com/ljharb/shell-quote/security/advisories/GHSA-pqg4-j6r4-53mv","tags":["vendor-advisory","advisory","web","article","report"]},{"url":"https://github.com/ljharb/shell-quote/commit/6002b2ed90c6b83095eb272b6b0adaf3a172b0bc","tags":["patch","fix","web","article","report"]},{"url":"https://github.com/ljharb/shell-quote","tags":["product","package","article","report"]},{"url":"https://www.npmjs.com/package/shell-quote","tags":["product","web","article","report"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-102422","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-pqg4-j6r4-53mv"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/102xxx/CVE-2026-102422.json","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-102422","tags":["advisory"]},{"url":"https://access.redhat.com/errata/RHSA-2026:69544","tags":["advisory"]},{"url":"https://images.redhat.com/","tags":["article"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-102422","tags":["report"]},{"url":"https://access.redhat.com/security/updates/classification/","tags":["article"]},{"url":"https://security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_69544.json","tags":["advisory"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2542933","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-102422","tags":["advisory","report"]},{"url":"https://access.redhat.com/errata/RHSA-2026:72498","tags":["advisory"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-93450","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-61709","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-63209","tags":["report"]},{"url":"https://security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_72498.json","tags":["advisory"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2535473","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-61709","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-61709","tags":["advisory"]},{"url":"https://github.com/openfga/openfga/commit/171806c93b86bca29e0212ceb8b6ee9c48eb9ac3","tags":["article"]},{"url":"https://github.com/openfga/openfga/releases/tag/v1.18.1","tags":["article"]},{"url":"https://github.com/openfga/openfga/security/advisories/GHSA-g3pg-frfm-pr2m","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2543236","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-63209","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-63209","tags":["advisory"]},{"url":"https://github.com/klauspost/compress/commit/539243b8823ee8f03e49969823d57c348c917536","tags":["article"]},{"url":"https://github.com/klauspost/compress/releases/tag/v1.18.7","tags":["article"]},{"url":"https://github.com/klauspost/compress/security/advisories/GHSA-259r-337f-4rfw","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2538979","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-93450","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-93450","tags":["advisory"]},{"url":"https://github.com/go-openapi/swag","tags":["article"]},{"url":"https://github.com/go-openapi/swag/blob/v0.27.0/jsonutils/adapters/stdlib/json/adapter.go#L68","tags":["article"]},{"url":"https://github.com/go-openapi/swag/blob/v0.27.0/jsonutils/adapters/stdlib/json/ordered_map.go#L214","tags":["article"]},{"url":"https://github.com/go-openapi/swag/commit/0c24346ced59a25811e8694a915e7131d25ccb0e","tags":["article"]},{"url":"https://github.com/go-openapi/swag/security/advisories/GHSA-xh24-9qpg-8w28","tags":["article"]},{"url":"https://www.vulncheck.com/advisories/go-openapi-swag-jsonutils-before-0.27.1-uncontrolled-recursion-in-ordered-json-marshal-and-unmarshal","tags":["article"]},{"url":"https://access.redhat.com/errata/RHSA-2026:72507","tags":["advisory"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-81842","tags":["report"]},{"url":"https://security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_72507.json","tags":["advisory"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2543653","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-81842","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-81842","tags":["advisory"]},{"url":"https://grafana.com/security/security-advisories/cve-2026-81842","tags":["article"]},{"url":"https://access.redhat.com/errata/RHSA-2026:72750","tags":["advisory"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-56851","tags":["report"]},{"url":"https://security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_72750.json","tags":["advisory"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2547607","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-56851","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-56851","tags":["advisory"]},{"url":"https://go.dev/cl/793360","tags":["article"]},{"url":"https://go.dev/issue/80112","tags":["article"]},{"url":"https://pkg.go.dev/vuln/GO-2026-6629","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-102422","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2026-102422","title":"shell-quote `quote()` command injection via a line terminator in a token after a `{ comment }` token","description":"shell-quote's `quote()` function emits a `{ comment }` token as `#` followed by its text, which comments out the rest of the shell line, including the opening quote of any later string token. A line terminator (\\n, \\r, U+2028, U+2029) in that later string therefore ends the comment, and the rest of the string is parsed as shell input: `quote(['echo', 'ok', { comment: 'x' }, 'a\\nid;#'])` runs `id` in sh, bash, dash, ksh and zsh. `parse()` emits a comment token for a `#` in the middle of a word (for example `http://example.com/#frag`), so callers that combine `parse()` output with another untrusted string, such as `quote(parse(untrustedCommand).concat(untrustedArg))`, are affected. The fix for CVE-2026-9277 rejected line terminators in the comment's own text, but not in the tokens after it. Fixed in 1.11.0: `quote()` throws a `TypeError` when a string after a `{ comment }` token contains a line terminator.","status":"published","published":"2026-09-29T03:47:36.376Z","modified":"2026-09-30T15:18:32.135Z","cvss":[{"version":"4.0","score":9.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","level":"critical","assessor":"cna"},{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"high","assessor":"cna"}],"cwes":["CWE-78"],"updated_at":"2026-11-02T13:38:54.394896Z"}],"euvd":[{"id":"EUVD-2026-88629","description":"shell-quote's `quote()` function emits a `{ comment }` token as `#` followed by its text, which comments out the rest of the shell line, including the opening quote of any later string token. A line terminator (\\n, \\r, U+2028, U+2029) in that later string therefore ends the comment, and the rest of the string is parsed as shell input: `quote(['echo', 'ok', { comment: 'x' }, 'a\\nid;#'])` runs `id` in sh, bash, dash, ksh and zsh. `parse()` emits a comment token for a `#` in the middle of a word (for example `http://example.com/#frag`), so callers that combine `parse()` output with another untrusted string, such as `quote(parse(untrustedCommand).concat(untrustedArg))`, are affected. The fix for CVE-2026-9277 rejected line terminators in the comment's own text, but not in the tokens after it. Fixed in 1.11.0: `quote()` throws a `TypeError` when a string after a `{ comment }` token contains a line terminator.","status":"published","published":"2026-09-29T03:47:36Z","modified":"2026-09-30T15:18:32Z","cvss":[{"version":"4.0","score":9.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","level":"critical"}],"updated_at":"2026-11-02T17:27:49.016334Z"}],"ghsa":[{"id":"GHSA-pqg4-j6r4-53mv","title":"shell-quote: `quote()` command injection via a line terminator in a token after a `{ comment }` token","description":"### Impact\n\n`quote()` emits a `{ comment }` token as `#` followed by its text, which comments out the rest of the shell line, including the opening quote of any later string token. A line terminator in that later string ends the comment, and the rest of the string is parsed as shell input:\n\n```js\nquote(['echo', 'ok', { comment: 'x' }, 'a\\nid;#']);\n// echo ok #x 'a\n// id;#'\n```\n\nPassed to `sh`, `bash`, `dash`, `ksh`, or `zsh`, this runs `id`.\n\n`parse()` emits a comment token for a `#` in the middle of a word (for example `http://example.com/#frag`), so callers that combine `parse()` output with another untrusted string, such as `quote(parse(untrustedCommand).concat(untrustedArg))`, are affected. The fix for CVE-2026-9277 rejected line terminators in the comment's own text, but not in the tokens after it.\n\nExploitation requires an attacker-controlled string containing a line terminator that follows a `{ comment }` token in the same `quote()` call.\n\n### Patches\n\nFixed in v1.11.0: `quote()` throws a `TypeError` when a string after a `{ comment }` token contains a line terminator (`\\n`, `\\r`, U+2028, or U+2029).\n\n### Workarounds\n\nDrop every token after a `{ comment }` token before calling `quote()`, or reject line terminators in untrusted strings. Separately, do not append other shell text after `quote()` output that contains a comment, since the comment swallows it.","status":"published","published":"2026-10-06T13:40:36Z","modified":"2026-10-06T13:40:37Z","cvss":[{"version":"4.0","score":9.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","level":"critical"},{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"high"}],"cwes":["CWE-78"],"updated_at":"2026-11-02T14:41:27.036917Z"}],"nvd":[{"id":"CVE-2026-102422","description":"shell-quote's `quote()` function emits a `{ comment }` token as `#` followed by its text, which comments out the rest of the shell line, including the opening quote of any later string token. A line terminator (\\n, \\r, U+2028, U+2029) in that later string therefore ends the comment, and the rest of the string is parsed as shell input: `quote(['echo', 'ok', { comment: 'x' }, 'a\\nid;#'])` runs `id` in sh, bash, dash, ksh and zsh. `parse()` emits a comment token for a `#` in the middle of a word (for example `http://example.com/#frag`), so callers that combine `parse()` output with another untrusted string, such as `quote(parse(untrustedCommand).concat(untrustedArg))`, are affected. The fix for CVE-2026-9277 rejected line terminators in the comment's own text, but not in the tokens after it. Fixed in 1.11.0: `quote()` throws a `TypeError` when a string after a `{ comment }` token contains a line terminator.","status":"published","published":"2026-09-29T04:17:55.707Z","modified":"2026-09-30T17:32:07.107Z","cvss":[{"version":"4.0","score":9.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"critical","assessor":"secondary"},{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"high","assessor":"secondary"}],"cwes":["CWE-78"],"updated_at":"2026-11-02T14:12:52.413234Z"}],"osv":[{"id":"CVE-2026-102422","title":"shell-quote `quote()` command injection via a line terminator in a token after a `{ comment }` token","description":"shell-quote's `quote()` function emits a `{ comment }` token as `#` followed by its text, which comments out the rest of the shell line, including the opening quote of any later string token. A line terminator (\\n, \\r, U+2028, U+2029) in that later string therefore ends the comment, and the rest of the string is parsed as shell input: `quote(['echo', 'ok', { comment: 'x' }, 'a\\nid;#'])` runs `id` in sh, bash, dash, ksh and zsh. `parse()` emits a comment token for a `#` in the middle of a word (for example `http://example.com/#frag`), so callers that combine `parse()` output with another untrusted string, such as `quote(parse(untrustedCommand).concat(untrustedArg))`, are affected. The fix for CVE-2026-9277 rejected line terminators in the comment's own text, but not in the tokens after it. Fixed in 1.11.0: `quote()` throws a `TypeError` when a string after a `{ comment }` token contains a line terminator.","status":"published","published":"2026-09-29T03:47:36.376Z","modified":"2026-10-28T02:31:13.808282936Z","cvss":[{"version":"4.0","score":9.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","level":"critical"}],"cwes":["CWE-78"],"updated_at":"2026-11-02T15:44:53.83521Z"},{"id":"DEBIAN-CVE-2026-102422","description":"shell-quote's `quote()` function emits a `{ comment }` token as `#` followed by its text, which comments out the rest of the shell line, including the opening quote of any later string token. A line terminator (\\n, \\r, U+2028, U+2029) in that later string therefore ends the comment, and the rest of the string is parsed as shell input: `quote(['echo', 'ok', { comment: 'x' }, 'a\\nid;#'])` runs `id` in sh, bash, dash, ksh and zsh. `parse()` emits a comment token for a `#` in the middle of a word (for example `http://example.com/#frag`), so callers that combine `parse()` output with another untrusted string, such as `quote(parse(untrustedCommand).concat(untrustedArg))`, are affected. The fix for CVE-2026-9277 rejected line terminators in the comment's own text, but not in the tokens after it. Fixed in 1.11.0: `quote()` throws a `TypeError` when a string after a `{ comment }` token contains a line terminator.","status":"published","published":"2026-09-29T04:17:55.707Z","modified":"2026-10-06T22:00:06.637569608Z","cvss":[{"version":"4.0","score":9.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"critical"}],"updated_at":"2026-11-02T15:45:48.903138Z"},{"id":"GHSA-pqg4-j6r4-53mv","title":"shell-quote: `quote()` command injection via a line terminator in a token after a `{ comment }` token","description":"### Impact\n\n`quote()` emits a `{ comment }` token as `#` followed by its text, which comments out the rest of the shell line, including the opening quote of any later string token. A line terminator in that later string ends the comment, and the rest of the string is parsed as shell input:\n\n```js\nquote(['echo', 'ok', { comment: 'x' }, 'a\\nid;#']);\n// echo ok #x 'a\n// id;#'\n```\n\nPassed to `sh`, `bash`, `dash`, `ksh`, or `zsh`, this runs `id`.\n\n`parse()` emits a comment token for a `#` in the middle of a word (for example `http://example.com/#frag`), so callers that combine `parse()` output with another untrusted string, such as `quote(parse(untrustedCommand).concat(untrustedArg))`, are affected. The fix for CVE-2026-9277 rejected line terminators in the comment's own text, but not in the tokens after it.\n\nExploitation requires an attacker-controlled string containing a line terminator that follows a `{ comment }` token in the same `quote()` call.\n\n### Patches\n\nFixed in v1.11.0: `quote()` throws a `TypeError` when a string after a `{ comment }` token contains a line terminator (`\\n`, `\\r`, U+2028, or U+2029).\n\n### Workarounds\n\nDrop every token after a `{ comment }` token before calling `quote()`, or reject line terminators in untrusted strings. Separately, do not append other shell text after `quote()` output that contains a comment, since the comment swallows it.","status":"published","published":"2026-10-06T13:40:36Z","modified":"2026-10-06T13:45:06.393196831Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"high"},{"version":"4.0","score":9.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","level":"critical"}],"cwes":["CWE-78"],"updated_at":"2026-11-02T15:46:53.700556Z"},{"id":"RHSA-2026:69544","title":"Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update","status":"published","published":"2026-10-10T10:19:07Z","modified":"2026-10-20T10:14:27Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-02T15:53:22.406388Z"},{"id":"RHSA-2026:72498","title":"Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update","status":"published","published":"2026-09-29T10:18:28Z","modified":"2026-10-20T10:43:36.491146369Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-02T15:53:22.928316Z"},{"id":"RHSA-2026:72507","title":"Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update","status":"published","published":"2026-10-01T10:20:39Z","modified":"2026-10-20T10:43:34.270695506Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-02T15:53:22.928316Z"},{"id":"RHSA-2026:72750","title":"Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update","status":"published","published":"2026-10-10T10:20:37Z","modified":"2026-10-20T10:43:38.242768469Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-02T15:53:22.928316Z"},{"id":"UBUNTU-CVE-2026-102422","description":"shell-quote's `quote()` function emits a `{ comment }` token as `#` followed by its text, which comments out the rest of the shell line, including the opening quote of any later string token. A line terminator (\\n, \\r, U+2028, U+2029) in that later string therefore ends the comment, and the rest of the string is parsed as shell input: `quote(['echo', 'ok', { comment: 'x' }, 'a\\nid;#'])` runs `id` in sh, bash, dash, ksh and zsh. `parse()` emits a comment token for a `#` in the middle of a word (for example `http://example.com/#frag`), so callers that combine `parse()` output with another untrusted string, such as `quote(parse(untrustedCommand).concat(untrustedArg))`, are affected. The fix for CVE-2026-9277 rejected line terminators in the comment's own text, but not in the tokens after it. Fixed in 1.11.0: `quote()` throws a `TypeError` when a string after a `{ comment }` token contains a line terminator.","status":"published","published":"2026-09-29T04:17:00Z","modified":"2026-10-17T12:59:44.394796232Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"high"},{"version":"4.0","score":9.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","level":"critical"}],"updated_at":"2026-11-02T16:55:58.519486Z"},{"id":"CLSA-2026-1790673243","title":"TuxCare security update for shell-quote (1 CVE)","description":"TuxCare rebuilt shell-quote to address 1 CVE. Fixed in 1.10.0-tuxcare.1.","status":"published","published":"2026-09-29T09:14:03Z","modified":"2026-10-15T09:48:03.963552588Z","updated_at":"2026-11-02T15:43:48.65893Z"},{"id":"CLSA-2026-1794048503","title":"TuxCare security update for shell-quote (1 CVE)","description":"TuxCare rebuilt shell-quote to address 1 CVE. Fixed in 1.9.0-tuxcare.1.","status":"published","published":"2026-11-07T11:48:24Z","modified":"2026-11-07T13:15:02.332615124Z","updated_at":"2026-11-07T13:47:00.167603Z"},{"id":"ROOT-APP-NPM-CVE-2026-102422","title":"CVE-2026-102422 in shell-quote - Patched by Root","description":"Root has patched CVE-2026-102422 in the shell-quote package for Root:npm. Multiple fixed versions available.","status":"published","published":"2026-10-14T09:31:10Z","modified":"2026-10-14T10:15:03.133388729Z","updated_at":"2026-11-02T15:53:27.362922Z"}]}}
