A critical vulnerability has been identified in the shescape package (versions 1.5.10 and before 1.6.1). This vulnerability, assigned CVE identifier CVE-2022-25918, is related to Regular Expression Denial of Service (ReDoS) attacks. The vulnerability is present in the escape function located in the index.js file, and it is caused by the usage of insecure regular expressions in the escapeArgBash function. In this article, we will dive deeper into the details of this vulnerability, explain how it works, and discuss the steps you can take to remediate it in your projects.


The shescape package is a popular utility used for escaping shell command arguments on various platforms, including Unix and Windows. It allows developers to safely handle and escape user-supplied input, ensuring that the application executes shell commands as intended without running the risk of command injection attacks.

Vulnerability Details

The issue lies within the escapeArgBash function in the index.js file of the package. The insecure regular expression used within the function is the root cause of the vulnerability. The specific problematic code snippet is shown below:

function escapeArgBash(arg) {
    return arg.replace(/([\s"$`\\])/g, '\\$1');

The regular expression used for escaping, /([\s"$\\])/g, contains a group of special characters that are being escaped using the backslash \`. However, since the regex is not designed to handle nested or complex expressions efficiently, it is vulnerable to a ReDoS attack.

Exploit Scenario

To exploit this vulnerability, an attacker would create input strings with combinations of the special characters that the regex is designed to escape. By doing so, they can force the regular expression engine to consume a large amount of time and resources, ultimately causing the program to become unresponsive or crash due to excessive resource consumption.

Here is an example of a problematic input string that could be used to trigger the ReDoS vulnerability:

var input = "A_ \"\"
CVE-2022-25918 - NVD- shescape GitHub RepositoryTimelinePublished on: 10/27/2022 10:15:00 UTCLast modified on: 10/28/2022 19:41:00 UTC