OpenResty CVE-2018-9230:WEB安全防护漏洞分析

需积分: 0 4 下载量 99 浏览量 更新于2024-08-05 收藏 434KB PDF 举报
"本文介绍了OpenResty的一个安全漏洞CVE-2018-9230,该漏洞允许远程攻击者绕过基于OpenResty的安全防护。文章详细讲述了漏洞的成因,环境搭建过程,以及漏洞的详细分析,包括uri参数获取、参数大小写的敏感性以及参数溢出的问题。" OpenResty是一个强大的Web平台,它结合了Nginx和Lua,提供高性能的网络应用开发能力。然而,这个平台在其早期版本中存在一个安全隐患,即CVE-2018-9230漏洞。此漏洞源于OpenResty在处理uri参数时,通过ngx.req.get_uri_args和ngx.req.get_post_args函数未能正确检查参数溢出,这可能导致安全防护机制被绕过,影响到使用OpenResty的多款开源Web应用程序防火墙(WAF)。 漏洞编号CVE-2018-9230涉及到的是参数处理机制的不足。OpenResty允许开发者通过上述两个函数获取HTTP请求中的uri和post参数。ngx.req.get_uri_args用于获取uri请求参数,而ngx.req.get_post_args则用来处理POST请求中的数据。在测试用例中,作者展示了如何通过lua脚本获取这些参数,并打印出来。这种功能本身并无问题,但在处理大量或异常参数时,如果没有适当的边界检查,就可能成为攻击的入口。 在讨论参数大小写敏感性时,作者指出,OpenResty会将不同大小写的相同参数视为独立的参数。例如,"id"、"Id"和"ID"会被视为三个不同的键。这一特性虽然在某些情况下可能是有用的,但同时也可能被利用,使得攻击者可以通过创建大量大小写变体的参数来绕过安全控制。 更进一步,作者通过构造一个包含100个参数的测试用例(如"a0"到"a99"),然后在第101个参数中插入SQL注入payload,来演示参数溢出的后果。如果OpenResty没有正确限制接收的参数数量,那么超出限制的参数可能会被忽视,从而让恶意数据有机会进入系统,导致潜在的安全风险。 为了缓解这种漏洞,开发者应确保更新到OpenResty的最新安全版本,其中应该已经修复了这个问题。此外,对于使用旧版本OpenResty或者不能立即升级的用户,应该审查所有对ngx.req.get_uri_args和ngx.req.get_post_args的调用,添加参数数量检查和验证机制,防止恶意输入。同时,对参数大小写处理的策略也应当进行调整,避免因为大小写变异而导致的安全漏洞。