Public mode

No access to your tenant or devices. Every item links to its source. What this means

Sources need attention Customize Public modeDiscuss ChangeIntel on Discord

shell-quote `quote()` does not validate object-token shapes, allowing command injection via line terminators in `.op`

Exploitation and risk

Source status

CISA KEV lists vulnerabilities known to be exploited. FIRST EPSS estimates the likelihood of exploitation in the next 30 days. An unavailable score does not mean zero risk.

Which CVEs have scores here?

This view includes predictions for CVE identifiers explicitly listed in public NuGet advisories. Microsoft release pages have their own prediction coverage. Check source status for the scope and latest checks.

No exploitation or prediction data is available here for these CVEs. This does not mean they are safe or unlikely to be exploited.

cve-program · CVE-2026-9277

Published

shell-quote's `quote()` function did not validate object-token inputs against the operator model used by `parse()`. The `.op` field was backslash-escaped character by character using `/(.)/g`, which in JavaScript does not match line terminators (\n, \r, U+2028, U+2029). A line terminator in `.op` therefore passed through unescaped into the output; POSIX shells treat a literal newline as a command separator, so any content after it would execute as a second command. The vulnerable code path is reachable in two ways: (1) direct construction of `{ op: '...\n...' }` from external input, and (2) via `parse(cmd, envFn)` when `envFn` returns object tokens whose `.op` is attacker-influenced. Both are documented API surface. Fixed by replacing the per-character escape with strict shape validation: `.op` must match the parser's control-operator allowlist; `{ op: 'glob', pattern }` validates `pattern` and forbids line terminators; `{ comment }` validates `comment` and forbids line terminators; any other object shape throws `TypeError`.

Source published
22 May 2026 13:22:38 UTC
Source modified
14 Sep 2026 12:04:27 UTC
Saved here
23 Oct 2026 15:48:27 UTC
Source terms
CVE Program Terms of Use

Original source record · Cite this exact observation · Complete original publisher JSON

Source: cve-program · CVE Program Terms of Use. The publisher's wording is preserved. ChangeIntel groups the information and labels changes. The JSON record includes additional source fields.

CVSS 3.1 · 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H

CVSS 4.0 · 9.2 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

euvd · EUVD-2026-31440

Published

shell-quote's `quote()` function did not validate object-token inputs against the operator model used by `parse()`. The `.op` field was backslash-escaped character by character using `/(.)/g`, which in JavaScript does not match line terminators (\n, \r, U+2028, U+2029). A line terminator in `.op` therefore passed through unescaped into the output; POSIX shells treat a literal newline as a command separator, so any content after it would execute as a second command. The vulnerable code path is reachable in two ways: (1) direct construction of `{ op: '...\n...' }` from external input, and (2) via `parse(cmd, envFn)` when `envFn` returns object tokens whose `.op` is attacker-influenced. Both are documented API surface. Fixed by replacing the per-character escape with strict shape validation: `.op` must match the parser's control-operator allowlist; `{ op: 'glob', pattern }` validates `pattern` and forbids line terminators; `{ comment }` validates `comment` and forbids line terminators; any other object shape throws `TypeError`.

Additional publisher context

EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON.

Original publisher date fields

datePublished: May 22, 2026, 1:22:38 PM

dateUpdated: Sep 14, 2026, 12:04:27 PM

39 related source bulletins · separate from aliases

RHSA-2026:41928: Red Hat Security Advisory: Red Hat Migration Toolkit for Containers

