CVE-2017-5638 - 脆弱性調査レポート

  • 本文プリント

Apache Struts 2 のマルチパーサー「jakarta」および「jakarta-stream」の脆弱性により、リモートから任意のコードが実行可能な脆弱性(CVE-2017-5638)(S2-046)に関する調査レポート

  • 2017年3月28日

概要

Apache Struts 2に、リモートより任意のコードが実行可能な脆弱性(CVE-2017-5638)(S2-046)及び、その脆弱性を利用する攻撃コードが発見されました。この脆弱性は、前回公開しましたレポート、「Apache Struts 2 のマルチパーサー「jakarta」の脆弱性により、リモートから任意のコードが実行可能な脆弱性(CVE-2017-5638)(S2-045)に関する調査レポート」の脆弱性に関連しており、「S2-045」と同じ種類の脆弱性が別のパラメータ処理時にも存在しているもので、新たな脆弱性識別子「S2-046」が採番されました。

また本脆弱性は、マルチパーサー「jakarta」のみではなく、「S2-045」の脆弱性情報公開当初、開発元より同脆弱性の対策案としてアナウンスされた、別のマルチパーサーへ切り替える案にて、代替マルチパーサーとして提示されたマルチパーサー「jakarta-stream」を使用している場合にも影響を受けます。
この脆弱性を利用した攻撃が成立した場合、リモートからApache Struts2がインストールされたWebアプリケーションサーバーの実行権限で任意のコードを実行される危険性があります。

本レポート作成(2017年3月28日)時点において、既にApache Software Foundationよりこの脆弱性が修正されたバージョンがリリースされております。しかしながら、「S2-045」の対策として、マルチパーサーを「jakarta-stream」に変更する案を採用し、脆弱性が残存している状態で運用されているシステムに対しての注意喚起の意味込めて、今回、この脆弱性(CVE-2017-5638)(S2-046)の再現性について検証を行いました。
なお、「S2-045」の脆弱性対策として、脆弱性が修正されたバージョンへアップグレードした場合には、本脆弱性の影響は受けません。

影響を受ける可能性があるシステム

  • Apache Struts 2.3.5から2.3.31までのバージョン
  • Apache Struts 2.5から2.5.10までのバージョン

対策案

本レポート作成(2017年3月28日)時点において、Apache Software Foundationより、この脆弱性を修正するバージョンがリリースされています。当該脆弱性が修正されたバージョンへとアップグレードしていただくことを推奨いたします。
ただちにアップグレードすることが困難である場合、本脆弱性を解消したプラグイン「Secure Jakarta Multipart parser plugin」または「Secure Jakarta Stream Multipart parser plugin」を使用することにより、「S2-045」および「S2-046」の問題を回避することが可能です。なお、各プラグインは以下のApache Strutsのバージョンで使用可能です。

  • 「Secure Jakarta Multipart parser plugin」
    • Apache Struts 2.3.8から2.5.5までのバージョン
  • 「Secure Jakarta Stream Multipart parser plugin」
    • Apache Struts 2.3.20から2.5.5までのバージョン
プラグインの設定手順は以下の通りです。
なお、下記は弊社環境(Apache Struts 2.3.31を使用)の場合での設定例です。
詳細は以下の開発元のWebサイトをご確認ください。
GitHub - apache/struts-extras

「Secure Jakarta Multipart parser plugin」を使用する場合

  1. 開発元より提供されている「Secure Jakarta Multipart parser plugin」のプラグインファイルを/WEB-INF/lib配下に配置します。

    struts.xmlに追記する内容

  2. struts.xmlに以下の内容を追記します。

    Webアプリケーションサーバーの再起動

  3. Webアプリケーションサーバーを再起動します。

「Secure Jakarta Stream Multipart parser plugin」を
使用する場合

  1. 開発元より提供されている「Secure Jakarta Stream Multipart parser plugin」の
    プラグインファイルを/WEB-INF/lib配下に配置します。

    プラグインファイルを/WEB-INF/lib配下に配置

  2. struts.xmlに以下の内容を追記します。

    ruts.xmlに追記する内容

  3. Webアプリケーションサーバーを再起動します。

