PHP 8.2.19存在双重高危RCE风险:CVE-2024-4577(Windows下%ad绕过CGI参数过滤)和CVE-2026-109619(残留全局状态导致UAF型RCE),均未修复且无法靠配置完全缓解,必须升级至8.2.20或更高版本。

php-cgi 在 PHP 8.2.19 中存在明确的未授权访问风险,主要来自 CVE-2024-4577(Windows 平台)和 CVE-2026-109619(通用部署)两类漏洞叠加影响。该版本既不在官方修复列表中,又处于高危窗口期。
CVE-2024-4577:Windows 下 php-cgi 可被绕过防护直连执行
- PHP 8.2.19 属于 PHP 8.2 < 8.2.20 范围,明确受影响。
- 漏洞触发不依赖 Web 应用代码,只要 Apache / Nginx 配置了
ScriptAlias /php-cgi/或类似 CGI 映射,且系统区域设置为简体中文(CP936)、繁体中文(CP950)或日文(CP932),攻击者就能用%ad编码绕过-过滤,向php-cgi.exe注入命令行参数。 - 常见错误现象:
- 访问
<a href="https://www.php.cn/link/8478fe41c80431e5343da65c14312d11">https://www.php.cn/link/8478fe41c80431e5343da65c14312d11</a>时返回 PHP 解析结果而非 403/404 - 日志中出现大量含
%ad、%00、-d的 GET 请求
- 访问
- 实操建议:
- 立即检查是否启用 CGI 模式:
php -i | grep "Server API"输出为CGI/FastCGI即中招 - Windows 用户若用 XAMPP/WAMP,默认开启
ScriptAlias /php-cgi/,必须注释掉对应行并重启 Apache - 不可仅靠 WAF 规则拦截,
%ad在 URL 解码前就已进入 CGI 参数解析流程,Apache mod_rewrite 必须在最外层生效
- 立即检查是否启用 CGI 模式:
CVE-2026-109619:同一 FPM/CGI 工作进程残留状态导致未授权 RCE
- PHP 8.2.19 属于 8.2.0 <= PHP < 8.2.20,同样未修复该漏洞。
- 该漏洞不要求攻击者登录,只要两个请求打到同一个 CGI 进程(常见于短连接、低并发 CGI 池),第二个请求就能读取第一个请求残留的
$_SESSION、upload_progress或扩展内部指针,造成 UAF。 - 关键触发点:
- 启用了
session.upload_progress.enabled = On(默认开启) - 使用 multipart/form-data 提交含
PHPSESSID和UPLOAD_PROGRESS字段的请求
- 启用了
- 实操建议:
- 临时禁用上传进度:
session.upload_progress.enabled = Off,并重启服务 - 若业务强依赖该功能,需配合
session.upload_progress.cleanup = On+session.upload_progress.prefix加密前缀,但不能根除风险 - CGI 模式下无进程复用机制,但 Windows 上 php-cgi.exe 默认以“每个请求新建进程”方式运行,反而更易被爆破式请求塞满进程池,加剧 OOM 类型的连锁利用(如关联 CVE-2026-109618)
- 临时禁用上传进度:
为什么升级比临时配置更关键
-
php-cgi是 CGI 协议的直面接口,没有中间代理层,所有防护(WAF、Nginx rewrite、防火墙 ACL)都必须在它之前完成拦截 —— 但 CVE-2024-4577 的编码绕过发生在协议解析最底层,多数 WAF 规则无效。 -
disable_functions对该漏洞完全无效:攻击者控制的是 php-cgi 进程启动参数,不是 PHP 脚本内函数调用。 - 即使关闭
upload_progress、禁用allow_url_include,CVE-2026-109619 仍可通过其他扩展(如 mbstring、xmlrpc)残留状态触发。 - PHP 8.2.19 已无安全补丁支持路径:官方只修复到 8.2.20,且 8.2 分支将在 2027 年 11 月终止维护,继续使用等于主动维持攻击面。
真正卡住风险的节点,从来不是某条配置开关,而是进程启动那一刻加载的那版 php-cgi.exe 二进制本身。



