CVE-2025-7783 · CVE-2025-12816 · CVE-2025-13465 · CVE-2025-15284 · CVE-2025-52881 · CVE-2025-58183 · CVE-2025-58754 · CVE-2025-61726 · CVE-2025-61729 · CVE-2025-62718 · CVE-2025-66031 · CVE-2025-66418 · CVE-2025-66471 · CVE-2025-66506 · CVE-2025-68121 · CVE-2025-69223 · CVE-2025-69227 · CVE-2025-69228 · CVE-2026-4800 · CVE-2026-6322 · CVE-2026-9277 · CVE-2026-9595 · CVE-2026-12143 · CVE-2026-13149 · CVE-2026-13676 · CVE-2026-21441 · CVE-2026-22029 · CVE-2026-23490 · CVE-2026-23745 · CVE-2026-25679 · CVE-2026-25681 · CVE-2026-27136 · CVE-2026-27137 · CVE-2026-29063 · CVE-2026-30922 · CVE-2026-32280 · CVE-2026-32281 · CVE-2026-32283 · CVE-2026-33186 · CVE-2026-33810 · CVE-2026-33811 · CVE-2026-34986 · CVE-2026-39820 · CVE-2026-39821 · CVE-2026-40895 · CVE-2026-42264 · CVE-2026-42338 · CVE-2026-42499 · CVE-2026-44486 · CVE-2026-44487 · CVE-2026-44488 · CVE-2026-44492 · CVE-2026-44494 · CVE-2026-44495 · CVE-2026-44496 · CVE-2026-45736 · CVE-2026-45822 · CVE-2026-48779

RHSA-2026:62410: Red Hat Security Advisory: OpenShift Container Platform 4.14.73 bug fix and security update

CVE-2026-9277 · CVE-2026-33814 · CVE-2026-54423

openSUSE-SU-2026:10861-1: python311-pytest-html-4.2.0-2.1 on GA media

CVE-2026-9277

RHSA-2026:28571: Red Hat Security Advisory: Red Hat Quay 3.9.23

CVE-2026-6322 · CVE-2026-9277 · CVE-2026-10143 · CVE-2026-44432 · CVE-2026-44496 · CVE-2026-48526

RHSA-2026:29197: Red Hat Security Advisory: A Subscription Management tool for finding and reporting Red Hat product usage

CVE-2024-12086 · CVE-2025-14087 · CVE-2025-14512 · CVE-2026-3832 · CVE-2026-3833 · CVE-2026-4046 · CVE-2026-4437 · CVE-2026-4438 · CVE-2026-4878 · CVE-2026-5260 · CVE-2026-5419 · CVE-2026-6322 · CVE-2026-7383 · CVE-2026-9076 · CVE-2026-9277 · CVE-2026-28390 · CVE-2026-29518 · CVE-2026-33845 · CVE-2026-33846 · CVE-2026-34180 · CVE-2026-34181 · CVE-2026-34182 · CVE-2026-34183 · CVE-2026-40355 · CVE-2026-40356 · CVE-2026-41035 · CVE-2026-42009 · CVE-2026-42010 · CVE-2026-42011 · CVE-2026-42012 · CVE-2026-42013 · CVE-2026-42014 · CVE-2026-42015 · CVE-2026-42764 · CVE-2026-42766 · CVE-2026-42767 · CVE-2026-42768 · CVE-2026-42769 · CVE-2026-42770 · CVE-2026-43618 · CVE-2026-44486 · CVE-2026-44487 · CVE-2026-44488 · CVE-2026-44492 · CVE-2026-44494 · CVE-2026-44495 · CVE-2026-44496 · CVE-2026-45186 · CVE-2026-45445 · CVE-2026-45446 · CVE-2026-45447 · CVE-2026-45736 · CVE-2026-48779

RHSA-2026:29834: Red Hat Security Advisory: OpenShift Container Platform 4.21.22 bug fix and security update

CVE-2026-6322 · CVE-2026-9277

RHSA-2026:48699: Red Hat Security Advisory: OpenShift Container Platform 4.18.51 bug fix and security update

CVE-2026-4800 · CVE-2026-9277 · CVE-2026-16242 · CVE-2026-33186 · CVE-2026-40895 · CVE-2026-42154

RHSA-2026:34342: Red Hat Security Advisory: Cluster Observability Operator 1.5.0

