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/