PHPonWindows保留设备名未拒绝导致DoS(CVE-2026-17545)"

admin 2026-10-16 08:36:48 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

PHP on Windows 保留设备名未拒绝导致 DoS(CVE-2026-17545)

撅人

2026年9月27日 00:00
广东

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

PHP on Windows 保留设备名未拒绝导致 DoS

CVE-2026-17545 · GHSA-9f67-6fw4-hpfp | CVSS 6.5 | 披露时间 2026-09-26

1

漏洞速览

CVE 编号CVE-2026-17545

漏洞类型输入验证缺失 → 设备文件 DoS

影响产品PHP on Windows

安全等级Medium(中危)

CVSS v3.16.5

披露时间2026-09-26

利用情况暂无公开利用

GHSA 编号GHSA-9f67-6fw4-hpfp

影响平台仅 Windows 部署

远程利用是(需用户可控文件名)

2

漏洞概述

PHP 是全球使用最广泛的 Web 服务器端脚本语言之一,大量 Windows 平台运行的 PHP 应用(如 ThinkPHP、Laravel on IIS 等)通过文件系统 API 处理用户上传的文件名或请求中的路径参数。2026 年 9 月 26 日,PHP 安全团队披露了一个在 Windows 平台上存在的关键输入验证缺失漏洞。CVE-2026-17545 的 CVSS v3.1 评分为 6.5 分(中危)。

在 Windows 操作系统中,CON、PRN、AUX、NUL、COM1~COM9、LPT1~LPT9 等名称被保留为设备文件名。当这些名称作为路径组件出现在文件/流 I/O 操作中时,PHP 的文件系统 API 不会拒绝它们,导致 CreateFileW() 打开的是设备而非普通文件,从而可能阻塞请求、耗尽工作进程,导致拒绝服务(DoS)。

影响范围:该漏洞仅影响 Windows 平台部署的 PHP,因为保留设备名是 Windows 文件系统特有的概念。在 Linux/Unix 平台上,这些名称被视为普通文件名,不存在此问题。受影响版本为 PHP 8.2.33 及以下、8.3.34 及以下、8.4.25 及以下、8.5.10 及以下。

3

详细漏洞分析

CVE-2026-17545 — Windows 保留设备名未拒绝导致 DoS(CVSS 6.5)

GHSA-9f67-6fw4-hpfp · 影响:8.2.0~8.2.33 / 8.3.0~8.3.34 / 8.4.0~8.4.25 / 8.5.0~8.5.10 · 修复:8.2.34 / 8.3.35 / 8.4.26 / 8.5.11

第一层:底层概念

Windows 操作系统在早期 PC DOS 时代为硬件设备预留了特殊文件名:CON(控制台)、PRN(打印机)、AUX(辅助串口)、NUL(空设备)、COM1~COM9(串行端口)和 LPT1~LPT9(并行端口),以及 CONIN$ 和 CONOUT$(Windows NT 内核控制台设备)。当应用程序尝试以这些名称创建或打开文件时,系统不会创建普通文件,而是返回硬件设备句柄。

第二层:漏洞机制

应用代码中的路径会流经流包装器层(stream wrapper layer)进入 Windows I/O 层。例如:file\_get\_contents() 通过 php\_stream\_open\_wrapper\_ex() 打开请求路径,move\_uploaded\_file() 通过 VCWD\_RENAME() 和 php\_copy\_file\_ex() 处理路径,用户可控的上传文件名最终会到达同一个地方。

Windows 路径验证宏仅检查尾随空格和某些尾随点(如 file.txt.),没有检查保留设备名。php\_win32\_ioutil\_open\_w() 将路径直接传递给 CreateFileW(),而不会进行设备名过滤。

第三层:攻击链

步骤 1 — 攻击者构造恶意文件名,如 CON、CONIN$、NUL.txt、COM3

↓

步骤 2 — 将恶意文件名传入 PHP 应用的路径参数(如 ?file=CONIN$)

↓

步骤 3 — PHP 应用通过文件系统 API(如 file\_get\_contents())尝试打开路径

↓

步骤 4 — Windows CreateFileW() 打开设备(如 CONIN$ 会等待控制台输入,永久阻塞)

↓

步骤 5 — 在高并发场景下,多个阻塞请求会耗尽工作进程池,导致拒绝服务(DoS)

利用示例(PoC):

请求脚本时传入 ?file=CON、?file=CONIN$ 或 ?file=NUL.txt 会使 PHP 打开对应设备而非失败于文件不存在。其中 CONIN$ 会等待控制台输入,从而永久挂起请求。

利用条件:Windows 平台部署的 PHP 应用,且应用构建路径时使用了用户可控的输入(如下载接口、上传文件名来自客户端提交的文件名等)。

4

快速自查命令

① 检查 PHP 版本

php -v

检查 PHP 版本是否在受影响范围内:8.2.0~8.2.33 / 8.3.0~8.3.34 / 8.4.0~8.4.25 / 8.5.0~8.5.10

② 检查 PHP 运行平台

php -r \"echo PHP\_OS;\"

若输出为 WINNT 或 WIN32,则为 Windows 平台,存在受影响可能

③ 检查应用是否存在文件下载接口

