{"id":"GHSA-66pp-5p9w-q87j","summary":"Shescape has potential environment variable exposure on Windows with CMD","details":"### Impact\n\nThis impact users of Shescape on Windows that explicitly configure `shell: 'cmd.exe'` or `shell: true` using any of `quote`/`quoteAll`/`escape`/`escapeAll`.\n\nAn attacker may be able to get read-only access to environment variables. Example:\n\n```javascript\nimport * as cp from \"node:child_process\";\nimport { Shescape } from \"shescape\";\n\n// 1. Prerequisites\nconst shescape = new Shescape({\n    shell: \"cmd.exe\",\n    // Or\n    shell: true, // Only if the default shell is CMD\n});\n\n// 2. Payload\nconst payload = '\"%PATH%';\n\n// 3. Usage\nlet escapedPayload;\n\nescapedPayload = shescape.quote(payload);\n// Or\nescapedPayload = shescape.quoteAll([payload]);\n// Or\nescapedPayload = shescape.escape(payload);\n// Or\nescapedPayload = shescape.escapeAll([payload]);\n\n// And (example)\nconst result = cp.execSync(`echo Hello ${escapedPayload}`, options);\n\n// 4. Impact\nconsole.log(result.toString());\n// Outputs \"Hello\" followed by the contents of the PATH environment variable\n```\n\nFor Shescape prior to v2.0.0, the `options` object must have `shell: 'cmd.exe'` or `shell: undefined` and `interpolation: true`.\n\n\n### Patches\n\nThis bug has been patched in [v2.1.2](https://github.com/ericcornelissen/shescape/releases/tag/v2.1.2) which you can upgrade to now.\n\nIf you are already using v2 of Shescape, no further changes are required. If you are using v1 of Shescape, follow the [migration guide](https://github.com/ericcornelissen/shescape/blob/155b13b4141750203ce71249f1b0fdc638c7a0d0/docs/migration.md) to upgrade to v2. There is no plan to release a patch compatible with v1 of Shescape.\n\n\n### Workarounds\n\nAlternatively, users can remove all instances of % from user input before using Shescape.\n\n\n### References\n\n- Shescape Pull Request [#1916](https://github.com/ericcornelissen/shescape/pull/1916)\n- Shescape commit [0a81f1e](https://github.com/ericcornelissen/shescape/commit/0a81f1eb077bab8caae283a2490cd7be9af179c6)\n- Shescape release [v2.1.2](https://github.com/ericcornelissen/shescape/releases/tag/v2.1.2)\n\n\n### For more information\n\n- Comment on Pull Request [#1916](https://github.com/ericcornelissen/shescape/pull/1916)\n- Comment on commit [0a81f1e](https://github.com/ericcornelissen/shescape/commit/0a81f1eb077bab8caae283a2490cd7be9af179c6)\n- Open an issue at [https://github.com/ericcornelissen/shescape/issues](https://github.com/ericcornelissen/shescape/issues) (New issue \u003e Question)","aliases":["CVE-2025-30222"],"modified":"2026-09-10T03:50:22.897984593Z","published":"2025-03-26T14:54:22Z","database_specific":{"nvd_published_at":"2025-03-25T23:15:36Z","cwe_ids":["CWE-200"],"severity":"LOW","github_reviewed":true,"github_reviewed_at":"2025-03-26T14:54:22Z"},"references":[{"type":"WEB","url":"https://github.com/ericcornelissen/shescape/security/advisories/GHSA-66pp-5p9w-q87j"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2025-30222"},{"type":"WEB","url":"https://github.com/ericcornelissen/shescape/pull/1916"},{"type":"WEB","url":"https://github.com/ericcornelissen/shescape/commit/0a81f1eb077bab8caae283a2490cd7be9af179c6"},{"type":"PACKAGE","url":"https://github.com/ericcornelissen/shescape"},{"type":"WEB","url":"https://github.com/ericcornelissen/shescape/releases/tag/v2.1.2"}],"affected":[{"package":{"name":"shescape","ecosystem":"npm","purl":"pkg:npm/shescape"},"ranges":[{"type":"SEMVER","events":[{"introduced":"1.7.2"},{"fixed":"2.1.2"}]}],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2025/03/GHSA-66pp-5p9w-q87j/GHSA-66pp-5p9w-q87j.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V4","score":"CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:U"}]}