Tenable ブログ
ブログ通知を受信する新しいApache Strutsの脆弱性、リモートでコード実行
8月23日の更新情報: Tenableの研究チームによって実用的な概念実証(PoC)がGithubで発見され、検証されました。さらに、攻撃者がすでに脆弱なApache Strutsインスタンスをプローブしているという兆候が見られています。
背景
Semmleの研究者は特定の構成要件を満たす、Apache Strutsを実行中のサーバーにてリモートコード実行(RCE)脆弱性(CVE-2018-11776)を発見し、公開しました。Semmleによると、これらの要件は以下の通りです。
- alwaysSelectFullNamespaceフラッグはStruts構成において「True」に設定されています。(注: お使いのアプリケーションが多用されているStrutsの従来のプラグインを使用している場合はこれに該当します。)
- アプリケーションのStruts構成ファイルには、オプションの名前空間属性を指定しない、もしくはワイルドカードの名前空間(例:「/*」)を指定する<action ...>タグが含まれます。
この脆弱性の対象は、Apache StrutsのバージョンがStruts 2.3–Struts 2.3.34 または Struts 2.5–Struts 2.5.16です。Apacheにより提供されている最新バージョンにアップグレードすることでリスクを軽減できる可能性があります。
影響の評価
上記の構成要件が満たされており、かつお使いのApache Strutsのバージョンが推奨のバージョンにアップデートされていない場合、攻撃者はApache Strutsを使用してウェブアプリケーションを完全にのっとることができます。
Equifaxも、歴史上最も高額なデータ漏洩と呼ばれるものに使用された同様のApache Strutsの脆弱性(CVE-2017-5638)確認しました。これと同様の多くのウェブベースのRCE脆弱性は、公開後数日以内に公に出現したエクスプロイトとともに迅速にリサーチされました。実際、弊社の最近の攻撃側の先行者利益レポートでも、最もよく見られる脆弱性の34%で、見つかったその日にエクスプロイトが出現したことを明らかにしています。
脆弱性の詳細
Apache Strutsでは、<action ...>タグに対応する名前空間属性が存在しない場合、デフォルトのredirectAction結果タイプはコマンドとしてHTMLリクエストの無害化されていないストリングを渡します。
さらに、プリセットのactionまたはvalue属性のない<s:url …>タグは、不足している属性に悪意あるコードを注入することで操作され、Strutsに実行済みのコマンドとして渡されます。
緊急措置が必要
できるだけ早く、Apache Strutsバージョン2.3.35または2.5.17にアップグレードしてください。
Apacheはまた、以下の構成の変更により脆弱性を軽減できるとしています(ただし、これはあくまでも組織がアップグレードを実行するまでの一時的なワークアラウンドです):
- 基の構成の全ての定義された結果に対して、セット名前空間(該当の場合)があることを確認
- お使いのJSPの全ての「url」タグに対してセットvalueまたはactionを持っていることを確認。上のアクション構成が名前空間を持っていない、もしくはワイルドカード名前空間の場合に両方必要になります。
Semmleの研究者は、他の方法による攻撃が存在する可能性を指摘しており、これらの構成要件が必ずしも攻撃を防ぐことができるとは限りません。
攻撃されたシステムの特定(8月24日更新)
未認証のリモートチェック
プラグイン112064は、脆弱性の悪用を試みて、ICMP echo (ping)リクエストをリモートホストからスキャナホストに返し、エクスプロイトに成功したかどうかを検証するリモートプラグインです。
適切なスキャンテストを行うには次の手順が必要です:
- まず、Assessment -> General Settingsから「perform thorough tests」を有効にします。
- 次に、Assessment設定で「Web Application Scan」を有効にします。ウェブアプリケーションをクロールを開始する適切な場所をスキャンするように構成してください。Assessment設定のWeb Applicationsセクションで、以下の画像でハイライトしているように、ロボット型検索エンジンの「Start crawling from」の場所を定義します。
- 最後に、高度にセグメント化され、区分化されたネットワークについては、ターゲットがスキャナの直接IPをpingする能力を持っていることが重要です。これは、VPC、サブネット、およびコンテナ化されたアプリケーションが通信と干渉するクラウド環境において特に大切です。プラグインがターゲットからスキャナに送信し、ブラインドのリモートコード実行脆弱性が存在するかどうかを検証します。
注: このプラグインは脆弱性の性質上、Tenable.ioスキャナプールでは動作しません。ユーザーの方は、お使いのオンプレミスのスキャナでスキャンされることを推奨します。
認証済みのローカルチェック
プラグインID112036は、Windows (SMB資格情報使用)およびUnix (SSH資格情報使用)の両方ともにあります。このプラグインは、「Accuracy」設定が[Show potential false alarms]に設定されている場合にのみスキャンで実行されます。このプラグインはStrutsアプリケーションで特定されたバージョン番号のみに依存するため、このプラグインは脆弱性を緩和するワークアラウンドが実行されているかどうか特定することができません。この理由から、「Accuracy」設定は、[Show Potential false alarms]である必要があります。
Tenable.io Container Securityは、CVE-2018-11776の脆弱性があるApache Strutsのバージョンを実行しているコンテナを検出できます。
重要: Apacheは、古いサポート対象外のバージョンのStrutsが脆弱である可能性があり、最新バージョンにアップグレードすることを推奨しています。
プラグインID |
説明 |
Apache Struts CVE-2018-11776 Results With No Namespace Possible Remote Code Execution (S2-057) |
|
Apache Struts CVE-2018-11776 Results With No Namespace Possible Remote Code Execution (S2-057) (Remote Check) |
攻撃されたシステムのプラグイン出力の例は以下でご確認いただけます。
詳細情報
現代のアタックサーフェスを総合的に管理する初のCyber Exposureプラットフォーム、Tenable.ioについてもっと知る。今すぐTenable.io Container Securityを無料でお試しください。
関連記事
- Tenable.io Container Security