技術部の津野田です。
先日、Apache Struts2の脆弱性S2-037が公開されました。
https://struts.apache.org/docs/s2-037.html
このような危険度の高い脆弱性が公開された場合に、当社では独自に検証を行い再現性の確認を行っています。
この検証作業には、要件を満たしたやられ環境を用意する必要があります。
そんなときにも役立つのがDockerです。
今回はDockerを利用して、S2-037の検証に利用可能なやられ環境を手軽に構築するための手順を案内します。
はじめに
別途、Dockerのセットアップ作業が必要です。
まだの方は、セットアップしたうえで次の構築手順に進んでください。
本稿では、セットアップ手順については割愛します。
S2-037やられ環境の構築手順
早速手順の紹介に移りましょう!
なお、Dockerコンテナ内ではありますが脆弱な環境を構築しているので、構築作業は攻撃される心配のない信頼できるネットワーク内で行ってください。
- まず脆弱性が内在するバージョンのStrutsのうち、サンプルアプリケーションが含まれるZIPファイルを用意します。
wget https://dist.apache.org/repos/dist/release/struts/2.3.28.1/struts-2.3.28.1-apps.zip
- 次にダウンロードしたZIPファイルを展開します。
unzip struts-2.3.28.1-apps.zip
- 次の内容でDockerfileを作成します。
FROM tomcat:7.0-jre8 ADD struts-2.3.28.1/apps/struts2-rest-showcase.war /usr/local/tomcat/webapps/ CMD ["catalina.sh", "run"]
- Dockerコンテナをビルドし、実行します。
docker build -t struts/s2_037 . docker run -it --rm -p 8080:8080 struts/s2_037
- ブラウザで以下のURLにアクセスし、「Orders」というタイトルの画面が閲覧できればやられ環境の構築は完了です。
http://localhost:8080/struts2-rest-showcase/
- 検証作業が終わったら、
Ctrl + C
でコンテナを終了させます。
終わりに
Dockerを利用することで、簡単にやられ環境が用意できることをおわかりいただけたかと思います。
例えば、異なるStrutsの脆弱性に対して検証が必要な場合には、ダウンロード対象のZIPファイルを変更し、Dockerfile内にあるwarファイルへのパスを変更するだけで対応できます。
サクッとやられ環境を用意することで、みなさまが本来の検証作業に多くの時間を割くことが出来る一助になれば幸いです。
おまけ
S2-037を使った攻撃が有効な環境下において、Strutsの最新バージョンである2.3.29へ更新することで、以下の画面が表示され攻撃が無効化されることを確認しました。