grep -rn \"file\_get\_contents\|file\_put\_contents\|include\|require\" --include=\"\*.php\" /path/to/app/

查找可能将用户输入拼接到文件路径的代码

④ 检查应用是否有上传文件名来自客户端的接口

grep -rn \"move\_uploaded\_file\|upload\['name'\]\" --include=\"\*.php\" /path/to/app/

客户端提交的文件名若未经校验可直接用于构建路径

⑤ 验证修复效果(升级后)

php -r \"file\_get\_contents('C:\\temp\\CON');\"

升级后应返回 \"Invalid name\" 错误而非打开设备

5

修复方案

PHP 官方已修复所有分支的漏洞,请根据当前使用的版本,升级到对应的修复版本:

受影响版本分支 → 最低修复版本

PHP 8.2.x 系列 → 8.2.34

PHP 8.3.x 系列 → 8.3.35

PHP 8.4.x 系列 → 8.4.26

PHP 8.5.x 系列 → 8.5.11

注意:修复版本仅影响 Windows 平台部署。Linux/Unix 平台不受此漏洞影响,无需升级。升级后,PHP 将通过新增的 php\_win32\_ioutil\_path\_kind\_w() 函数在 I/O 之前对路径中的保留设备名进行验证,若发现保留设备名则返回 ERROR\_INVALID\_NAME 错误。

升级操作步骤

步骤 1:备份当前 PHP 配置(php.ini、扩展配置等)

步骤 2:下载对应分支的修复版本,按官方升级流程执行

步骤 3:升级完成后验证版本:执行 php -v

步骤 4:使用 PoC 脚本验证设备名是否被正确拒绝

步骤 5:检查 Web 日志,确认无异常访问请求

6

安全提醒

对用户输入的文件名实施严格白名单校验

禁止使用用户上传的文件名直接作为文件系统路径,应在服务端生成安全的文件名(如 UUID),或使用白名单过滤特殊字符和设备名。

在文件路径构建之前进行设备名过滤

在将用户输入拼接到文件路径之前,检查文件名是否包含保留设备名(CON、PRN、AUX、NUL、COM1~COM9、LPT1~LPT9、CONIN$、CONOUT$),拒绝所有匹配请求。

考虑使用 chroot 或容器隔离

将 PHP 运行在容器化环境中,限制其对底层文件系统的访问范围,即使设备名被打开也不会影响宿主系统。

配置请求超时和并发限制

设置合理的 PHP-FPM 请求超时时间(如 max\_execution\_time),并对文件操作相关的接口设置并发限制,降低 DoS 攻击的影响面。

关注其他语言生态系统的同类修复

保留设备名问题已在多个编程语言和框架中出现过,如 Java、Python、.NET 等都有过类似的修复。建议关注 PHP 官方安全公告,及时跟进其他语言生态系统的同类修复。

7

参考链接

CVE-2026-17545 官方记录(CVE.org)

GHSA-9f67-6fw4-hpfp(GitHub Advisory)

PHP 8.5.11 Release(修复版本)

win32/ioutil.h — Windows 路径验证宏

win32/ioutil.c — CreateFileW 调用路径


文件通知也能“偷看”你:跨平台操作系统暴露用户活动侧信道" 网络安全文章

文件通知也能“偷看”你:跨平台操作系统暴露用户活动侧信道"

研究人员发现Windows、Linux、Android和macOS的文件通知机制可被滥用于侧信道攻击,通过观察文件事件的时间、路径和序列推断用户键盘输入、网站访问等敏感活动,无需读取文件内容。Linux下击键识别准确率最高达100%,Windows下网站指纹识别F1达97.8%。建议关注本地低权限进程,更新内核并重新审视元数据泄露风险。
PHPonWindows保留设备名未拒绝导致DoS(CVE-2026-17545)" 网络安全文章

PHPonWindows保留设备名未拒绝导致DoS(CVE-2026-17545)"

PHP在Windows平台存在保留设备名未拒绝导致的拒绝服务漏洞CVE-2026-17545,CVSS评分6.5中危。攻击者可利用CON、NUL等设备名作为文件名,通过文件API打开设备导致请求阻塞耗尽进程池。影响PHP8.2至8.5多个版本,官方已发布修复版本8.2.34、8.3.35、8.4.26、8.5.11。建议升级修复并对用户输入文件名实施白名单校验。
别让“键盘声”盖过“加油声”" 网络安全文章

别让“键盘声”盖过“加油声”"

公安机关公布5起网暴运动员典型案例,强调网络空间非法外之地,对网暴行为依法亮剑。文章呼吁群众举报、平台留存证据、公安果断出手,开展净网2026专项行动,维护运动员合法权益,营造清朗网络空间。
如果你有一台闲置VPS,建议看看这个开源蜜罐wisp" 网络安全文章

如果你有一台闲置VPS,建议看看这个开源蜜罐wisp"

本文介绍开源蜜罐项目wisp,其以Go单二进制形式部署,模拟Kubernetes、Docker、云IMDS、Jenkins、GitLab、Ollama及MCP等现代基础设施服务作为诱饵,部署简单,适合VPS用户。文章强调蜜罐需与业务服务器隔离,日志分析比攻击次数统计更有价值,并建议从低成本节点起步观察真实流量。文末含服务器推广链接。
评论:0   参与:  0