不安全的反序列化_Apache Tomcat Session反序列化RCE漏洞安全通告(CVE20209484)

48259e7ad61a9b7b399d44d666b4ef9c.png

漏洞综述

漏洞背景

Apache Tomcat是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,是目前比较流行的Web 应用服务器。

近日,新华三安全攻防团队监测Apache tomcat官方发布通告修复了一个源于持久化Session的远程代码执行漏洞(CVE-2020-9484),远程攻击者在特定条件下可能利用此漏洞执行任意代码。

漏洞原理

当部署tomcat时配置启用了session持久化功能FileStore,且同时存在任意文件上传漏洞,攻击者可以上传指定后缀(.session)的文件,利用可能存在的gadget反序列化,将能造成服务端远程代码执行。原因在于FileStore类读取文件时,使用了JSESSIONID的名称,没有过滤目录穿越符号,导致攻击者可以穿越到任意目录去读取后缀为.session的序列化数据进行反序列化。

漏洞复现

搭建tomcat/7.0.92+JDK1.8.11漏洞环境。部署struts2应用且存在commons-collections4包的gadget。生成序列化文件poc.session复制到tomcat目录下。

1f1483a012b13fad92f743c05b99a701.png

客户端发起恶意请求,成功反序列化执行poc.session恶意文件代码。

e5e9e8e09a82312c1f40cfe6baf345c9.png

影响范围

受影响版本

Apache tomcat 10.x <= 10.0.0-M4

Apache tomcat 9.x <= 9.0.34

Apache tomcat 8.5.x <= 8.5.54

Apache tomcat 7.x <= 7.0.103

处置方法

官方补丁

目前厂商已发布升级补丁以修复漏洞,建议尽快安装修复:

https://tomcat.apache.org/security.html

新华三解决方案

新华三IPS规则库1.0.96版本将支持对该漏洞的识别,建议关注新华三官网及时升级版本并使能相关规则。

临时解决方案

禁止使用tomcat的session持久化功能FileStore。

声明

本安全公告仅用来描述可能存在的安全问题,未经新华三大安全允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,新华三大安全以及安全公告作者不为此承担任何责任。新华三大安全拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。

ba06171887b0808601dc392905c3738a.gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
9 月 19 日,腾讯云安全中心监测到  Apache Tomcat 修复了2个严重级别的漏洞, 分别为: 信息泄露漏洞(CVE-2017-12616)、远程代码执行漏洞(CVE-2017-12615),在某些场景下,攻击者将分别能通过这两个漏洞,获取用户服务器上 JSP 文件的源代码,或是通过精心构造的攻击请求,向用户服务器上传恶意 JSP 文件,通过上传的 JSP 文件 ,可在用户服务器上执行任意代码。      云鼎实验室通过对于漏洞描述,搭建漏洞环境,并对其进行复现。此漏洞为高危漏洞,即使是非默认配置,但是一旦存在漏洞,那么攻击者可以成功上传 webshell,并控制服务器。 复现 根据描述,在 Windows 服务器下,将 readonly 参数设置为 false 时,即可通过 PUT 方式创建一个 JSP 文件,并可以执行任意代码。    通过阅读 conf/web.xml 文件,可以发现:   默认 readonly 为 true,当 readonly 设置为 false 时,可以通过 PUT / DELETE 进行文件操控。   配置 readonly 为 false: 启动 Tomcat,利用 PUT 请求创建文件: 提示 404。通过描述中的 Windows 受影响,可以结合 Windows 的特性。其一是 NTFS 文件流,其二是文件名的相关限制(如 Windows 中文件名不能以空格结尾)来绕过限制:  访问发现可以正常输出:  分析 Tomcat 的 Servlet 是在 conf/web.xml 配置的,通过配置文件可知,当后缀名为 .jsp 和 .jspx 的时候,是通过JspServlet处理请求的:   可以得知,“1.jsp ”(末尾有一个和空格)并不能匹配到 JspServlet,而是会交由DefaultServlet去处理。当处理 PUT 请求时: 会调用resources.rebind: dirContext 为FileDirContext: 调用 rebind创建文件: 又由于 Windows 不允许“ ”作为文件名结尾,所以会创建一个 .jsp 文件,导致代码执行。 Bypass 分析 然而,经过黑盒测试,当 PUT 地址为/1.jsp/时,仍然会创建 JSP,会影响 Linux 和 Windows 服务器,并且 Bypass 了之前的补丁,分析如下。  在进入 bind 函数时,会声明一个 File 变量: 进入 File 后,会对 name 进行 normalize 最后得到的 path 就是没有最后 / 的 path 了: 影响  由于存在去掉最后的 / 的特性,那么这个漏洞自然影响 Linux 以及 Windows 版本。而且经过测试,这个漏洞影响全部的 Tomcat 版本,从 5.x 到 9.x 无不中枪。目前来说,最好的解决方式是将 conf/web.xml 中对于 DefaultServlet 的 readonly 设置为 true,才能防止漏洞
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值