ghsa-44vr-rwwj-p88h
Vulnerability from github
Published
2022-07-15 21:46
Modified
2022-08-11 22:14
Severity ?
Summary
Shescape vulnerable to insufficient escaping of whitespace
Details

Impact

This only impacts users that use the escape or escapeAll functions with the interpolation option set to true. Example:

```javascript import cp from "node:child_process"; import * as shescape from "shescape";

// 1. Prerequisites const options = { shell: "bash", // Or shell: "dash", // Or shell: "powershell.exe", // Or shell: "zsh", // Or shell: undefined, // Only if the default shell is one of the affected shells. };

// 2. Attack (one of multiple) const payload = "foo #bar";

// 3. Usage let escapedPayload; shescape.escape(payload, { interpolation: true }); // Or shescape.escapeAll(payload, { interpolation: true });

cp.execSync(echo Hello ${escapedPayload}!, options); // Output depends on the shell being used ```

The result is that if an attacker is able to include whitespace in their input they can:

  1. Invoke shell-specific behaviour through shell-specific special characters inserted directly after whitespace.
  2. Affected shells: Bash, Dash, Zsh, PowerShell
  3. Invoke shell-specific behaviour through shell-specific special characters inserted or appearing after line terminating characters.
  4. Affected shells: Bash
  5. Invoke arbitrary commands by inserting a line feed character.
  6. Affected Shells: Bash, Dash, Zsh, PowerShell
  7. Invoke arbitrary commands by inserting a carriage return character.
  8. Affected Shells: PowerShell

Patches

Behaviour number 1 has been patched in v1.5.7 which you can upgrade to now. No further changes are required.

Behaviour number 2, 3, and 4 have been patched in v1.5.8 which you can upgrade to now. No further changes are required.

Workarounds

The best workaround is to avoid having to use the interpolation: true option - in most cases using an alternative is possible, see the recipes for recommendations.

Alternatively, you can strip all whitespace from user input. Note that this is error prone, for example: for PowerShell this requires stripping '\u0085' which is not included in JavaScript's definition of \s for Regular Expressions.

References

  • https://github.com/ericcornelissen/shescape/pull/322
  • https://github.com/ericcornelissen/shescape/pull/324
  • https://github.com/ericcornelissen/shescape/pull/332
  • https://github.com/ericcornelissen/shescape/releases/tag/v1.5.7
  • https://github.com/ericcornelissen/shescape/releases/tag/v1.5.8

For more information

  • Comment on:
  • For behaviour 1 (PowerShell): https://github.com/ericcornelissen/shescape/pull/322
  • For behaviour 1 (Bash, Dash, Zsh): https://github.com/ericcornelissen/shescape/pull/324
  • For behaviour 2, 3, 4 (any shell): https://github.com/ericcornelissen/shescape/pull/332
  • Open an issue at https://github.com/ericcornelissen/shescape/issues (New issue > Question > Get started)
  • If you're missing CMD from this advisory, see https://github.com/ericcornelissen/shescape/security/advisories/GHSA-jjc5-fp7p-6f8w
Show details on source website


