AIを駆使したサイバー攻撃:インテリジェントな脅威を検知、予防、防御する方法

今すぐ読む
サイト翻訳には人工知能を利用しており、正確性を追求しておりますが、必ずしも100%正確とは限りません。ご了承ください。

オープンソースGeoServerのCVE-2024-36401がリモートコード実行の危険に晒す

By OPSWAT
この記事を共有する
OPSWAT フェローシップ・プログラム参加者の顔写真
OPSWAT フェローシップ・プログラム参加者

このブログでは、地理空間データの操作や共有に広く使用されているオープンソースの Java ベースのサーバーである GeoServer に見つかったセキュリティ脆弱性 CVE-2024-36401 について調査します。この脆弱性は、認証されていないユーザーによる RCE(リモートでのコード実行)を可能にする可能性があり、GeoServer のデプロイメントにできるだけ早くパッチを適用することの重要性を強調しています。 

最新のセキュリティ分析では、2人のOPSWAT フェローがこの脅威を調査している:

また、OPSWAT SBOMテクノロジーがどのようにこの脆弱性を検出するのか、さらに、攻撃者が襲いかかる前に地理空間インフラを保護するための、チームのための実用的なステップをご紹介します。

GeoServerの脆弱性分析を表す図

GeoServerの概要

GeoServerは、地理空間データを閲覧、編集、共有するために設計されたJavaベースのオープンソースサーバーである。2001年にTOPP(The Open Planning Project)によって開始されたGeoServerは、オープンな空間データの交換を通じて、政府や都市計画への市民の参加を向上させるために開発された。それから20年以上が経ち、GeoServerは様々な空間データ形式を扱い、様々なデータソースと統合できる堅牢なプラットフォームへと成熟した。

GeoServerは、OGC(Open Geospatial Consortium)の標準に基づいたサービスを提供しています:

  • WFS(Web Feature Service) -HTTPを使ってベクトル形式の地理情報を作成、変更、交換することができます。 
  • WCS(Web Coverage Service) - 複雑なモデリングや分析のためのラスターデータ(衛星画像など)へのアクセスを容易にします。
  • WMS (Web Map Service) - 地図画像をリクエストするためのシンプルなHTTPインターフェースを提供。

CVE-2024-36401の背景

CVE-2024-36401は GeoServer の 2.25.2, 2.24.4, 2.23.6 より前のバージョンに影響します。この不具合は、複数の OGC リクエストパラメータにまたがる XPath 式としてのプロパティ名の安全でない評価に起因します。攻撃者はこの欠陥を悪用し、デフォルトの GeoServer インストールに細工した入力を注入することでRCE(リモートコード実行)を行うことができます。

 GitHub Security Advisoriesによると、この脆弱性のCVSS v3.1スコアは9.8(クリティカル)です。 

ソフトウェアの脆弱性評価に使用されるCVSS Base Score Metricsのスクリーンショット

GeoServerのシンプルな機能と複雑な機能

GeoServer は、フラットなデータセットから複雑なネストされたデータセットまで、さまざまな地理空間データ構造に対応できるよう、単純なフィーチャタイプと複雑なフィーチャタイプの両方をサポートしています。しかし、これらのデータ型にまたがる XPath 式の取り扱いに欠陥があるため、CVE-2024-36401 が悪用されてしまうのです。

シンプルな機能

単純なフィーチャタイプはフラットなフォーマットで単純な地理空間データを表し、データベースの各行は地理空間フィーチャに対応し、各属性は XML 要素に直接マッピングされる。 

例えば、id、name、locationのようなカラムを持つ企業を表すテーブルは、単純なXML機能に簡単に変換できる。

アイドル名称場所
1OPSWATポイント (10.769829, 106.685248)
データベース行からXML要素へのGeoServerシンプルフィーチャーマッピング

複合施設の特徴

対照的に、複雑な特徴タイプはより複雑なデータを扱う。このフィーチャタイプは、ネストされたプロパティや異なるデータセット間のリレーションシップをサポートします。これらの複雑なスキーマは自動的に生成されるのではなく、GeoServer の Application Schema 拡張機能で概説されているように、コミュニティ標準を使用して定義されます。

例 

前のcompaniesテーブルの下に外部キーを追加します。 gu_id は、企業とそれに相当する地質単位との関係を表す:

アイドル名称場所gu_id
1OPSWATポイント (10.769829, 106.685248)12

地質単位の情報は、テーブル 地質単位:

gu_id記述
12urn:x-demo:feature:GeologicUnit:12変成片麻岩

これらのテーブルを使うことで、会社を sa:サンプリング会社を含む。 gsml:GeologicUnit.この設定は、自動的に生成されたスキーマではなく、コミュニティ仕様によって定義された入れ子の型と関係を含むため、複雑な機能を生み出す。

