继3月6日struts2中的漏洞S2-045之后,今天又爆发了一个漏洞。2 Struts2官方确认了该漏洞(S2-046),并将其评为高危漏洞。S2-046漏洞的举报人来自高通、dbappsecurity、杭安恒、HPE三家公司。
Struts2应用广泛,国内外大量厂商都在使用这个框架。
Struts2是一个基于MVC设计模式的Web应用框架,本质上相当于一个servlet。在MVC设计模式中,Struts2作为控制器来建立模型和视图之间的数据交互。Struts 2是Struts的下一代产品,是基于struts 1和WebWork技术的全新Struts 2框架。
漏洞分析
使用Jakarta插件处理文件上传可能导致远程代码执行漏洞。
使用恶意的Content-Disposition值或不适当的Content-Length标头可能会导致远程命令执行。该漏洞类似于S2-045(CVE-2017-5638),但使用不同的攻击媒介。
触发漏洞需要满足的条件:
jakartastreammultipart请求已打开。也就是说,Struts2需要通过Jakarta stream parser进行配置(不是默认的)。检查Struts2配置文件中的
根据Content-Length头的声明,上传的文件大小大于Struts2默认允许的2GB。
文件名称包含OGNL有效负载。
漏洞的危害
通过修改HTTP请求头中的Content-Length字段,使其大于Struts2允许的最大值(2GB),并修改Content-Disposition中的filename字段,攻击者可以构建恶意代码来利用此漏洞,在受影响的服务器上执行系统命令,并进一步完全控制服务器,从而导致拒绝服务、数据泄漏、网站篡改和其他影响。由于默认情况下启用了此漏洞利用所需的组件,因此该漏洞更加严重。
漏洞检测
测试以下列方式进行:
检查web目录/WEB-INF/lib/目录中的struts2-core-x.x.x.jar文件。如果x代表的版本号在2.3.5和2.3.31和2.5和2.5到2.5.10之间,则存在漏洞。
溶液
目前已经有人在网上公布了漏洞POC。为了保护您的资产,请按照以下方法及时修复漏洞。
S2-046PoC如下:
1.严格过滤Content-Type,filename中的内容,禁止ognl表达式的相关字段。
2.如果您使用基于Jakarta的文件上传多部分解析器,请将Apache Struts升级到2.3.32或2.5.10.1。
3.和前面的漏洞一样,也有相应的变通方法,即采用Mutipart parser的其他实现。Apache还提供了2个插件作为解决方案(通过链接了解:
https://github . com/Apache/struts-extras)——如果你使用的是Apache struts版本2 . 3 . 8–2 . 5 . 5或2 . 3 . 20–2 . 5 . 5,可以采用这个解决方案。
4.此外,您还可以从堆中删除文件上传***,定义自己的堆并将其设置为默认堆。这个解决方案对于Struts 2 . 5 . 8–2 . 5 . 10是有效的。
本文来自水中明月投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/498487.html