CVE-2020-7753 · CVE-2021-33623 · CVE-2024-4068 · CVE-2024-45338 · CVE-2024-52011 · CVE-2025-22868 · CVE-2025-22870 · CVE-2025-22872 · CVE-2025-47911 · CVE-2025-58190 · CVE-2026-1526 · CVE-2026-1528 · CVE-2026-2229 · CVE-2026-4800 · CVE-2026-4867 · CVE-2026-6321 · CVE-2026-6322 · CVE-2026-6734 · CVE-2026-9277 · CVE-2026-9697 · CVE-2026-12143 · CVE-2026-12151 · CVE-2026-25680 · CVE-2026-25681 · CVE-2026-29063 · CVE-2026-32141 · CVE-2026-33228 · CVE-2026-33671 · CVE-2026-33814 · CVE-2026-33891 · CVE-2026-33894 · CVE-2026-33895 · CVE-2026-33896 · CVE-2026-33937 · CVE-2026-33938 · CVE-2026-33939 · CVE-2026-33940 · CVE-2026-33941 · CVE-2026-39821 · CVE-2026-42506 · CVE-2026-48779

RHSA-2026:26079: Red Hat Security Advisory: Kiali 2.17.9 for Red Hat OpenShift Service Mesh 3.2

CVE-2026-9277 · CVE-2026-32281

RHSA-2026:26090: Red Hat Security Advisory: Kiali 2.22.5 for Red Hat OpenShift Service Mesh 3.3

CVE-2026-9277 · CVE-2026-32281 · CVE-2026-44293

RHSA-2026:62260: Red Hat Security Advisory: Red Hat OpenShift Dev Spaces 3.30.0 Release.

CVE-2025-55163 · CVE-2026-8286 · CVE-2026-9277 · CVE-2026-9547 · CVE-2026-9563 · CVE-2026-10050 · CVE-2026-10051 · CVE-2026-12143 · CVE-2026-12151 · CVE-2026-13149 · CVE-2026-15075 · CVE-2026-15076 · CVE-2026-27136 · CVE-2026-34986 · CVE-2026-39820 · CVE-2026-39831 · CVE-2026-39835 · CVE-2026-40898 · CVE-2026-40983 · CVE-2026-40984 · CVE-2026-41242 · CVE-2026-41695 · CVE-2026-41716 · CVE-2026-42264 · CVE-2026-42499 · CVE-2026-44705 · CVE-2026-45149 · CVE-2026-45416 · CVE-2026-45623 · CVE-2026-45674 · CVE-2026-46597 · CVE-2026-46681 · CVE-2026-47691 · CVE-2026-48020 · CVE-2026-48068 · CVE-2026-48491 · CVE-2026-49978 · CVE-2026-50010 · CVE-2026-50193 · CVE-2026-53488 · CVE-2026-53492 · CVE-2026-53622 · CVE-2026-54399 · CVE-2026-54428 · CVE-2026-54512 · CVE-2026-54513 · CVE-2026-54763 · CVE-2026-55831 · CVE-2026-55833 · CVE-2026-56745 · CVE-2026-56746 · CVE-2026-56819 · CVE-2026-59296 · CVE-2026-59869 · CVE-2026-59873 · CVE-2026-59874 · CVE-2026-59877 · CVE-2026-59888 · CVE-2026-59899 · CVE-2026-65600 · CVE-2026-65601 · CVE-2026-67213 · CVE-2026-67214 · CVE-2026-68494 · CVE-2026-69152 · CVE-2026-69153 · CVE-2026-73086 · CVE-2026-73566 · CVE-2026-73646 · CVE-2026-75838

openSUSE-SU-2026:20919-1: Security update for agama-web-ui

CVE-2025-7339 · CVE-2026-42041 · CVE-2026-42264 · CVE-2026-9277

RHSA-2026:26077: Red Hat Security Advisory: Kiali 2.11.12 for Red Hat OpenShift Service Mesh 3.1

CVE-2026-9277 · CVE-2026-32281

