PHP CGI参数注入误差(CVE-2024-4577) 剖析

宣布时间 2024-06-08

一、误差形貌


2024年6月6日 ,PHP官方宣布了多个新版本 ,其中都包括对编号为CVE-2024-4577的清静误差的修复更新。该误差是PHP CGI的参数注入误差 ,是对CVE-2012-1823误差的修复绕过。


该误差爆发的缘故原由是:在PHP CGI模式下 ,未准确处置惩罚Windows系统中的“Best-Fit Mapping”特征 ,导致简体中文、繁体中文、日文或其他受影响语言情形将某些字符过失的识别成了'-'。攻击者可通过引入恶意参数实现恣意代码执行。


二、误差复现


如下图所示:


图片1.png


三、误差剖析


CVE-2012-1823补丁的修复步伐是 ,PHP处置惩罚转达进来的字符串时 ,在跳过前面空缺符后 ,判断第一位是否是'-';若是是'-' ,就差池后面的字符举行参数剖析 ,好比-d,-s,-c等参数。


PHP官方的commit如下图所示:


图片2.png


可以看到 ,当运行系统情形为Windows时 ,PHP挪用WideCharToMultiByte函数来增强对宽字符的判断。若是转换后的字符为'-' ,则将skip_getopt置为1 ,使得后续就不会对传入的字符串举行参数剖析。

那么 ,什么样的宽字符能够转换后酿成'-' ,从而绕过之前的修复呢?


以受影响的简体中文、繁体中文、日文举例 ,他们对应的Windows 代码页划分是936、950、932。其中都有将0x00ad映射为0x002d的操作 ,如下图所示:


图片3.png


图片4.png


图片5.png


因此通过引入0x00ad即可替换0x002d ,实现参数注入来执行恣意代码。


四、总结


CVE-2024-4577误差使用简朴 ,危害严重。特殊在某些对Apache、PHP举行集成安排和管理的盛行软件中 ,若是未准确设置php cgi ,即可造成严重危害。



参考链接:


PHP官方commit

https://github.com/php/php-src/commit/4dd9a36c165974c84c4217aa41849b70a9fc19c9

DEVCORE的误差转达

https://devco.re/blog/2024/06/06/security-alert-cve-2024-4577-php-cgi-argument-injection-vulnerability/