{
  "affected": [
    {
      "package": {
        "ecosystem": "npm",
        "name": "shescape"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "1.4.0"
            },
            {
              "fixed": "1.5.8"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "aliases": [
    "CVE-2022-31180"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-74"
    ],
    "github_reviewed": true,
    "github_reviewed_at": "2022-07-15T21:46:08Z",
    "nvd_published_at": "2022-08-01T20:15:00Z",
    "severity": "CRITICAL"
  },
  "details": "### Impact\n\nThis only impacts users that use the `escape` or `escapeAll` functions with the `interpolation` option set to `true`. Example:\n\n```javascript\nimport cp from \"node:child_process\";\nimport * as shescape from \"shescape\";\n\n// 1. Prerequisites\nconst options = {\n  shell: \"bash\",\n  // Or\n  shell: \"dash\",\n  // Or\n  shell: \"powershell.exe\",\n  // Or\n  shell: \"zsh\",\n  // Or\n  shell: undefined, // Only if the default shell is one of the affected shells.\n};\n\n// 2. Attack (one of multiple)\nconst payload = \"foo #bar\";\n\n// 3. Usage\nlet escapedPayload;\nshescape.escape(payload, { interpolation: true });\n// Or\nshescape.escapeAll(payload, { interpolation: true });\n\ncp.execSync(`echo Hello ${escapedPayload}!`, options);\n// _Output depends on the shell being used_\n```\n\nThe result is that if an attacker is able to include whitespace in their input they can:\n\n1. Invoke shell-specific behaviour through shell-specific special characters inserted directly after whitespace.\n   - Affected shells: _Bash_, _Dash_, _Zsh_, _PowerShell_\n2. Invoke shell-specific behaviour through shell-specific special characters inserted or appearing after line terminating characters. \n   - Affected shells: _Bash_\n3. Invoke arbitrary commands by inserting a line feed character.\n   - Affected Shells: _Bash_, _Dash_, _Zsh_, _PowerShell_\n3. Invoke arbitrary commands by inserting a carriage return character.\n   - Affected Shells: _PowerShell_\n\n### Patches\n\nBehaviour number 1 has been patched in [v1.5.7] which you can upgrade to now. No further changes are required.\n\nBehaviour number 2, 3, and 4 have been patched in [v1.5.8] which you can upgrade to now. No further changes are required.\n\n### Workarounds\n\nThe best workaround is to avoid having to use the `interpolation: true` option - in most cases using an alternative is possible, see [the recipes](https://github.com/ericcornelissen/shescape#recipes) for recommendations.\n\nAlternatively, you can strip all whitespace from user input. Note that this is error prone, for example: for PowerShell this requires stripping `\u0027\\u0085\u0027` which is not included in JavaScript\u0027s definition of `\\s` for Regular Expressions.\n\n### References\n\n- https://github.com/ericcornelissen/shescape/pull/322\n- https://github.com/ericcornelissen/shescape/pull/324\n- https://github.com/ericcornelissen/shescape/pull/332\n- https://github.com/ericcornelissen/shescape/releases/tag/v1.5.7\n- https://github.com/ericcornelissen/shescape/releases/tag/v1.5.8\n\n### For more information\n\n- Comment on:\n  - For behaviour 1 (PowerShell): https://github.com/ericcornelissen/shescape/pull/322\n  - For behaviour 1 (Bash, Dash, Zsh): https://github.com/ericcornelissen/shescape/pull/324\n  - For behaviour 2, 3, 4 (_any shell_): https://github.com/ericcornelissen/shescape/pull/332\n- Open an issue at https://github.com/ericcornelissen/shescape/issues (_New issue_ \u003e _Question_ \u003e _Get started_)\n- If you\u0027re missing CMD from this advisory, see https://github.com/ericcornelissen/shescape/security/advisories/GHSA-jjc5-fp7p-6f8w\n\n[v1.5.7]: https://github.com/ericcornelissen/shescape/releases/tag/v1.5.7\n[v1.5.8]: https://github.com/ericcornelissen/shescape/releases/tag/v1.5.8\n\n",
  "id": "GHSA-44vr-rwwj-p88h",
  "modified": "2022-08-11T22:14:40Z",
  "published": "2022-07-15T21:46:08Z",
  "references": [
    {
      "type": "WEB",
      "url": "https://github.com/ericcornelissen/shescape/security/advisories/GHSA-44vr-rwwj-p88h"
    },
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2022-31180"
    },
    {
      "type": "WEB",
      "url": "https://github.com/ericcornelissen/shescape/pull/322"
    },
    {
      "type": "WEB",
      "url": "https://github.com/ericcornelissen/shescape/pull/324"
    },
    {
      "type": "WEB",
      "url": "https://github.com/ericcornelissen/shescape/pull/332"
    },
    {
      "type": "PACKAGE",
      "url": "https://github.com/ericcornelissen/shescape"
    },
    {
      "type": "WEB",
      "url": "https://github.com/ericcornelissen/shescape/releases/tag/v1.5.7"
    },
    {
      "type": "WEB",
      "url": "https://github.com/ericcornelissen/shescape/releases/tag/v1.5.8"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
      "type": "CVSS_V3"
    }
  ],
  "summary": "Shescape vulnerable to insufficient escaping of whitespace"
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.