RHSA-2026:70267: Red Hat Security Advisory: Red Hat Quay 3.14.9

CVE-2026-4427 · CVE-2026-6322 · CVE-2026-9277 · CVE-2026-10143 · CVE-2026-12143 · CVE-2026-13149 · CVE-2026-13676 · CVE-2026-14257 · CVE-2026-15792 · CVE-2026-15927 · CVE-2026-16221 · CVE-2026-18255 · CVE-2026-32591 · CVE-2026-33747 · CVE-2026-33748 · CVE-2026-33818 · CVE-2026-39820 · CVE-2026-39821 · CVE-2026-39822 · CVE-2026-39828 · CVE-2026-39829 · CVE-2026-39830 · CVE-2026-39831 · CVE-2026-39832 · CVE-2026-39835 · CVE-2026-42151 · CVE-2026-42154 · CVE-2026-42499 · CVE-2026-42504 · CVE-2026-42508 · CVE-2026-44432 · CVE-2026-44486 · CVE-2026-44487 · CVE-2026-44488 · CVE-2026-44492 · CVE-2026-44494 · CVE-2026-44495 · CVE-2026-44496 · CVE-2026-44705 · CVE-2026-44990 · CVE-2026-46595 · CVE-2026-46597 · CVE-2026-48526 · CVE-2026-49477 · CVE-2026-54058 · CVE-2026-54060 · CVE-2026-55379 · CVE-2026-55380 · CVE-2026-56852 · CVE-2026-56853 · CVE-2026-56858 · CVE-2026-56859 · CVE-2026-56860 · CVE-2026-56862 · CVE-2026-57231 · CVE-2026-59197 · CVE-2026-59199 · CVE-2026-59200 · CVE-2026-59204 · CVE-2026-59205 · CVE-2026-59869 · CVE-2026-59885 · CVE-2026-59886 · CVE-2026-67213 · CVE-2026-67214 · CVE-2026-67313 · CVE-2026-67314 · CVE-2026-67320 · CVE-2026-67321 · CVE-2026-69152 · CVE-2026-69153 · CVE-2026-73086 · CVE-2026-73088 · CVE-2026-73089 · CVE-2026-84375

RHSA-2026:40765: Red Hat Security Advisory: OpenShift Container Platform 4.19.39 bug fix and security update

CVE-2026-9277 · CVE-2026-13676

RHSA-2026:36754: Red Hat Security Advisory: Red Hat Developer Hub 1.10.2 release.

CVE-2026-6322 · CVE-2026-6734 · CVE-2026-9277 · CVE-2026-9673 · CVE-2026-9697 · CVE-2026-12143 · CVE-2026-12151 · CVE-2026-24781 · CVE-2026-27136 · CVE-2026-39820 · CVE-2026-42338 · CVE-2026-42499 · CVE-2026-44486 · CVE-2026-44487 · CVE-2026-44488 · CVE-2026-44492 · CVE-2026-44494 · CVE-2026-44495 · CVE-2026-44496 · CVE-2026-45736 · CVE-2026-47131 · CVE-2026-47135 · CVE-2026-47137 · CVE-2026-47139 · CVE-2026-47140 · CVE-2026-47141 · CVE-2026-47208 · CVE-2026-47210 · CVE-2026-48779

RHSA-2026:28010: Red Hat Security Advisory: Red Hat build of Cryostat security update

CVE-2025-48431 · CVE-2026-9277 · CVE-2026-32281 · CVE-2026-41240 · CVE-2026-42578 · CVE-2026-42579 · CVE-2026-42581 · CVE-2026-42584 · CVE-2026-42587 · CVE-2026-43869

RHSA-2026:30076: Red Hat Security Advisory: Red Hat Quay 3.12.19

CVE-2026-6322 · CVE-2026-9277 · CVE-2026-10143 · CVE-2026-44432 · CVE-2026-44496 · CVE-2026-48526

