cve-2024-4577 是 php 8.2.19 在 windows 下 cgi 模式、中文/日文 locale 环境中因 best-fit 字符转换导致的远程代码执行漏洞,需同时满足 php-cgi.exe 运行、apache、代码页 936/950/932 及特定 url 编码才可触发。

CVE-2024-4577 是 PHP 8.2.19 中 php-cgi 模块在 Windows 平台下存在的远程代码执行漏洞对应的 CVE 编号。
这个编号明确指向「Windows 下 PHP-CGI 参数注入」问题,根本原因不是 PHP 自身逻辑缺陷,而是 Windows 系统在简体中文(代码页 936)、繁体中文(950)、日文(932)等语系下启用 Best-Fit 字符转换时,将 URL 中的某些编码字符(如 %AD)错误映射为 ASCII 连字符 -,导致 PHP-CGI 把它误认为命令行选项前缀,从而绕过 CVE-2012-1823 的防护机制。
PHP 8.2.19 明确属于受影响版本
PHP 官方已确认:
PHP 8.2 全部受 <code>CVE-2024-4577影响-
8.2.19是该分支最后一个未修复版本,不包含补丁
你只要运行的是 php-cgi.exe(而非 mod_php 或 php-fpm),且部署在 Windows + Apache + 中文/日文系统区域设置下,就处于可被直接利用的状态。
常见误判点:不是所有 php-cgi 都中招
这个漏洞有严格触发条件,缺一不可:
- 运行模式必须是 CGI(例如 Apache 用
Action或SetHandler调用php-cgi.exe) - Web 服务器需在 Windows 上(Linux/macOS 不受影响)
- 系统区域设置必须是易触发 Best-Fit 的编码,如
Chinese (GBK) - 936 - 请求路径中需含特定编码序列(如
?%ADd+allow_url_include%3D1)
如果你用的是 XAMPP、WAMP 或手动配置的 Apache + php-cgi,大概率命中全部条件。
为什么不能只看 PHP 版本号?
CVE-2024-4577 的本质是「环境链式失效」:
Windows 内核行为 → Apache 请求解析 → PHP-CGI 启动参数解析 → PHP 内部选项处理
其中任意一环缺失(比如你用 Nginx + php-fpm,或系统设为英文 locale),漏洞就无法利用。
所以看到 PHP 8.2.19 时,第一反应不该是“升级”,而是先确认是否真在跑 php-cgi.exe,以及系统 locale 是否为 936 类。
现在已是 2026 年,8.2.20 早已停止维护,但漏洞原理仍在影响更晚版本的同类配置——比如你在 PHP 8.4.26 上仍用 CGI 模式 + 中文 locale,而没打 CVE-2026-109618 补丁,那风险模型其实没变,只是攻击面转移了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











