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 Ambassador AoC AppDev Pack AppScan ASoC beta BigFix BigFix 9.5 BigFix_Wiki BigFix Workspace branding CAA Client Applicatin Access cloud Cloud Apps Cloud Native Commerce Common Local License Server community companion Compass compliance Connections Connections 6.5 ConnectionsDocs Connnections CVE-2021-44228 developerWorks DevOpes Velocity DevOps DevOps Code ClearCase DevOps Code RealTime DevOps Deploy DevOps.Launch.AppScan DevOps Model RealTim DevOps Plan DevOps Test DevOps Velocity Digital Experience document Doino Volt Domino Domino AppDev Pacl Domino Leap Domino Volt Domino管理者アップデート認定試験対策 DQL DRYiCE dW dx Enterprise Integrator event fix fix_list fixlist forum General guide 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 hints_and_tips history HTMO IBM_i ID_Vault iNotes ios ios13 ipad iPhone IZSAM KEEP Launch Launch.DevOps Leap Link logo MarvelClient mobile mui nds2019 ndv12beta News Noets/Domino Nomad Nomad Mobile Nomad Web Notes Notes/Domino Notes/Domino 10 Notes/Domino 11 notes-domino-9-10-limited-supportability-as-of-202204 Notes/Domino V12 Notes/Domion Notes/Domno notescons Now on_premises OneDB OneTest OnTime osaka press_release relay REST RTist SafeLinx Sametime Sametime 11 SoFy support survey system_requirement techtek Traveler Traveler 10 Traveler for Microsoft Outlook traveler.zip Unica Unica Discover Unica Interact UrbanCode Deploy UrbanCode Velocity v11 V12 Verse Verse Mobile Verse On-Premises VersionVault Volt Volt MX Volt MX Go Volt MX サンプルアプリ Webinar win7 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 パートナー会 互換性 出荷日 各種ご案内資料 研修