WID-SEC-W-2026-1934: Red Hat OpenShift Service Mesh: Schwachstelle ermöglicht Codeausführung

CVE-2026-9277

RHSA-2026:26072: Red Hat Security Advisory: Kiali 1.73.32 for Red Hat OpenShift Service Mesh 2.6

CVE-2026-9277

RHSA-2026:44263: Red Hat Security Advisory: OpenShift Container Platform 4.20.31 bug fix and security update

CVE-2026-9277 · CVE-2026-12143 · CVE-2026-40895 · CVE-2026-42154 · CVE-2026-42338 · CVE-2026-45736 · CVE-2026-59869 · CVE-2026-59873

RHSA-2026:29795: Red Hat Security Advisory: OpenShift Container Platform 4.22.3 bug fix and security update

CVE-2026-4800 · CVE-2026-6322 · CVE-2026-9277 · CVE-2026-35469 · CVE-2026-44293

RHSA-2026:93951: Red Hat Security Advisory: OpenShift Virtualization v4.17 Images

CVE-2026-9277 · CVE-2026-59879 · CVE-2026-84375

RHSA-2026:44237: Red Hat Security Advisory: OpenShift Container Platform 4.22.7 bug fix and security update

CVE-2026-9277 · CVE-2026-27136 · CVE-2026-35469 · CVE-2026-42338 · CVE-2026-59869 · CVE-2026-59873

RHSA-2026:54395: Red Hat Security Advisory: Red Hat Quay 3.17.4

CVE-2026-6322 · CVE-2026-9277 · CVE-2026-10143 · CVE-2026-12143 · CVE-2026-13149 · CVE-2026-13676 · CVE-2026-15927 · CVE-2026-39821 · CVE-2026-39828 · CVE-2026-39829 · CVE-2026-39830 · CVE-2026-39831 · CVE-2026-39832 · CVE-2026-39835 · CVE-2026-42508 · CVE-2026-44432 · CVE-2026-44990 · CVE-2026-46597 · CVE-2026-54058 · CVE-2026-54060 · CVE-2026-55379 · CVE-2026-55380 · CVE-2026-57231 · CVE-2026-59197 · CVE-2026-59199 · CVE-2026-59200 · CVE-2026-59204 · CVE-2026-59205 · CVE-2026-59869 · CVE-2026-59885 · CVE-2026-59886 · CVE-2026-73086

RHSA-2026:60023: Red Hat Security Advisory: OpenShift Container Platform 4.17.57 bug fix and security update

CVE-2026-4800 · CVE-2026-9277 · CVE-2026-25681 · CVE-2026-33814 · CVE-2026-34986 · CVE-2026-35469 · CVE-2026-39820 · CVE-2026-42499 · CVE-2026-42504 · CVE-2026-46597 · CVE-2026-49332 · CVE-2026-50236 · CVE-2026-50237

RHSA-2026:33574: Red Hat Security Advisory: Red Hat Developer Hub 1.9.6 release.

CVE-2026-9277 · CVE-2026-9673 · CVE-2026-27145 · CVE-2026-33811 · CVE-2026-39820 · CVE-2026-42033 · CVE-2026-42035 · CVE-2026-42039 · CVE-2026-42041 · CVE-2026-42043 · CVE-2026-42044 · CVE-2026-42338 · CVE-2026-42499 · CVE-2026-44486 · CVE-2026-44487 · CVE-2026-44488 · CVE-2026-44492 · CVE-2026-44494 · CVE-2026-44495 · CVE-2026-44496 · CVE-2026-44724 · CVE-2026-45736 · CVE-2026-47131 · CVE-2026-47135 · CVE-2026-47137 · CVE-2026-47139 · CVE-2026-47140 · CVE-2026-47141 · CVE-2026-47208 · CVE-2026-47209 · CVE-2026-48779

RHSA-2026:70647: Red Hat Security Advisory: OpenShift Container Platform 4.12.99 bug fix and security update