GeoServer 複合フィーチャーのネストされた地質単位の関係

このような柔軟性は、複雑な実世界のシナリオをモデル化するために不可欠であるが、入れ子構造を効果的に管理するためにJXPath評価のような高度な処理技術に依存するため、脆弱性も生じる。

脆弱性の発生メカニズム

GeoServer は、(Application Schema データストアにあるような)複雑なフィーチャ タイプを処理するために XPath 評価を使用するように設計されています。しかし、不適切な処理のために、単純な特徴タイプにも XPath 評価を誤って適用してしまいます。これにより、攻撃ベクトルが作成されます:

  1. GeoServer は、データ検索時にプロパティ名を評価するために GeoTools ライブラリに依存しています。
  2. について 共通jxpath XPath式を処理するために使用されるライブラリは、適切な検証を欠いており、XPath式を処理する際に任意のコードを実行する可能性がある。
  3. 攻撃者は、この安全でないXPathの実行を悪用した悪意のあるリクエストを作成し、サーバーを制御することができるため、この欠陥は、すべてのGeoServerインスタンスを潜在的なRCEの脆弱性にさらすことになります。

搾取ワークフローの概要

  • A ポスト リクエストは GetPropertyValue オペレーションを実行する。その後、GeoServer はそのプロパティ(または 値参照)を指定する。  
  • 要求されたプロパティがフィーチャタイプ詳細テーブルに存在する場合、GeoServer はそれを通常通り処理します。
GeoServer は、テーブル内の XPath 評価を commons-jxpath にフォールバックします。
  • しかし、プロパティがリストされていない場合、GeoServer は、そのプロパティがリストされていることを確認します。 共通jxpath ライブラリを使用して、リクエストパラメータを XPath 式として解釈します。
  • それ以来 共通jxpath XPathから直接Javaコードを実行することを許可するこのフォールバックメカニズムは、潜在的に、リモートコード実行のためにユーザが提供するリクエストパラメータを悪用することを可能にします。簡単に言うと、攻撃者は悪意のあるコードを注入して RCE を行うことができます。
GeoServer の GetPropertyValue 操作と攻撃の流れを示すワークフロー図

脆弱性の探索と分析

JXPathとJava実行ブリッジ

GeoServer における悪意のある XPath 式の Commons-jxpath 処理

について 共通jxpath ライブラリは、一般にJXPathと呼ばれ、XPath構文を使用してJavaオブジェクト・グラフ(JavaBeans、DOMオブジェクトなど)をナビゲートできます。たとえば、名前や住所などのプロパティを持つ単純な Employee オブジェクトがある場合、JXPath を使用すると、それらのプロパティを XML ドキュメントのノードのようにクエリできます。

XPath構文を使ったJavaオブジェクトグラフのJXPathナビゲーション

拡張機能を利用する

標準関数だけでなく、JXPath は Java への橋渡しをする拡張関数もサポートしています。この「Javaへの橋渡し」は、例えばXPathクエリ内でJava関数を直接呼び出すことを可能にするため、非常に重要です:

JXPath による Java Employee オブジェクトのプロパティのクエリ

このブリッジを経由して呼び出せるJavaメソッドにはほとんど制限がないため、攻撃者は exec() 関数(または同様の方法)を使って、サーバー上で任意のコマンドを実行することができる。

XPathとJavaメソッドの橋渡しをする拡張関数呼び出し

WFS GetPropertyValue

GeoServer の WFS を使用すると、ユーザーは地理空間フィーチャをクエリし、操作することができます。通常の状態では、WFS GetPropertyValue 操作は、要求されたプロパティをXML構造で返すだけである。

XML プロパティを返す WFS GetPropertyValue オペレーション
WFS GetPropertyValue XML 応答構造体

ワークフロー分析

  1. 攻撃者は /geoserver/wfs に POST リクエストを送る。
  2. GeoServer は一番外側の XML タグを調べます。wfs:GetPropertyValue-。で、どの操作を実行するかを決定する。
  3. GeoServer は次に、リクエストパラメータを WFS クラスの対応するメソッドに委譲します。このシナリオでは、Dispatcher はリクエストを GetPropertyValue メソッドを使用する。
GetPropertyValue メソッドへのリクエストを指示する GeoServer Dispatcher
  1. DefaultWebFeatureService20 (WFS)クラス内では、次のようになります。 GetPropertyValue メソッドは、ユーザーのパラメーターを同じ名前のハンドラーに転送する。
  2. ハンドラーの 実行() メソッドはリクエストを受け取る。 値参照 パラメーターはユーザーによって制御される。
