Splunk Secure Gatewayにおいて、CVSSスコア8.8(High)のCVE-2026-20251として追跡されるリモートコード実行(RCE)の重大な脆弱性が公開されました。
この欠陥により、低権限の認証済みユーザーが管理者アクセスなしに、Splunkホスト上で任意のオペレーティングシステムコマンドを実行できます。
この脆弱性は、ReactiveZero Security ResearchのセキュリティリサーチャーであるFady Oueslati氏によって発見されました。原因は、Splunk Secure Gatewayが内部のKVストアから取得したアラートドキュメントを処理する方法にあります。
alerts_request_processor.pyコンポーネントはmobile_alertsコレクションからドキュメントを読み込み、任意のPythonオブジェクトを再構築できるPythonのデシリアライズ関数であるjsonpickle.decode()に直接渡します。
この呼び出しにはsafe=Trueフラグが使用されていますが、この設定はレガシーのpy/repr評価パスのみを制限するものです。py/reduce、py/function、py/object、py/type、py/moduleといった危険なタグはこのフラグの影響を一切受けず、完全に悪用可能な状態のままです。
第二の防御機構として、デシリアライズ前に悪意ある直列化タグをブロックするよう設計されたcheck_alert_data_valid_json()が存在します。しかし、このバリデーターには重大なロジックの欠陥があり、最初に認識されたキーで処理を短絡させてしまいます。
ドキュメントの最初のトップレベルキーがspacebridgeappで始まる許可済みのpy/object値であった場合、関数は隣接するキーを一切検査せずに即座にTrueを返します。
攻撃者はこれを悪用し、信頼されたキーを先頭に配置しつつ、ドキュメント構造の深い部分に悪意あるpy/reduceガジェットを埋め込みます。これにより、ペイロードとデシリアライザーの間に存在する唯一の防御を事実上回避できます。
悪用に必要なのは、有効な低権限Splunkアカウントのみです。攻撃者はSplunkのREST APIを通じて、細工したバイパスドキュメントをmobile_alerts KVストアコレクションに書き込みます。管理者権限やパワーロールは不要です。
その後、Splunk Secure Gatewayがアラートフェッチリクエストを処理する際、欠陥のあるバリデーターは最初のキーのみを検査してドキュメントを承認します。
承認されたドキュメントはjsonpickle.decode()に渡され、埋め込まれたpy/reduceガジェットが起動します。その結果、Splunkサービスアカウントとして任意のコードが実行され、ホスト上での完全なOSレベルのコマンド実行が可能になります。
各組織は直ちにSplunk Secure GatewayおよびSplunk Enterpriseをパッチ適用済みリリースにアップグレードする必要があります。
即時のパッチ適用が困難な場合、管理者はSplunk Secure Gatewayアプリを積極的に使用していなければ無効化し、最小権限ロールを徹底するとともにmobile_alertsコレクションのACLを監査することでKVストアへの書き込みアクセスを制限してください。
防御的エンジニアリングの観点からは、外部から影響を受けるデータに対してjsonpickle.decode()を使用すべきではありません。厳格なスキーマ検証付きパーサーへの置き換えや、明示的なclasses=許可リストの指定により、デシリアライズリスクを大幅に低減できます。
また入力バリデーターは、最初に一致したキーで処理を打ち切るのではなく、ネストされたドキュメント構造を完全に走査する必要があります。この設計上の欠陥こそが、今回の脆弱性を悪用可能にした根本原因です。バリデーターのバイパスと安全でないコード実行の両方を実証した概念実証コードがGitHubに公開されています。
翻訳元: https://cyberpress.org/splunk-secure-gateway-rce-flaw/