CVE-2026-1784 · CVE-2026-9277 · CVE-2026-33814 · CVE-2026-33818 · CVE-2026-56859 · CVE-2026-56860 · CVE-2026-56862 · CVE-2026-75885 · CVE-2026-75887

openSUSE-SU-2026:10979-1: agama-web-ui-21+360.16caae772-44.1 on GA media

CVE-2026-6402 · CVE-2026-9277

RHSA-2026:50850: Red Hat Security Advisory: Red Hat Ansible Automation Platform 2.1 security update

CVE-2026-9277 · CVE-2026-43997 · CVE-2026-43998 · CVE-2026-43999 · CVE-2026-44000 · CVE-2026-44001 · CVE-2026-44002 · CVE-2026-44003 · CVE-2026-44004 · CVE-2026-44005 · CVE-2026-44006 · CVE-2026-44007 · CVE-2026-44008 · CVE-2026-44009 · CVE-2026-45411 · CVE-2026-47131 · CVE-2026-47135 · CVE-2026-47137 · CVE-2026-47139 · CVE-2026-47140 · CVE-2026-47141 · CVE-2026-47209 · CVE-2026-48068 · CVE-2026-48801 · CVE-2026-59877

openSUSE-SU-2026:20839-1: Security update for python-pytest-html

CVE-2026-9277

RHSA-2026:42796: Red Hat Security Advisory: Red Hat Quay 3.15.6

CVE-2026-9277 · CVE-2026-10143 · CVE-2026-12143 · CVE-2026-32591 · CVE-2026-39820 · CVE-2026-39821 · CVE-2026-39828 · CVE-2026-39829 · CVE-2026-39830 · CVE-2026-39831 · CVE-2026-39832 · CVE-2026-39835 · CVE-2026-42151 · CVE-2026-42154 · CVE-2026-42499 · CVE-2026-42508 · CVE-2026-44432 · CVE-2026-44486 · CVE-2026-44487 · CVE-2026-44488 · CVE-2026-44492 · CVE-2026-44494 · CVE-2026-44495 · CVE-2026-44496 · CVE-2026-44990 · CVE-2026-46595 · CVE-2026-46597 · CVE-2026-48526

RHSA-2026:26225: Red Hat Security Advisory: Technical preview of the satellite/iop-vulnerability-frontend-rhel9 container image

CVE-2026-6322 · CVE-2026-9277 · CVE-2026-26996 · CVE-2026-27904 · CVE-2026-29063 · CVE-2026-41680 · CVE-2026-42033 · CVE-2026-42035 · CVE-2026-42039 · CVE-2026-42041 · CVE-2026-42043 · CVE-2026-42044

RHSA-2026:65840: Red Hat Security Advisory: OpenShift Container Platform 4.13.71 bug fix and security update

CVE-2025-68121 · CVE-2026-9277 · CVE-2026-27143 · CVE-2026-27144 · CVE-2026-32280 · CVE-2026-33186 · CVE-2026-33814 · CVE-2026-39820 · CVE-2026-42154 · CVE-2026-42499 · CVE-2026-44496

RHSA-2026:26080: Red Hat Security Advisory: Kiali 2.4.18 for Red Hat OpenShift Service Mesh 3.0

CVE-2026-9277 · CVE-2026-32281

RHSA-2026:34791: Red Hat Security Advisory: OpenShift Container Platform 4.20.28 bug fix and security update

CVE-2026-9277 · CVE-2026-35469

RHSA-2026:44267: Red Hat Security Advisory: OpenShift Container Platform 4.21.26 bug fix and security update

CVE-2026-9277 · CVE-2026-12143 · CVE-2026-34986 · CVE-2026-35469 · CVE-2026-40895 · CVE-2026-42338 · CVE-2026-45736 · CVE-2026-59869 · CVE-2026-59873

RHSA-2026:41066: Red Hat Security Advisory: Red Hat Quay 3.16.5

