是,PHP 8.3.7 仍受 CVE-2024-4577 影响,该漏洞仅在 PHP 8.3.8 中修复;8.3.7 属于官方明确列出的受影响版本(8.3 < 8.3.8),未包含任何补丁。

确认 CVE-2024-4577 是否仍影响 php-cgi 8.3.7
PHP 8.3.7 **不修复** CVE-2024-4577,该漏洞在 PHP 8.3.8 中才被正式修复。官方明确将影响范围定为 PHP 8.3 < 8.3.8,而 8.3.7 属于漏洞版本。直接复测 8.3.7 是无效动作——它根本没包含补丁。
常见错误现象:在升级后运行 php -v 显示 8.3.7,就认为“已打补丁”,结果复测仍能触发 RCE。
- 务必先执行
php -v确认实际运行版本号(注意:不是安装包名,也不是phpinfo()页面缓存) - 检查 Web 服务器加载的是否为新二进制:Apache 下用
httpd -M | grep php或 Nginx 下看fastcgi_pass指向路径 - Windows 用户特别注意:XAMPP 自带的 php-cgi.exe 可能未被替换,需手动校验
C:\xampp\php\php-cgi.exe的文件属性 → “详细信息”页中的产品版本
复测必须用真实攻击载荷验证 php-cgi 行为
不能只靠版本号或配置项判断修复成功。CVE-2024-4577 的本质是 Windows CGI 模式下对 %ad 类编码的 Best-Fit 解码绕过,复测必须构造原始 PoC 触发路径解析异常。
典型失败场景:仅检查 disable_functions 或关闭 ScriptAlias /php-cgi/,误以为“已缓解”,但实际 php-cgi.exe 仍在后台可被非标准路径调用(如 /test.php?%ad=1 + 特定 Accept 头)。
立即学习“PHP免费学习笔记(深入)”;
- 在目标服务器上发起请求:
curl "http://target/test.php?%ad=1" -H "Accept: */*"(简体中文环境) - 观察响应:若返回 PHP 解析错误(如
Warning: Unknown: failed to open stream)或直接执行了恶意代码,则漏洞仍存在 - 使用 Burp Suite 重放时,确保请求头含
Accept-Charset: utf-8,gbk或模拟 IE UA,触发 Windows 字符集转换逻辑 - 禁用所有 Web 服务器层重写规则后再测,避免干扰判断
验证 php-cgi 进程是否真正隔离
即使升级到 8.3.8,若 php-cgi.exe 仍暴露在 Web 可访问路径(如 /php-cgi/php-cgi.exe 或任意可猜解路径),攻击者仍可能绕过 Web 服务器配置直连执行——这是 CVE-2024-4577 的第二攻击面。
容易被忽略的点:Docker 容器内升级 PHP 镜像后,宿主机映射的旧 php-cgi.exe 文件未清理;或 IIS 的 handler mappings 仍保留对 *.exe 的 CGI 解析权限。
- 在 Windows 上执行:
Get-ChildItem -Path C:\ -Include php-cgi.exe -Recurse -ErrorAction SilentlyContinue | Select FullName, VersionInfo - Linux/FPM 环境也要检查:是否存在残留的
php-cgi二进制且权限为 755(ls -l $(which php-cgi)) - Apache 用户确认
httpd.conf或extra/httpd-xampp.conf中已注释或删除ScriptAlias /php-cgi/行 - 用
nmap -p 80 --script http-vuln-cve2024-4577 target辅助扫描(需更新 NSE 脚本至 2026 年版)
复测必须覆盖 FPM 和 CGI 双模式
CVE-2024-4577 主要影响 CGI 模式,但部分缓解方案(如修改 PHP_VALUE)会意外影响 FPM 子进程行为,导致 opcache.preload 失败或 session 启动异常。复测不能只看漏洞是否触发,还要确认业务功能未退化。
典型回归问题:升级后登录态丢失、AJAX 接口返回 502、Composer install 报 zend_mm_heap corrupted。
- 启动 FPM 后执行:
php-fpm -t检查配置语法,再用systemctl status php8.3-fpm确认子进程正常拉起 - 在 Web 请求中触发一个含
session_start()和opcache_get_status()的脚本,验证无 Warning - 检查错误日志:
tail -f /var/log/php8.3-fpm.log或C:\xampp\php\logs\php_error_log,搜索opline、execute_data、zend_call_stack等关键词(这些是 8.3.7 已知崩溃点) - 若使用 Docker,确认
php:8.3.8-cli-alpine镜像中php -m | grep cgi输出为空(即未编译 CGI SAPI)
复测最易出错的地方,是把“版本号达标”等同于“漏洞消失”。CVE-2024-4577 的绕过机制依赖 Windows 底层字符转换,哪怕只差一个补丁版本、或漏删一个 php-cgi.exe 文件、或 Web 服务器配置未同步更新,攻击链依然完整。



















