Cover Image

Spring Framework における新たな脆弱性を検出

2022/5月/24 - 読み終える時間: 2 分

New Vulnerability in Spring Framework Detected の翻訳版です。


Spring Framework における脆弱性を検出

HCL AppScanチームにより、Spring FrameworkのSpringShellと呼ばれる脆弱性が最近発見されました。

SpringShellは、CVE IDがCVE-2022-22965であり、悪用に成功するとリモートコード実行(RCE)となり、Webサーバーが危険にさらされ、攻撃者の制御下に置かれることになります。Spring Frameworkバージョン5.3.17/5.2.19以下に影響します(バージョン5.3.18/5.2.20でパッチが適用されました)。

AppScanのユーザーは、AppScanのSCAサービス、およびAppScanのDASTエンジンの最新バージョンの両方を通じて、この脆弱性を検出できます。

悪用するための前提条件

この問題自体はSpring Frameworkに関するものですが、この問題をうまく利用するためには、さらにいくつかの前提条件が必要です。

  • アプリケーションはApache Tomcatサーブレットとして配備され、WAR実行ファイルとしてパッケージ化されていること
  • JDK 9またはそれ以降で動作していること
  • spring-webmvcまたはspring-webfluxの依存性


根本的な原因分析

Spring Frameworkは、Webアプリケーションの開発に広く使用されているアプリケーションフレームワークである。その多くの機能の中にデータバインディングがあり、リクエストハンドラを扱う際の開発者のワークフローを大幅に簡素化することができます。通常のリクエストハンドラでは、開発者はリクエストパラメータから情報を解析する必要がありますが、Springのデータバインディング機能は、リクエストパラメータの値を、リクエストハンドラのコード内で、その名前に基づいて対応する引数に自動的にバインドします。これにより、コードが大幅に簡素化され、読みやすくなります。

しかし、このデータバインディング機能には、たまたまバグがあります。この実装では、class という名前の機密性の高いプロパティ (バインドされるオブジェクトのクラスを指す) が意図せず公開されてしまい、これを悪用してリクエストパラメーターの値をメモリ内の任意のオブジェクトのフィールドにバインドできます。これは、Javaにおける高レベルのwrite-what-whereプリミティブのようなものです。この脆弱性を利用して、慎重に選択されたフィールドを変更することで、任意のコードを実行できます。


Tomcatのログを利用した悪用

この脆弱性は、Apache Tomcatのロギング機能、つまりAccessLogValveクラスのインスタンスを悪用します。そのクラスには、Tomcatのロギング動作を定義する複数のフィールドがあり、以下のフィールドに注目します。

  • prefix - ログファイルのファイル名に追加される接頭辞
  • suffix - ログファイルファイル名に追加されるサフィックス
  • pattern - アクセスログ行をフォーマットするために使用されるパターン
  • directory - ログファイルを作成するディレクトリ
  • fileDateFormat - ログファイル名に使用される日付のフォーマット

これらのフィールドを write-what-where プリミティブで変更することで、サーバ上で任意のコードを実行することが可能です。

  • Tomcatのデフォルトのwebrootフォルダのような)webを介してアクセス可能なwebアプリケーションディレクトリにログファイルを作成するために、directoryフィールドを更新します。
  • ログのファイル名を効果的に.jsp拡張子を持つものに設定するために、prefixとsuffixフィールドを更新します。
  • prefixとsuffixが実際のファイル名を定義するように、fileDateFormatフィールドを空白に設定します。
  • コード実行を行う悪意のある JSP コードを含むように、pattern フィールドを設定します。

上記の手順が完了すると、攻撃者はTomcatが何かを記録するのを待つ必要があり(または、ウェブサイトのページにアクセスすることで記録イベントを発生させる)、悪意のあるJSPファイルが作成され、アクセスできるようになります。


緩和策

上記の悪用方法は、複数の前提条件に依存していますが、より広いケースで機能する新しい方法が発見される可能性があります。そのため、使用する Spring Framework をパッチ適用済みのバージョン (Spring Framework 5.3.18 または 5.2.20) に更新することが、この問題に対する適切な対処法です。

このブログについて

HCL Japan の Software 部門の複数担当者で HCL Software 全般について記しています。

Tags

Academy Accelerate Accelerator Actian Ambassador AoC AppDev Pack AppScan ASoC BigFix BigFix Workspace CAA Clara Client Applicatin Access Cloud Native Commerce Common Local License Server Compass Connections Connnections CVE-2021-44228 DevOpes Velocity DevOps DevOps Code ClearCase DevOps Code RealTime DevOps Deploy DevOps.Launch.AppScan DevOps Model RealTim DevOps Model RealTime DevOps Plan DevOps Test DevOps Velocity Digital Experience Discover Domino Domino Leap Domino Volt Domino管理者アップデート認定試験対策 DQL DRYiCE DX Enterprise Integrator event General HCAA HCL Ambassador HCL Ambassadors HCL Domino REST API HCL OneTest Embedded HCL Z and I Emulator HCL Z and I Emulator for Transformation HCLSoftware U Hero history HTMO iControl iNotes IZSAM KEEP Launch Launch.DevOps Leap Link MarvelClient nds2019 ndv12beta Noets/Domino Nomad Nomad Mobile Nomad Web notes Notes/Domino notes-domino-9-10-limited-supportability-as-of-202204 Notes/Domino V12 Notes/Domion notescons Now OneDB OneTest OnTime REST RTist SafeLinx Sametime SoFy Total Experience Traveler Traveler for Microsoft Outlook Unica Unica Discover Unica Interact UrbanCode Deploy UrbanCode Velocity Velocity Verse VersionVault Volt Volt MX Volt MX Go Volt MX サンプルアプリ Wordload Automation Workload Automation youtube Z Z Abend Investigator Z and I Emulator Z and I Emulator for Transformation Z and I Emulator for Web Z and I Emulator for Web Client Z Asset Optimizer Z Data Tools Z Software Asset Manager ZAI ZAO ZIE ZIE for Transformation ZIE for Web ZIE for Windows ZIET ZIETrans ZIEWeb イベント ガイド クラウド サポート サポート技術情報 サポート終了 セキュリティ セキュリティー セキュリティー脆弱性 テクてく Lotus 技術者夜会 ニュース ノーツコンソーシアム パートナー ライセンス 九州地区 Notes パートナー会 出荷日 研修