Struts2の脆弱性(S2-045, CVE-2017-5638)
だいぶまとめられているので私が書くことはあまりなさそうな。
piyokangoさんのまとめ
Struts2の脆弱性 CVE-2017-5638 (S2-045)についてまとめてみた - piyolog
こちらに解析されている方がいて詳しい
Struts2のリモートコード実行可能脆弱性(CVE-2017-5638)を分析した - R42日記
ただ、
見ての通り、LocalizedTextUtilはもう使われていないのでセーフです。
はちょっとちがくて、修正後のコードのtextProviderの中でLocalizedTextUtilは呼ばれているけど、デフォルトのメッセージ「struts.messages.error.uploading」を取得していて、外部からの入力を利用していないのでセーフになる。
あと、WAFで防ぐ場合はContent-Typeヘッダに%{...}や${...}を含むものを弾けば良いかな。この部分がOGNL式として解釈されるので。PoCは%{...}のものが多いけども、コード的には両方必要。
(追記) Content-Typeについてだけ書いたが、S2-046の件もあるので、Content-DispositionやContent-Lengthをチェックする必要もある
ドキュメントには${...}しか書いていないようだけども。
LocalizedTextUtil (Struts 2 Core 2.5-BETA1 API)
If a message is found, it will also be interpolated. Anything within ${...} will be treated as an OGNL expression and evaluated as such.