CVE-2026-6322 · CVE-2026-9277 · CVE-2026-10143 · CVE-2026-12143 · CVE-2026-13676 · CVE-2026-32281 · CVE-2026-32591 · CVE-2026-39820 · CVE-2026-39821 · CVE-2026-39828 · CVE-2026-39829 · CVE-2026-39830 · CVE-2026-39831 · CVE-2026-39832 · CVE-2026-39835 · CVE-2026-42044 · CVE-2026-42151 · CVE-2026-42154 · CVE-2026-42499 · CVE-2026-42504 · CVE-2026-42508 · CVE-2026-44432 · CVE-2026-44486 · CVE-2026-44487 · CVE-2026-44488 · CVE-2026-44492 · CVE-2026-44494 · CVE-2026-44495 · CVE-2026-44496 · CVE-2026-44990 · CVE-2026-45822 · CVE-2026-46597 · CVE-2026-48526

RHSA-2026:33683: Red Hat Security Advisory: Red Hat Quay 3.10.23

CVE-2026-6322 · CVE-2026-9277 · CVE-2026-10143 · CVE-2026-44432 · CVE-2026-44496 · CVE-2026-48526

Source published
May 22, 2026, 1:22:38 PM (timezone not stated)
Source modified
Sep 14, 2026, 12:04:27 PM (timezone not stated)
Saved here
13 Nov 2026 19:08:19 UTC
Source terms
ENISA EUVD · source terms and attribution apply

Original source record · Cite this exact observation · Complete original publisher JSON

Source: euvd · ENISA EUVD · source terms and attribution apply. The publisher's wording is preserved. ChangeIntel groups the information and labels changes. The JSON record includes additional source fields.

EUVD CVSS 4.0 · 9.2 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

nvd · CVE-2026-9277

Published

shell-quote's `quote()` function did not validate object-token inputs against the operator model used by `parse()`. The `.op` field was backslash-escaped character by character using `/(.)/g`, which in JavaScript does not match line terminators (\n, \r, U+2028, U+2029). A line terminator in `.op` therefore passed through unescaped into the output; POSIX shells treat a literal newline as a command separator, so any content after it would execute as a second command. The vulnerable code path is reachable in two ways: (1) direct construction of `{ op: '...\n...' }` from external input, and (2) via `parse(cmd, envFn)` when `envFn` returns object tokens whose `.op` is attacker-influenced. Both are documented API surface. Fixed by replacing the per-character escape with strict shape validation: `.op` must match the parser's control-operator allowlist; `{ op: 'glob', pattern }` validates `pattern` and forbids line terminators; `{ comment }` validates `comment` and forbids line terminators; any other object shape throws `TypeError`.

Additional publisher context

NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON.

Source analysis status: Deferred

Weakness classifications: CWE-77 · CWE-78

Original publisher date fields

published: 2026-05-22T14:16:30.330

lastModified: 2026-09-14T13:19:33.133

Source published
22 May 2026 14:16:30 UTC
Source modified
14 Sep 2026 13:19:33 UTC
Saved here
25 Oct 2026 16:19:22 UTC
Source terms
NIST NVD usage terms; underlying source attribution retained

Original source record · Cite this exact observation · Complete original publisher JSON

Source: nvd · NIST NVD usage terms; underlying source attribution retained. The publisher's wording is preserved. ChangeIntel groups the information and labels changes. The JSON record includes additional source fields.

CVSS 4.0 · 7ffcee3d-2c14-4c3e-b844-86c6a321a158 · Secondary · 9.2 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

CVSS 3.1 · 7ffcee3d-2c14-4c3e-b844-86c6a321a158 · Secondary · 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H

CVSS 3.1 · 0b0ca135-0b70-47e7-9f44-1890c2a1c46c · Secondary · 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H

osv · GHSA-w7jw-789q-3m8p

Published

