WAF記事ブログ 10-06-2017

2014年4月に見つかったApache Strutsの新たな脆弱性(S2-020等)

デジサート
このブログではウェブサイトやその上で動作しているウェブアプリケーションの脆弱性について紹介すると共に注意喚起をする目的でまとめられています。 今回は、2014年4月に発見されたApache Strutsの脆弱性について解説をしています。

概要

Apache Struts(以下、Strutsと表記)は、Java言語でWebアプリケーションを開発する際に用いられるアプリケーション・フレームワークです。Struts1は2013年4月5日にサポートが終了し、現在サポートされているバージョンはStruts2です。

Struts2は、OGNL (Object Graph Navigation Language)というJavaに似た式言語により簡潔な記述ができるように工夫されていますが、これまでしばしばOGNLにより意図しない操作が可能となる脆弱性が指摘されてきました。2014年3月にS2-020としてClassLoaderを操作される脆弱性が発見され、修正版が公開されましたが、この時点では重大な結果を招く攻撃手法が知られていませんでした。しかし、2014年4月16日に、中国のWebサイトに具体的な攻撃コードが掲載されていることが分かり、緊急性の高い脆弱性に昇格しました。

また、既にサポートが終了しているStruts1についても、類似の攻撃方法により攻撃が可能であることが発見され、CVE-2014-0114と識別されています。

攻撃のイメージと影響

中国のWebサイトで発見されたStruts2の脆弱性S2-020に対する攻撃手順の一つを紹介します。一部手順を省略しています。
  • ClassLoader操作により、アクセスログの出力先をWebの公開ディレクトリに変更する
  • 同様の方法で、アクセスログのファイル拡張子をjspに変更する
  • URL内に攻撃者が実行したいJavaのプログラムを含めて、攻撃対象サイトにアクセスする
  • アクセスログにJavaのプログラムが含まれるので、jspとしてアクセスすると、アクセスログに埋めこまれたプログラムが実行される
このように、攻撃者の指定した任意のプログラムが攻撃対象サイト上で実行されます。

Struts1の脆弱性CVE-2014-0114についても、環境依存ではあるものの、最悪のケースではS2-020と同等の攻撃が可能と考えられています。

脆弱性による影響

この脆弱性による影響の例として下記がありますが、これらに限定されるわけではありません。
  • 秘密情報の漏洩
  • データの改ざん
  • 他サイトへの攻撃の踏み台

脆弱性の有無の確認方法

Strutsのバージョンを外部から確認することは困難であるため、Webサーバーにログインして下記のコマンドを実行することが確実な確認方法となります。

# find / -name 'struts2-core*.jar' 【表示の例】 /var/lib/tomcat7/webapps/struts2-blank/WEB-INF/lib/struts2-core-2.3.15.jar

上記の場合、Strutsのバージョンは2.3.15となります。S2-020の影響を避けるバージョンは、2.3.16.1以下です。また、Sturs1には対策バージョンはRed Hat LinuxV.5などに対して出されたパッチがあります。これらを適用していないすべてのバージョンのSturs1がCVE-2014-0114の影響を受ける可能性があります。

対策

Struts2を使っている場合、対策としてはStruts 2.3.16.2以上にする必要があります。本稿執筆時点でStrutsの最新バージョンは2.3.16.3です。最新のStrutsを導入することを推奨します。

Struts1を使っている場合、前述したRed Hat LinuxV.5のパッチが公開されています。該当のバージョンをご利用の場合、パッチの適用を行ってください。(2014年6月5日現在、その他のパッチは公開されていません。)

Strutsのバージョンアップが出来ない場合は、回避策の導入により、被害を軽減出来る場合があります。詳しくは、参考文献を参照ください。

なお、デジサートの「クラウド型WAF」では、StrutsのClassLoaderを操作される脆弱性(Struts1の問題を含む)に対してウェブサイトが攻撃を受けるのを防ぐことができます。

参考文献

Apache Struts2 の脆弱性対策について(CVE-2014-0094)(CVE-2014-0112)(CVE-2014-0113)

http://www.ipa.go.jp/security/ciadr/vul/20140417-struts.html

修正の上再掲しました。

UP NEXT
5 Min

特集記事

クラウド上で量子コンピュータをいかに保護するか

NIST PQC アルゴリズムに関する詳細な説明

従来の PKI がもたらす割高な機会損失