1.概要
Apache Struts2は、JAVAベースのウェブアプリケーション開発フレームワークであり、このセクションでは、そのフレームワークを使用するウェブアプリケーションで発生する可能性があるリモートコード実行(RCE)の脆弱性に関する分析結果を要約しています。
2.攻撃タイプ
このセクションでは、様々なApache Struts2 RCE脆弱性の中から、4つのCVEに対する攻撃タイプを分析します。
1)CVE-2017-9805
Apache Struts2のRESTプラグインは、XMLリクエストをシリアライズ/デシリアライズするためにXStreamプラグインを使用しています。デシリアライズは、ユーザー入力値の検証を行わずに実行されます。これにより、攻撃者はRESTプラグインが実行する任意のAPIにシリアル化された悪意のあるコードを送信することが可能です。
2)CVE-2017-12611
Apache Struts2は、HTMLを動的に生成するためにFreeMarkerというオープンソースのHTMLテンプレートエンジンを使用しています。FreeMarkerのページで固定(リテラル)または強制された値を表すタグを使用している場合、それらのタグ内の変数にリクエストパラメーターとしてアクセスし、OGNL式をインジェクトして悪意のあるコードを実行することが可能です。
3)CVE-2018-11776
Apache Struts2では、namespaceと呼ばれる内部アプリケーションの動作グループがあります。Webアプリケーションが名前空間を指定せずに動作する場合や/*のようなワイルドカード名前空間を使用する場合、Strutsが要求された名前空間を見つけられない場合、それをカスタム名前空間として評価し、OGNL式として実行する可能性があります。これは、悪意のあるコードを実行するために悪用される可能性があります。
4)CVE-2020-17530
CVE-2019-0230と同様に、この攻撃は、開発者がJSPページでタグ属性で%{}構文を使用してOGNL評価を強制する場合に発生します。Apache Struts2は、CVE-2019-0230の脆弱性をパッチするために、OGNL実行に関連するパッケージをブラックリストフィルタリングに追加しましたが、CVE-2020-17530では、org.apache.tomcatパッケージのインスタンスを使用してブラックリストを初期化することでOGNLコードを実行することができます。
3.応答
1)CVE-2017-9805
Apache Strutsをバージョン2.5.13 / 2.3.34またはそれ以降に更新してください。更新が不可能な場合、公式のStrutsの推奨事項は、脆弱性が発生するXMLの代わりにJSONのみを使用するようにstruts-plugin.xmlのデータ内容を変更することです。
当社のAIWAF製品は、この脆弱性を悪用する攻撃構文をパターンで検知します。
2)CVE-2017-12611
Apache Strutsをバージョン2.5.12 / 2.3.35またはそれ以降に更新してください。更新が不可能な場合、getterプロパティのみを読み取り専用プロパティとして初期化するか、FreeMarker自体の使用を避けてください。
当社のAIWAF製品は、この脆弱性を悪用する攻撃構文をパターンで検知します。
3)CVE-2018-11776
Apache Strutsをバージョン2.3.35 / 2.5.17またはそれ以降に更新してください。
当社のAIWAF製品は、この脆弱性を悪用する攻撃構文をパターンで検知します。
4)CVE-2020-17530
Apache Strutsをバージョン2.5.26またはそれ以降に更新してください。
当社のAIWAF製品は、この脆弱性を悪用する攻撃構文をパターンで検知します。
4.結論
Apache Struts2の脆弱性は常に発見され、更新が頻繁にリリースされています。そのため、定期的にApache Struts2のセキュリティを確認し、更新することが重要です。
当社のAIWAF製品では、Apache Struts2の脆弱性に対応するために多くのパターンを開発しており、Apache Struts2関連の脆弱性が発見されるたびに対応していく予定です。
5.参考文献
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9805
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-12611
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-11776
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-17530>