近期报告的一个漏洞,编号为CVE-2019-11043,可能会影响使用PHP‑FPM执行PHP页面的网站。由于NGINX没有进程内PHP运行时,因此使用NGINX的网站通常会使用PHP‑FPM。NGINX会充当应用服务器和PHP‑FPM等进程管理器的反向代理。
该漏洞存在于PHP‑FPM本身,而非NGINX,因此唯一能够确保解决该漏洞的方法是将所用PHP版本升级到以下已修复版本(或更高版本):PHP 7.1.33、PHP 7.2.24或PHP 7.3.11。
该漏洞的性质是什么?
NGINX使用FastCGI协议与PHP‑FPM通信。每条FastCGI消息都包含一组环境变量。其中一个环境变量PATH_INFO由其他请求参数派生而来。如果其值意外为空,最终可能导致PHP‑FPM二进制文件发生内存损坏。攻击者可能会利用这种情况,使PHP‑FPM二进制文件在本地服务器上运行任意命令。
一种常见的NGINX配置可能会触发此漏洞。在该配置中,NGINX使用fastcgi_split_path_info指令中的正则表达式将请求URI拆分为两部分。触发此漏洞的一种方式是在请求URI中嵌入换行符(%0a)或回车符(%0d),导致正则表达式无法正确处理该请求URI。
缓解此漏洞
如上所述,解决此漏洞唯一确定有效的方法是将所用PHP版本升级到已修复的版本(或更高版本):PHP 7.1.33、PHP 7.2.24或PHP 7.3.11。
如果无法立即升级PHP二进制文件,可以采取以下几种部分缓解措施:
location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
try_files $uri =404;
#...
}- 请注意,此缓解措施仅在NGINX和PHP‑FPM位于同一主机并共享同一文档根目录时有效。PHP配置会因上游应用的需求而异。请测试此类更改,确认其不会影响您的应用。
- 使用F5 BIG-IP ASM(应用安全管理器)保护应用程序。现有的“命令执行”和“服务器端代码注入”特征集包含攻击特征,可阻止大多数发现和利用此PHP‑FPM漏洞的尝试。编者注:本博客发布后,F5安全团队又发布了一个专门针对该漏洞的特征。有关详细信息,请参阅F5 DevCentral。
- 添加一条ModSecurity规则,以阻止包含可疑字符
%0a或%0d的请求:
SecRule REQUEST_URI "@rx %0(a|A|d|D)" "id:1,phase:1,t:lowercase,deny"- 此解决方案在Wallarm 关于该漏洞的原始报告中有所说明;它可能会导致误报,攻击者仍可能找到其他方式利用该漏洞。
使用其他PHP进程管理器
无需依赖PHP‑FPM,您可以使用NGINX Unit运行PHP应用。NGINX Unit是一款高性能的开源应用服务器和进程管理器,除PHP外,还支持多种语言和框架。它可以根据负载自动扩缩PHP应用,并同时运行使用不同PHP运行时的应用。我们免费提供二进制文件、源代码和Docker镜像。
请参阅NGINX Unit文档,了解如何为WordPress配置和运行NGINX Unit。WordPress是一款广受欢迎、流量较高且由PHP驱动的应用程序。此部署利用了NGINX Unit 1.11.0及更高版本中对静态文件服务的支持。
关于作者

相关博客文章
NGINX Plus R26 正式发布
NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。
使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。
Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。
NGINX Plus R19 正式发布
NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。
NGINX现已正式加入F5
NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。
