Node.js | 报告 #3255707 - Windows设备名在CVE-2025-27210修复后仍允许UNC路径遍历 | HackerOne
时间线
- oblivionsage 向Node.js提交报告
2025年7月16日, 11:13am UTC
摘要
我发现Windows设备名(CON、PRN、AUX等)在处理UNC网络路径时仍可用于路径遍历攻击,即使在CVE-2025-27210补丁之后。基本上,该修复仅覆盖了常规路径,但遗漏了使用path.join()
时的UNC路径场景。
描述
我测试了最近的CVE-2025-27210修复,并注意到一些情况。该补丁对常规路径有效——如果我尝试path.normalize('CON:../../secret.txt')
,它正确返回.\CON:..\..\secret.txt
。很好,这已修复。
但当我开始测试UNC路径(如网络路径\\server\share
)时,发现漏洞仍然存在。问题是当您将path.join()
与UNC路径和设备名一起使用时,设备名会被剥离,遍历发生。
示例代码:
|
|
这是因为path.join()
内部的normalize函数处理UNC路径的方式与常规路径不同。
重现步骤
- 使用任何Node.js版本,包括最新的v24.4.1(带有CVE-2025-27210修复)
- 创建一个简单的测试文件:
|
|
- 运行代码
- 预期结果:
\\fileserver\public\uploads\.\CON:..\..\..\private\passwords.txt
- 实际结果:
\\fileserver\public\private\passwords.txt
(逃逸了uploads目录!)
与CVE-2025-27210的不同之处
我知道您在想——“我们不是刚修复了这个吗?”嗯,算是。CVE-2025-27210通过添加.\
前缀来修复常规路径的问题。但该修复仅适用于直接的normalize()
调用或常规本地路径。
差异:
- CVE-2025-27210:修复了本地路径的
path.normalize('CON:../')
- 此漏洞:UNC路径如
\\server\share
+ 设备名在使用path.join()
时仍易受攻击
这本质上是CVE-2025-27210修复在网络场景中的绕过。
缓解措施
要修复此问题,您应将相同的设备名验证逻辑应用于path.join()
函数中的UNC路径。具体来说,当连接以\\
开头的路径时,代码需要检查设备名并添加.\
前缀,就像对常规路径所做的那样。
修复可能需要放在normalize函数的UNC路径处理部分,围绕处理以\\
开头的路径的地方。
影响
攻击者可以读取Windows网络共享上预期目录之外的文件:
- 文件共享应用程序(逃逸到其他用户的文件夹)
- 使用UNC路径的云存储系统
- 企业网络共享(访问敏感文档)
- 任何从网络位置提供文件的Node.js应用程序
此外,这可能导致企业网络中的横向移动——想象从\\webapp\public
逃逸到\\webapp\C$\Windows\System32\config
甚至其他服务器如\\adminserver\C$
。
后续讨论
oblivionsage 在评论中提供了更多上下文,解释了他最初未测试UNC路径场景的原因,并强调了此漏洞与CVE-2025-27210的不同之处。他提供了更详细的测试代码来证明漏洞。
Node.js团队成员mcollina和rafaelgss参与了讨论。rafaelgss指出,根据Node.js的威胁模型,用户应在将输入传递给path.join()
之前进行清理,因此这可能被视为常规错误而非漏洞。但oblivionsage反驳说,如果这是真的,那么CVE-2025-27210也不应被修复,并强调了不一致行为的安全风险。
最终,Node.js团队审查后决定,根据其威胁模型,此类问题不应被视为漏洞,而是常规错误,用户有责任清理输入。报告被关闭为信息性,并同意公开披露。
报告详情
- 报告ID: #3255707
- 严重性: 高 (7.5)
- 弱点: 路径遍历
- CVE ID: 无
- 披露日期: 2025年7月28日, 6:56pm UTC