「都税クレジットカードお支払サイト」が不正アクセスを受け、67万6290件のクレジットカード情報(内61万4629件はメールアドレスとセット)が流出したApache Struts Jakarta Multipart parser Remote Code Executionについて今回は書いていきます。
カード番号どころかセキュリティコードや有効期限まで漏れている可能性があるとの事で利用した人はまずカードを止めた方が良いと言えるだろう。
結論から言うと、ファイルアップロード時にContent-Typeヘッダのパースに失敗した際、 エラーメッセージの構築でcom.opensymphony.xwork2.util.LocalizedTextUtil.findTextを使用していることが原因です。以下のバージョンが影響をうけます
Apache Struts 2.3.5から2.3.31までのバージョン
Apache Struts 2.5から2.5.10までのバージョン
確認方法
※通常サービス以外のすべてのアクセスは良かれと思っていても違法行為です。すべて自分が許可を得た環境と言い切れる場合でのみ検証してみてください。
Content-Type: %{#context[‘com.opensymphony.xwork2.dispatcher.HttpServletResponse’].addHeader(‘X-Qualys-Struts’,3195*5088)}.multipart/form-data に対して以下を返す時点で脆弱です。(3195*5088=16256160) X-Qualys-Struts :16256160
根本対策:最新版struts-2.5.10.1にアップデート
保険対策:以下条件でWAFなどでフィルタリング
request.path EQUAL "/struts2-showcase/index.action" request.header "Content-Type" NOT.EQUAL "multipart / form-data"
・PoCはこんな感じもOKです。
Content-Type: %{(#test='multipart/form-data').(new java.lang.String(“Hello World”))}
この記事を機に見直しのきっかけになれば幸いです。
以上です。お役にたてれば幸いです。