【漏洞处置SOP】PHP CGI代码注入漏洞(CVE-2024-4577)

【漏洞处置SOP】PHP CGI代码注入漏洞(CVE-2024-4577)

原创 just4fun 方桥安全漏洞防治中心 2025-04-30 10:02

01 SOP基本信息

  • SOP名称:
    PHP CGI代码注入漏洞(CVE-2024-4577)处置标准作业程序(SOP)

  • 版本:
    1.0

  • 发布日期:
    2025-04-08

  • 作者:just4fun

  • 审核人:
    T小组

  • 修订记录:

  • 初始版本:
    创建SOP

02 SOP的用途

本SOP旨在指导系统管理员安全、高效地处置 PHP CGI代码注入漏洞(CVE-2024-4577),确保在规定时间内完成漏洞修复并提交给安全部门验证,保障系统安全。

03 SOP的目标用户技能要求

  • 熟悉PHP语言、PHP程序的安装配置和管理

  • 了解基本的系统管理和更新操作

  • 具备基本的网络安全知识

04 漏洞详细信息

  • 漏洞名称:PHP CGI 代码注入漏洞(CVE-2024-4577)

  • CVE编号:CVE-2024-4577

  • 漏洞类型:远程代码执行(RCE)

  • 风险等级:高危

  • CVSS评分:9.8

  • 漏洞描述:在PHP 8.1.29之前的8.1.版本、8.2.20之前的8.2.版本和8.3.8之前的8.3.*版本中,当在Windows上使用Apache和PHP-CGI时,如果系统设置为使用某些代码页,则Windows可以使用“Best-Fit”行为来替换为Win32 API函数提供的命令行中的字符。PHP CGI模块可能会将这些字符误解为PHP选项,这可能会允许恶意用户将选项传递给正在运行的PHP二进制文件,从而泄露脚本的源代码,在服务器上运行任意PHP代码等。

  • 影响范围:

  • 8.1.0 <=  PHP  < 8.1.29

  • 8.2.0 <=  PHP < 8.2.20

  • 8.3.0 <=  PHP < 8.3.8

  • PHP 8.0、7.x、5.x等已停止维护的分支同样受影响。

  • XAMPP Windows版影响版本 <= 8.2.12

  • XAMPP windows版影响版本 <= 8.1.25

  • XAMPP Windows版影响版本 <= 8.0.30

漏洞利用需要同时满足以下条件:
– PHP运行在Window平台。

  • 以CGI模式运行的PHP环境。

  • 使用以下其中之一的语言系统:繁体中文、简体中文、日文。

05
漏洞处置方案

升级到安全版本:
– PHP >=  8.1.29

  • PHP >=  8.2.20

  • PHP >=  8.3.8

临时缓解方案:
– 对于使用 XAMPP for Windows 的用户:截至本文撰写时(2025/04/08),XAMPP 尚未针对此漏洞发布相应的更新文件。如果确认不需要 PHP CGI 功能,可以通过修改以下 Apache HTTP Server 配置来避免受到该漏洞的影响。

C:/xampp/apache/conf/extra/httpd-xampp.conf  # apache的安装目录配置文件找到相应的行:ScriptAlias /php-cgi/ "C:/xampp/php/"最前面加上”#”将其注释掉:# ScriptAlias /php-cgi/ "C:/xampp/php/"
C:/xampp/apache/conf/extra/httpd-xampp.conf  # apache的安装目录配置文件
找到相应的行:
ScriptAlias /php-cgi/ "C:/xampp/php/"
最前面加上”#”将其注释掉:
# ScriptAlias /php-cgi/ "C:/xampp/php/"

【注意事项】

  • 在应用补丁或升级版本之前,请确保进行充分的备份。

  • 遵循官方提供的安装和配置指南进行操作。

  • 在生产环境中升级前,最好在测试环境中先进行测试。

  • 修复漏洞前进行充分测试,以确保系统稳定性和安全性。

  • 不同版本系列尽量升级到本系列版本无漏洞的版本,尽量不要版本跨度太大,避免出现一些不兼容情况。

06 漏洞修补详细步骤

1. 识别漏洞:确认当前版本和配置存在漏洞(使用POC辅助验证)

以Windows Server 2016为例,IP地址为192.168.174.128,XAMPP版本为8.1.25,安装路径为 C:\xampp

首先检查是否安装了漏洞版本。打开XAMPP,控制台日志可以显示版本号为8.1.25为漏洞版本。

点击Shell ,输入php -v 
可以显示当前php的版本号8.1.25,为漏洞版本。

使用默认配置,点击Apache后面的Start按钮,启动Apache服务,默认服务地址为http://192.168.174.128/。

另一个页面http://192.168.174.128/dashboard/phpinfo.php可以看到当前php的信息。

接下来使用如下POC进行辅助漏洞验证,使用BurpSuite发送数据包,根据回显发现执行了dir 命令显示了目录下的文件,验证漏洞存在。

GET /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 HTTP/1.1Host: 192.168.174.128Connection: closeCache-Control: max-age=0sec-ch-ua: "Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"sec-ch-ua-mobile: ?0sec-ch-ua-platform: "Windows"Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7Sec-Fetch-Site: noneSec-Fetch-Mode: navigateSec-Fetch-User: ?1Sec-Fetch-Dest: documentAccept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Content-Length: 22<?php system("dir");?>
GET /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 HTTP/1.1
Host: 192.168.174.128
Connection: close
Cache-Control: max-age=0
sec-ch-ua: "Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Content-Length: 22

<?php system("dir");?>

2. 实施修复:目标是安装PHP的 安全版本8.1.29。

确认Windows版本:确认Windows系统是32位还是64位,可以在“我的电脑”或“此电脑”的属性中查看。

打开浏览器,访问PHP官网的Windows版本下载链接(https://windows.php.net/downloads/releases/archives/),下拉找到版本8.1.29,点击zip链接进行下载。

然后根据系统版本下载64位或32位的。因环境为64位系统,下载文件为php-8.1.29-Win32-vs16-x64.zip,将其放置到待修复环境中解压缩即可使用,存放目录为C:\Users\server\Desktop\php-8.1.29-Win32-vs16-x64。

接下来停止服务,点击Apache后面的Stop按钮。然后修改XAMPP中的PHP版本,点击Apache后面的Coinfig按钮,选择httpd-xampp.conf,打开此文件。

替换此文件中的PHP安装路径,例如将原来的C:/xampp/php/全部修改为C:/Users/server/Desktop/php-8.1.29-Win32-vs16-x64/,保存配置文件。

3. 验证修复:PHP版本号已经升级到了8.1.29

点击Apache后面的Start按钮,再次启动Apache服务。

访问http://192.168.174.128/dashboard/phpinfo.php,可以看到PHP版本号已经升级到了8.1.29。

再次使用POC进行验证,发现已经无法执行命令了,证明漏洞已经修复。

4. 参考链接

[1] 
CVE-2024-4577 PHP CGI 远程代码执行漏洞分析

[2] 
CVE-2024-4577-NVD

  • End –

欢迎投稿或扫码添加运营助手获取附件

图片

欢迎关注公众号