8月3日,互联网安全公司Imperva公布了HTTP/2协议中存在四个潜在的安全漏洞,并发布了一份详细的报告,针对这些漏洞对多台Web服务器进行了评估。
如表所示(来自 Imperva 报告第 19 页),NGINX 1.9.9 在 Imperva 的测试中表现相对较好,并且不受四个潜在漏洞中的三个的影响。 尝试利用剩余的漏洞“Slow Read”导致 NGINX 资源泄漏,并最终导致针对 HTTP/2 服务的拒绝服务攻击。
该故障已报告给 NGINX,并在 NGINX 1.9.12 和 NGINX Plus R9 版本中得到迅速解决。 我们很高兴地确认,NGINX 软件的当前版本(NGINX Plus、NGINX 开源“主线”或 NGINX 开源“稳定版”)均不会受到 Imperva 描述的任何潜在攻击。
如果您已实现 HTTP/2 并且正在使用早于 NGINX 1.9.12 或 NGINX Plus R9 的软件版本,请更新您的软件。 HTTP/2 是一种复杂且相对较新的协议,因此始终运行最新的软件版本是明智的。
我们建议您查看我们针对调整 NGINX 和 NGINX Plus 的最佳实践。 默认 Linux 配置中的调整通常非常保守,更改一些参数可以增加 NGINX 或 NGINX Plus 系统的容量。
截至 2016 年 8 月,大约 9% 的网站正在使用 HTTP/2,其中包括 FaceBook、Google 和 Wikipedia 等非常受欢迎的网站。 使用 NGINX 和 NGINX Plus 的内容分发网络 (CDN) 提供商通常将 HTTP/2 作为其产品的一部分。
HTTP/2 的复杂设计意味着研究人员可以探索许多可能的途径来寻找设计或实施上的弱点。 Imperva 报告描述了 HTTP/2 中的四个潜在漏洞:
nghttpd
1.7.0 之前的版本和 Apache HTTP Server 2.4.18 及更早的版本。 报告指出,该漏洞已在nghttpd
1.7.0 中修复,“作为更常见的内存清理问题(CVE-2015-8659)的一部分”。 NVD 列表为(CVE-2015-8659) 。nghttpd
版本以及2.0.2 和 1.12.10 之前的 Wireshark版本。 NVD 列表为CVE-2016-2525 ; CVE-2016-1544列表标记为保留,不包含任何信息。当 Imperva 测试各种 Web 服务器以查看它们是否存在漏洞时,他们的“慢读”测试的变体暴露了 NGINX 和 NGINX Plus 中的资源泄漏错误。 这种资源泄漏最终导致拒绝服务。
NGINX 和 NGINX Plus 通常不易受到“慢读”攻击(通常称为Slowloris )。 Imperva 的测试用例帮助我们隔离了之前报告的资源泄漏错误。 然后,我们通过添加额外的超时和保护来解决这个错误情况,以确保 HTTP/2 资源被正确关闭和释放,并且我们能够验证这些措施是否有效。
我们强烈建议升级到最新版本的 NGINX 和 NGINX Plus,特别是如果您已经实现 HTTP/2 并且正在使用 NGINX 1.9.11 或更早版本,或者 NGINX Plus R8 或更早版本。 Imperva 测试用例暴露的资源泄漏错误在 NGINX 1.9.12 及更高版本或 NGINX Plus R9 及更高版本中没有出现。
NGINX 和 NGINX Plus 提供了有效的方法来克服 Imperva 报告中描述的相关漏洞,并且升级到任一产品的最新版本都可以完全消除该漏洞。
为了总体上降低您网站的漏洞,我们还建议您采取我们在缓解 DDoS 攻击的文章中概述的措施,包括:
limit_req
指令)limit_conn
指令)如果您有任何疑问,请评论此文章 - 或者,如果您是 NGINX Plus 订阅者,请随时联系我们的支持团队寻求帮助。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”