続・Apache Strtus 2 の脆弱性(S2-045・S2-046)について
前回に引き続き、Apache Struts2の脆弱性についてです。
色々と新しい情報が出てきたので改めて。
Apache Struts2 の Jakarta Multipart parser の脆弱性
影響を受けるバージョン
対策
・脆弱性修正バージョンへのアップデート
回避策
公式から提供されているパーサ修正のプライグインの適用
以前回避策とされていた内容ですが、
MultipartパーサーをJakarta以外の実装に切り替える対策も紹介されています。
⇒Jakarta Streamでも影響を受けることが判明
「Content-Type」に疑わしい値を含むリクエストを検証、破棄するサーブレットフィルタを実装する。
⇒Content-LengthとContent-Dispositionヘッダでも攻撃が可能なことが判明
ということで注意が必要です。
Content-LengthとContent-Dispositionを利用した新しい攻撃コードが公開されています(S2-046・CVE番号はS2-045と変わらずCVE-2017-5638)。
さらっと攻撃コードを試してみました。
・脆弱バージョン(Struts 2.5.10)
・修正済みバージョン(Struts 2.5.10.1)
コマンドが実行されています。
パケットの内容を見るとこんな感じです。
Content-Lengthに大きい値を入れてエラーを起こし、Content-Dispositionのコードを実行します。コード実行のメカニズムはS2-045と変わらないですね。
影響範囲も同じですが、S2-045を特定の回避策をとっていた場合影響を受けるかもしれません。
やはり脆弱性対応はバージョンアップが基本ですね。
Strutsから今回の脆弱性を緩和するためのPluginも出ています。試してみたかったのですが、ビルドする環境を作るのが面倒になってやめました。
バージョンアップできない方は試してみてください。
Strutsを狙った攻撃ですが、最近立てていたWebハニーポットのGlastopfにも攻撃が来ていました。以下のようなものです。
S2-045の攻撃です。見たときはS2-045とS2-046の複合的な攻撃かと思いましたが、そうではないようです。POSTの中に攻撃コードがそのまま入っていますが、なにか意味があるんですかね……。
実行するとnMaskという文字が出力されます。
IP直打ちで「/」直下への攻撃ということで無差別のスキャンだとは思います(そもそもこのハニーポット、検索エンジンのインデックスなどもしてないですし)。