### Summary `shell-quote`'s `quote()` function did not validate object-token inputs against the operator model used by `parse()`. The `.op` field was backslash-escaped character by character using `/(.)/g`, which in JavaScript does not match line terminators (`\n`, `\r`, U+2028, U+2029). A line terminator in `.op` therefore passed through unescaped into the output; POSIX shells treat a literal `\n` as a command separator, so any content after it would execute as a second command. The vulnerable code path is reachable in two ways. Neither requires the parser to misbehave — `parse()` only emits ops from a fixed control set — but both are documented API surface: 1. **Direct construction.** A caller builds `{ op: '...\n...' }` from external input (e.g. a deserialized argument array) and passes it to `quote()`. 2. **`envFn` return.** `parse(cmd, envFn)` is documented to splice the return value of `envFn` into the result array when it is an object. An attacker-influenced data source consulted by `envFn` can introduce an object token whose `.op` reaches `quote()`. ### Impact Shell command injection in callers that pass object tokens with attacker-influenced `.op` values to `quote()` and then hand the result to a shell. The preconditions are narrower than ordinary string injection — they require the caller to feed object tokens into `quote()` — but object tokens are a public, documented part of the API surface, and `quote()` is intended to be a shell-safety boundary. ### PoC ```js const { parse, quote } = require('shell-quote'); // Direct construction quote([{ op: ';\nid' }]); // → "\;\n\\i\\d" ← literal newline; second line executes as a command // Via parse() with an envFn returning attacker-shaped objects const tokens = parse('echo $X', () => ({ op: ';\nid' })); require('child_process').execSync(quote(tokens), { shell: true }); // Executes `id` after `echo \;`. ``` Confirmed under `sh`, `bash`, `dash`, and `zsh`. ### Patch Fixed by replacing the per-character escape with strict shape validation in `quote()`. The object-token branch now: - **`{ op }`** — `.op` must be a string from the same allowlist the parser emits (`||`, `&&`, `;;`, `|&`, `<(`, `<<<`, `>>`, `>&`, `<&`, `&`, `;`, `(`, `)`, `|`, `<`, `>`). Anything else throws `TypeError`. This is the direct fix for the reported issue and removes the entire class of `.op` injection. - **`{ op: 'glob', pattern }`** — `.pattern` must be a string with no line terminators. Glob metacharacters (`*`, `?`, `[`, `]`, `{`, `}`, `,`) pass through; all other shell-special characters are backslash-escaped. (Previously the pattern field was discarded entirely and the literal string `\g\l\o\b` was emitted — a latent bug, not security-relevant.) - **`{ comment }`** — `.comment` must be a string with no line terminators (line terminators would end the shell comment and resume command parsing — same injection shape). - **Any other object shape** — `TypeError`. The fix is allowlist-based rather than a targeted regex tweak, so it closes the reported vector and forecloses adjacent ones (U+2028 / U+2029 line separators in `.op`, line terminators in comments, unknown-shape objects coerced through `.replace`). ### Workarounds Prior to upgrading, callers that build object tokens from untrusted input should validate `.op` against the parser's operator set themselves, and never construct `{ op }` from attacker-controlled strings. ### Credits Reported by Akshat Sinha

Source published
9 Jun 2026 14:27:15 UTC
Source modified
10 Sep 2026 03:50:50 UTC
Saved here
24 Oct 2026 13:17:17 UTC
Source terms
GitHub Advisory Database · CC-BY-4.0

Original source record · Cite this exact observation · Complete original publisher JSON

Source: osv · GitHub Advisory Database · CC-BY-4.0. The publisher's wording is preserved. ChangeIntel groups the information and labels changes. The JSON record includes additional source fields.

CVSS_V3 · CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H

CVSS_V4 · 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

Publisher rating · CRITICAL

ChangeIntel

An IT change radar: releases, security, known issues, retirements, documentation changes, and service status from public sources. Every item links to supporting evidence; dates and statuses can change after they are read.

Sources read 13 Nov 22:42 UTC · 274 of 275 readable · 270 fully read · documentation 469/469 current