てきとうなメモ

本の感想とか技術メモとか

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.