PHP CGI Windows平台远程代码执行漏洞 CVE-2024-4577

admin 2024年6月8日23:09:49评论65 views字数 2199阅读7分19秒阅读模式

总有些事情让你周末忙个不停......昨天爆出的PHP 漏洞:CVE-2024-4577,漏洞评分高达 9.8 分(CVSSv3),虽然实际影响范围可能不大,但由于漏洞实在太容易利用而不可掉以轻心。

PHP CGI Windows平台远程代码执行漏洞 CVE-2024-4577

笔者: 国际认证信息系统审计师(CISA)

软考系统分析师

软件工程硕士

话说我仿佛听到有同学说,让安全运维服务外包方搞定就行。

但甲方自己是否也应该核实一下,安服那边是否真搞定了?

一、防御方法

1、如果在用的是 PHP 8.1~8.3,升级 PHP 版本到最新版 8.3.8、8.2.20 或 8.1.29。

2、如果在用的是 PHP 8.0 及更低版本,迁移到 LINUX 平台 或升级信息系统代码兼容 PHP 8.1 及以上版本。

3、设置 WAF 设备规则,拦截包含有如下字符串的URL,但不排除会有拦截过头的负面作用或后续被再次绕过:

%ad
allow_url_include
auto_prepend_file

4、设置 Apache 通过 Rewrite 规则拦截,仅对简中、繁中及日文环境有效,其他语言环境尚不确定,且同样有可能是拦截过头和被再次绕过:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]

5、对于 XAMPP 使用者,修改 Apache 配置文件,把php-cgi的设置即例如

ScriptAlias /php-cgi/ "C:/xampp/php/" 

注释掉。

注意:由于该漏洞属于 PHP 本身,因此 HTMLPurifier 之类的基于 PHP 本身运行的过滤拦截手段无效。

6、重构信息系统,从PHP CGI架构迁移到 Mod-PHP 之类的新执行方式。

二、漏洞细节

漏洞类型:代码注入

漏洞评价:容易利用,严重威胁。

漏洞具体影响范围

PHP 8.3 < 8.3.8,PHP 8.2 < 8.2.20,PHP 8.1 < 8.1.29 以及 PHP 8.0、PHP 7.X和PHP 5.X等更低版本的PHP全部受影响。

利用条件

1、Windows 环境,启用了 PHP CGI 模式,即 Apache 的配置包含了:

AddHandler cgi-script .php
Action cgi-script "/cgi-bin/php-cgi.exe"

或者:

<FilesMatch ".php$">
    SetHandler application/x-httpd-php-cgi
</FilesMatch>
Action application/x-httpd-php-cgi "/php-cgi/php-cgi.exe"

2、Windows 环境,未启用 PHP CGI 模式,但 PHP 执行程序暴露在 WEB 可访问的目录内,典型如 XAMPP 开发环境的默认设定。具体包括:

把 php.exe 或者 php-cgi.exe 复制到了 Apache 的 cgi-bin 目录中;或者在 Apache 的配置中用 ScriptAlias 暴露了 PHP 的安装目录,比如:

ScriptAlias /php-cgi/ "C:/xampp/php/"

PHP CGI Windows平台远程代码执行漏洞 CVE-2024-4577

(PHP-CGI 模式早应该淘汰和禁用)

三、漏洞原理

由于 WINDOWS 环境下对字符集编码的处理存在“最佳适合”机制而导致在字符集编码转换过程出现歧义,传入的参数因为错误转换后转为可执行的代码。

所谓最佳适合机制,是指在 Unicode(UTF-16)字符和 SBCS/DBCS 单/双字节字符集之间进行字符转换时的一种匹配机制。

现在的 Windows 系统内默认使用 Unicode 字符集,具体为 UTF-16 即固定用两字节(16位)表示一个字符的方式。但中日韩CJK环境下,Windows 需要保留对过往基于单字节 ASCII 字符集(或称为SBCS)扩充得到的双字节 DBCS 字符集的兼容性,并支持在 Unicode 和 SBCS/DBCS 之间进行转换。

关键在于,在进行字符集转换时,Windows 会根据预设的转换关系,把它认为是双字节的 UTF-16 字符按匹配表直接转换为单字节也即 ASCII 字符集的字符。

于是,它就会把 %ad 被URL转义为UTF-16 字符后,再转换为“-”(减号)。从而导致传入的参数被错误地转义,PHP 解析器就不再对参数的后续内容进行解析。

经过进一步利用(比如 allow_url_include、auto_prepend_file 等,参见各种 POC 代码),就可以实现直接执行从参数传入的任意PHP程序代码。

PHP CGI Windows平台远程代码执行漏洞 CVE-2024-4577

(大约就是这样)

注意对于运行简体中文(代码页936)、繁体中文(代码页950)和日文(代码页932)的 WINDOWS 环境已经验证漏洞可被有效利用,其他语言环境也同样可能被利用。

CVE-2024-4577 实际是十多年前的 CVE-2012-1823 的绕过补丁,当时影响的版本是 PHP 5.13.12 和  PHP 5.4.2,是在 2012 年的一次 CTF(夺旗)比赛事件中发现的。实际上该漏洞被认为是已经不为人知地存在了至少8年。

四、漏洞利用现状

由于漏洞实在太容易被理解,从昨天即6月7日开始,Shadowserver Foundation 等安全组织已经发现和拦截到基于 CVE-2024-4577 的攻击试探,其他安全研究员也陆续在社交媒体和 GITHUB 上发布各种 POC 概念验证代码,我这里就不搬运了。

 

原文始发于微信公众号(wavecn):周末补漏洞:PHP CGI Windows平台远程代码执行漏洞 CVE-2024-4577

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月8日23:09:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PHP CGI Windows平台远程代码执行漏洞 CVE-2024-4577https://cn-sec.com/archives/2831983.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息