また他の方法として、デフォルトで定義されているインターセプター(※)「fileUpload」を使用せず、独自にカスタマイズしたインターセプタースタックを定義、使用することでも問題の回避は可能です。
同対策はApache Struts 2.5.8 から 2.5.10までのバージョンでのみ有効です。
※ Actionが呼び出される前後に実行される処理

インターセプターの設定手順は以下の通りです。なお、下記は弊社環境(Apache Struts 2.5.8を使用)の場合での設定例です。詳細は以下開発元のWebサイトをご確認ください。
S2-046 - Apache Struts 2 Documentation - Apache Software Foundation

  1. struts.xmlに以下の内容を追記します。

    プラグインファイルを配下に配置


  2. Webアプリケーションサーバーを再起動します。

Apache Strutsのバージョン確認方法

Apache Struts 2がインストールされたWebアプリケーションサーバーにて、/WEB-INF以下にある.jarファイルを検索します。検索結果として表示されるstruts2-core-2.x.x.jarの「2.x.x」の部分が、バージョン情報になります。 また、struts2-core-2.x.x.jarファイルに含まれるMANIFEST.MFについて、Bundle-Versionから始まる行を参照することでも、Apache Struts 2バージョン情報を確認することが可能です。

CentOS7の場合での実行例

CentOS7の場合での実行例


参考サイト

検証概要

攻撃者は、ターゲットシステムで動作するWebアプリケーションサーバーにインストールされたApache Struts 2へ細工を行ったリクエストを送信することにより、このターゲットシステムにてWebアプリケーションサーバーの実行権限で任意のコマンドが実行可能となります。

検証ターゲットシステム

CentOS7.0 + Tomcat7.0.69 + Apache Struts 2.3.31

検証イメージ

検証イメージ


検証結果

下図は、ターゲットシステムに対して細工したリクエストを送信した際の画面です。黄枠の箇所は、ターゲットシステムに対して任意のコマンド(idは現在のユーザーの情報を表示するコマンド、cat /etc/passwdは/etc/passwdファイルを参照するコマンド)を実行しています。一方で赤枠の箇所は、コマンドの実行結果(ユーザー情報の表示、および/etc/passwdファイルの内容の表示)が表示されていることを確認できます。

(以下の図ではtomcatユーザーによるコマンドの実行がされていますが、こちらの権限はApache Struts 2がインストールされたWebアプリケーションサーバーの実行権限に依存します)

検証結果

なお、上記対策案のプラグインを設定した場合には、以下の通り任意のコマンドが実行できず攻撃が成立しないことが確認できました。

検証結果


更新履歴

2017年3月28日 : 初版公開

  • PDF版はこちら
  • セキュティソリューション一覧

    脆弱性調査レポートのメール配信を開始しました!

    ご好評いただいている「脆弱性調査レポート」ですが、コンテンツの都合上、レポートの発行は不定期です。そこで、新しい脆弱性調査レポートを発行するたびに最新情報をメールでお届けする「脆弱性調査レポート メール」の配信を開始しました。ぜひご登録ください。

    本件に関するお問い合わせ先

    『報道関係者様からのお問い合わせ』
    ソフトバンク・テクノロジー株式会社
    管理本部 経営企画部 齊藤、安部、菅
    TEL:03-6892-3063
    メールアドレス:sbt-pr@tech.softbank.co.jp
    『お客様からのお問い合わせ』
    下記問い合わせフォームよりお問い合わせください。

    お問い合わせ・資料請求

    課題や悩みをお持ちのお客様は、
    まずお気軽にご相談ください。

    総合お問い合わせはこちら

    目的別・サービス別のご相談は「お問い合わせ・資料請求先一覧」からお問い合わせください。

    お問い合わせ・資料請求

    課題や悩みをお持ちのお客様は、まずお気軽にご相談ください。

    総合お問い合わせはこちら
    • SBT Talents
    • プライバシーマーク制度

    • ISMS認証登録範囲:
      本社、汐留、大阪、福岡

    ページトップへ