■Apache Struts2の脆弱性で起こりうる危険性

投稿者: | 2014年5月20日

昨今、注意喚起されたApache Struts2(以下Struts2)の脆弱性について
(CVE-2014-0094、CVE-2014-0112、CVE-2014-0113)
仕組みと起こりうる危険性を簡単に説明したいと思います。
まず、Struts2の仕組みについて簡単に説明を行いたいと思います。
Struts2とはJavaのWEBフレームワークの一つで、MVCデザインをベースに
作成されたフレームワークです。
MVCとはModel、View、Controllerの略でそれぞれ下記に分類しシステムを
デザインします。
・Model
データやビジネスロジックなど、システム根幹に関わるオブジェクトや処理です。
・View
データを表現するビューワ。
WEBの場合はHTMLなどのデザイン定義です。
・Controller
入出力を制御する処理です。
ユーザーからの入力を受け取り、Modelで処理を行い、Viewで出力します。
Struts2ではControllerに該当するものをActionクラスと呼びます。

20140520-apache_struts1.png

Struts2はユーザーがアクセスしてきたURLからActionクラスの選択をし、
処理やパラメータを割り振るという仕組みになっています。
今回の脆弱性はここに問題がありました。

20140520-apache_struts2.png

URLをActionクラスに割り振る際にStruts2はリフレクションという技術を使用しています。
リフレクションとは文字列を元に処理やパラメータを動的に処理する技術です。
Struts2ではリフレクション処理にURLから得た文字列を渡す際に特に検証を行わずに渡していたようです。
その結果、攻撃者がStruts2が管理する処理やパラメータを超えてJavaのプログラムを実行する事ができるようになっていました。

20140520-apachestruts3.png

その実行する事ができる処理の中にはファイルを操作する事のできるものや、OS自体を操作可能なシェルコマンドなどがあるので大変危険です。
ファイルを操作できればシステムのプログラム自体を抜き取られ、そこから個人情報を抜き取られる危険性があります。
シェルコマンドではサーバへのリモートを可能にする設定を行われてしまえば、サーバの乗っ取り自体が可能になってしまいます。
また、この脆弱性は同じようにリフレクションが使用されている仕組みには等しく起こりうる危険性があります。
Struts2だけでなく、Struts1の方にも同様の脆弱性が見つかりました。
疑わしいフレームワークやライブラリの使用、システム構築をしている場合には早急に対策を講じる事を強くオススメします。
また、開発者だけではなくStruts2などを使用して構築されているシステムを導入している方も開発元の情報は確認しましょう。
対策の詳しい方法は下記のページをご参考ください。
「Apache Struts において ClassLoader が操作可能な脆弱性」
システム構築のご依頼でしたらお気軽にご相談下さい。
弊社お問い合わせ