valueReferenceパラメータを持つユーザーリクエストを受け取るハンドラrun()メソッド
  1. 期間中 実行() メソッドを呼び出すと、GeoServer は 参照値 を呼び出す。 evaluate() 関数である。
GeoServerによる参照値の取得とevaluate()関数の起動
  1. もし 値参照 が GeoServer の定義済みプロパティと一致しない場合、GeoServer はそれをデフォルトの フィーチャープロパティアクセサを解釈する。 値参照 をXPath式として使用する。
valueReferenceをXPath式として解釈するFeaturePropertyAccessor
  1. について ゲット メソッドを使用する。 共通jxpath を使用して XPath クエリを実行します。ここでは、ユーザーの 値参照 は検証なしで直接 xpath パラメータに渡される。を通して JXPathContext.newContext()GeoServerはXPathクエリ用の環境を初期化し、XPathクエリを iteratePointers().
Commons-jxpath ユーザーが指定した値を参照して XPath クエリを実行します。

JXPath は拡張関数をサポートしているため、攻撃者は悪意のあるコードを XPath 式に注入し、GeoServer インスタンス上で任意のコードを実行させることができます。

RCEのためにXPath式を介して悪意のあるコードを注入する攻撃者

この一連の出来事は、いかに安全でない取り扱いをしたかを示している。 値参照 パラメータは RCE につながる可能性があり、脆弱な GeoServer の配備にとっては深刻なセキュリティ脅威となる。

攻撃のシミュレーション

この悪用を実際のシナリオでシミュレートするため、OPSWAT 大学院生が GeoServer をローカルの Windows マシンに導入しました。GeoServer にアクセスすると、以下のようなインターフェイスが表示された。

脆弱性シミュレーション用Windowsマシン上のGeoServerインターフェイスのスクリーンショット

サーバーが実行されると、攻撃者は、悪意のあるXPath式でPOSTリクエストを送信することにより、脆弱性を悪用することができる。 値参照 を /geoserver/wfs エンドポイントに設定する。

GeoServerのvalueReferenceを悪用した悪意のあるPOSTリクエストを示すXMLコードスニペット

結果リクエスト送信後、悪意のある XPath 式がシステムコマンドを実行し、Calculator アプリケーションの起動をトリガーします。

RCEエクスプロイト成功後のCalculatorアプリケーション起動を示すスクリーンショット

緩和策と提言

特にGeoServerのようなオープンソースソフトウェアに依存しているプロジェクトでは、単純なエクスプロイトがソフトウェアサプライチェーン攻撃にエスカレートする可能性があります。OPSWAT SBOM(Software 部品表)技術は、コードベース内のCVE-2024-36401のような脆弱性を特定するのに役立ちます。

この例は、OPSWAT SBOMがどのように機能するかを示している:

  1. 脆弱性の影響を受けるソフトウェアコンポーネントを検出する。
  2. セキュリティ上の欠陥の重大性を評価し、ランク付けする。ここでは、GeoServer の CVE に「Critical」のフラグを付けている。
  3. 影響を受けるバージョンを特定する。
  4. 開発チームが迅速にパッチを適用したり、修正措置を講じたりできるように、修正バージョンを推奨する。
OPSWAT SBOM が重大な脆弱性を持つ GeoServer パッケージを検出した際のダッシュボード画面。
OPSWAT SBOMSoftware 部品表)技術は、重大な脆弱性を持つGeoServerパッケージを検出します。

その他の推奨ステップ

  1. GeoServer をアップデートする:脆弱性が修正された GeoServer バージョン 2.25.2、2.24.4、または 2.23.6(またはそれ以降)にアップグレードする。
  2. 監査依存: OPSWAT SBOMのようなツールを定期的に使用し、古くなったライブラリを特定する(例. 共通jxpath)を使用する。
  3. アクセスを制限する:ファイアウォールや認証レイヤーの背後に GeoServer を配置し、攻撃対象領域を最小化する。
  4. セキュリティ勧告の監視GeoServer の公式リリースノートや CVE データベースに常に目を配り、新しいパッチの最新情報を入手してください。

OPSWAT SBOMについて

OPSWAT SBOMは、最も一般的なプログラミング言語をサポートし、ソフトウェア開発チームにサードパーティのオープンソースライブラリ、関連する依存関係、およびアップグレード可能な最新バージョンの可視性を提供します。開発者は、OPSWAT SBOMをソースコードやGitHub、BitBucket、GitLab、Amazon ECR、DockerHubなどのコンテナサービスに統合することができます。SBOMの詳細はこちら。

OPSWAT ツールやソリューションを既存のインフラやワークフローに統合する方法について、今すぐエキスパートにご相談ください:

OPSWATで最新情報をお届けします!

今すぐご登録ください、 ストーリー、イベント情報などをお届けします。