CVE-2019-11043:PHP-FPM远程代码执行漏洞

CVE-2019-11043是一个影响PHP-FPM(FastCGI进程管理器)的高危漏洞,允许攻击者通过精心构造的HTTP请求在目标服务器上执行任意代码。该漏洞源于PHP-FPM对PATH_INFO参数的处理缺陷,导致缓冲区溢出或内存损坏。

漏洞原理
当Nginx与PHP-FPM配合使用时,若配置中启用了fastcgi_split_path_info指令,攻击者可利用特制的URL(如/index.php/PHP_VALUE)注入恶意参数。通过操纵PHP_VALUE环境变量,攻击者能覆盖PHP的配置选项(如auto_prepend_file),最终实现远程代码执行。

影响版本

  • PHP 7.1.x(< 7.1.33)
  • PHP 7.2.x(< 7.2.24)
  • PHP 7.3.x(< 7.3.11)

修复方案
升级PHP至安全版本或应用以下缓解措施:

  1. 禁用fastcgi_split_path_info指令。
  2. 在Nginx配置中添加过滤规则,阻断包含PHP_VALUE的请求。
  3. 使用Web应用防火墙(WAF)拦截恶意流量。

漏洞验证PoC

curl -v "http://target.com/index.php/PHP_VALUE%0Aallow_url_include=1%0Aauto_prepend_file=php://input" -d "<?php system('id'); ?>"

CVE-2012-1823:PHP-CGI参数注入漏洞

CVE-2012-1823是PHP-CGI组件中的参数注入漏洞,允许攻击者通过查询字符串注入PHP配置选项,导致信息泄露或代码执行。

漏洞原理
当PHP以CGI模式运行时(如php-cgi -b 127.0.0.1:9000),未正确过滤查询字符串中的-d参数。攻击者可注入如-d allow_url_include=1等选项,操纵PHP行为。

影响版本

  • PHP 5.3.12之前的版本
  • PHP 5.4.2之前的版本

修复方案

  1. 升级PHP至5.3.12或5.4.2及以上版本。
  2. 避免直接暴露php-cgi服务到公网。
  3. 使用FastCGI协议替代传统CGI模式。

漏洞利用示例

curl "http://target.com/php-cgi.php?-d+allow_url_include%3D1+-d+auto_prepend_file%3Dphp://input" --data "<?php echo shell_exec('whoami'); ?>"

防护建议

通用防御措施

  • 定期更新PHP至最新稳定版本。
  • 禁用不必要的PHP功能(如allow_url_include)。
  • 限制Web服务器的文件解析权限,避免直接执行用户上传内容。

配置强化示例(Nginx)

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    # 禁止PATH_INFO传输
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    if ($fastcgi_script_name ~ \..*\/.*php) {
        return 403;
    }
}

代码层防护
在PHP初始化脚本中添加严格的环境变量过滤:

ini_set('open_basedir', __DIR__);
ini_set('disable_functions', 'exec,passthru,shell_exec');

通过理解漏洞原理、应用修复补丁及强化配置,可有效降低此类PHP漏洞的风险。

更多推荐