Apache Struts 2 の脆弱性 S2-061(CVE-2020-17530)PoC 検証
2020 年 12 月 8 日に Apache Struts 2 の脆弱性 S2-061(CVE-2020-17530)が公開されました。
影響としては、Struts 2.5.25 までのバージョンで OGNL 式の二重評価によってリモートコード実行(RCE)が引き起こされる恐れがあります。
また、既に PoC(攻撃)コードが公開されていますので、Apache Struts 2 を利用されている方は 2.5.26 へアップデートを行うことをお勧めします。
Security Bulletins S2-061
https://cwiki.apache.org/confluence/display/WW/S2-061
yamory では、PoC コードの検証を行い悪用可能であることも確認しました。
脆弱性を悪用した攻撃の仕組み
検証環境
今回は以下のような環境で検証を行いました。
ベースイメージ : maven:3.6.3-jdk-8
Apache Struts : 2.5.25
Apache Commons Collections : 3.2.2
Jetty Maven Plugin : 9.4.31.v20200723
検証結果
PoC コードを利用して cat /etc/passwd の実行を試みたところ、以下のような実行結果を得ることができました。
実行結果から PoC コードを利用して任意のコード実行を再現できたことが確認できました。
検証では cat /etc/passwd を対象ウェブアプリ上で実行させていますが、この部分を任意のものに変更して実行させることができます。
また今回検証を行った PoC コードに関しては、Apache Commons Collections を利用するためクラスパスに Apache Commons Collections を含む必要があります。
対策
Apache Software Foundation より以下の対策が推奨されています。
- 信頼できないユーザー入力の強制 OGNL 評価を避ける
- Struts 2.5.26 へアップデートする
Web アプリケーションファイアウォール(WAF)によっては S2-061(CVE-2020-17530)に対応しているものもあり、リスクを軽減することもできます。
ご利用の WAF が対応しているか確認し、早めに上記の対策を行うことをお勧めします。
脆弱性に関する参考情報
脆弱性の報告者である @pwntester(Alvaro Muñoz)氏による脆弱性の詳細な説明が以下のページにて公開されています。
GHSL-2020-205 : Remote Code Execution in Apache Struts 2 - S2-061 - CVE-2020-17530
3 つの Issue という形で、JSP タグ、FreeMarker タグ、Velocity タグの今回の問題点について書かれています。
どこで複数回の OGNL 式の評価がされてしまっていたのか、過去の修正が不完全だったことについても書かれています。
さいごに
Apache Struts の脆弱性を含め、自身が利用しているソフトウェアに脆弱性が報告されていないかどうかは常に把握しておくことが大切です。
利用しているソフトウェアとそのバージョンは一覧化をしておき、日常的に情報を収集することをおすすめします。
さいごになりますが yamory は、効率良く脆弱性の管理と対応を行うことができる脆弱性管理ツールとなっております。
パッケージ管理システムで管理されているライブラリの脆弱性を自動で検出し、対応優先順位付けするため、脆弱性を一元管理することができます。
無料でトライアルもできますので、ぜひ一度お試しください。
また、yamory ではセキュリティに関するイベントを随時開催中です。
今月は、12 月 24 日(木)16:00 〜 17:30 に「エンタープライズアジャイル開発における品質管理とセキュリティ対策を yamory で考える」を開催します。
ご興味のある方はぜひご参加ください。