PHP-FPM 在特定 NGX 配置下远程代码执行漏洞修复
后知后觉 现有 1 评论

PHP-FPM 在特定 NGX 配置下存在远程代码执行漏洞(CVE-2019-11043)

描述

在 NGX 配置项存在 fastcgi_split_path_info 参数时在处理带有 %0a 的请求时遇到换行符 \n 会导致 PHP 的 PATH_INFO 参数为空,进而导致特定的攻击请求会修改 PHP-FPM 进程中的相关环境配置,在特殊配置情况下可导致远程代码执行漏洞。

实例

在类似以下配置字段时即存在漏洞

   location ~ [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
        fastcgi_pass   php:9000;
        ...
  }
}

因为 APACHE2 服务器 PATH_INFO 的支持度较完善,因此不存在此漏洞,请 PHP-FPM & NGX 用户排查此段配置。

修复

请更新至最新版源码进行重新编译(强烈建议),若无法进行重新编译/安装,可使用以下方式进行暂时封堵。

在每个 PHP 的判断 location 前添加以下一行配置

    rewrite ^(.*?)\n $1;  # 修复 CVE-2019-11043 漏洞(只添加此行即可!!!)
    location ~ \.php(/|$) {
        ...
       fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
    ...
    }
小贴士:在检测到存在 \n 时进行重写,清除参数。

测试

可按照 PHP 官网的讨论进行复测。

附录

参考链接

本文撰写于一年前,如出现图片失效或有任何问题,请在下方留言。博主看到后将及时修正,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。
  1. avatarImg Johnson

    这个貌似阿里云也提示了

    Chrome 78.0 Android Oreo
    IP 属地 未知