CVSS3
Attack Vector
NETWORK
Attack Complexity
LOW
Privileges Required
NONE
User Interaction
NONE
Scope
UNCHANGED
Confidentiality Impact
HIGH
Integrity Impact
HIGH
Availability Impact
HIGH
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
EPSS
Percentile
59.3%
This impacts users that use Shescape (any API function) to escape arguments for cmd.exe onWindows. An attacker can omit all arguments following their input by including a line feed character ('\n'
) in the payload. Example:
import cp from "node:child_process";
import * as shescape from "shescape";
// 1. Prerequisites
const options = {
shell: "cmd.exe",
};
// 2. Attack
const payload = "attacker\n";
// 3. Usage
let escapedPayload;
escapedPayload = shescape.escape(payload, options);
// Or
escapedPayload = shescape.escapeAll([payload], options)[0];
// Or
escapedPayload = shescape.quote(payload, options);
// Or
escapedPayload = shescape.quoteAll([payload], options)[0];
cp.execSync(`echo Hello ${escapedPayload}! How are you doing?`, options);
// Outputs: "Hello attacker"
> Note: execSync
is just illustrative here, all of exec
, execFile
, execFileSync
, fork
, spawn
, and spawnSync
can be attacked using a line feed character if CMD is the shell being used.
This bug has been patched in v1.5.8 which you can upgrade to now. No further changes are required.
Alternatively, line feed characters ('\n'
) can be stripped out manually or the user input can be made the last argument (this only limits the impact).
If you have any questions or comments about this advisory:
github.com/ericcornelissen/shescape
github.com/ericcornelissen/shescape/commit/aceea7358f7222984e21260381ebc5ec4543b76f
github.com/ericcornelissen/shescape/pull/332
github.com/ericcornelissen/shescape/releases/tag/v1.5.8
github.com/ericcornelissen/shescape/security/advisories/GHSA-jjc5-fp7p-6f8w
nvd.nist.gov/vuln/detail/CVE-2022-31179