Ruby Worker逆シリアライズの重大な脆弱性がシステム完全乗っ取りへの道を開く

RubitMQジョブワーカーに重大なリモートコード実行(RCE)の脆弱性が発見されました。これは安全でないJSONの逆シリアライズに起因しています。

セキュリティ研究者NullSecurityXがこの問題を発見しました。これにより、攻撃者は無害に見えるJSONデータを危険な実行可能コードに変えることができます。

メモリ破損バグとは異なり、これはRubyのバックグラウンドシステムの設計上の欠陥に由来しており、処理されたデータを盲目的に信頼しています。CVE-2024-XXXXとして追跡されるこの脆弱性は、CVSSスコア9.8を持つ重大度として分類されています。

脆弱性のあるRubitMQセットアップを実行しているシステムは、データ盗難とラテラルネットワークムーブメントを含む、インフラ全体の侵害リスクに直面しています。

これは、高速JSON処理のためOj gemを使用しているRubyアプリケーション、特にジョブキューとバックグラウンドワーカーで一般的なものに影響します。

開発者は速度のためにOjを選ぶことが多いですが、そのオブジェクト逆シリアライズ機能は隠れた危険を生み出します。

ペイロードがワーカーに到達すると、Oj.loadはデータを単に展開するだけでなく、JSONからフルRubyオブジェクトを再構築し、アプリコードからのカスタムクラスも含みます。これはオブジェクト注入攻撃への扉を開きます。

本質的に、バグはOj.loadの^oのようなディレクティブのサポートを悪用し、クラスのインスタンス化をトリガーします。RubitMQのアーキテクチャでは、ワーカーはケーパビリティベースのチェックを通じてジョブを処理します。

彼らはディスパッチ前にオブジェクトがrun_findメソッドを持っているかどうかを検証し、これが安全な認可を証明すると想定しています。

攻撃者は、アプリのNodeユーティリティクラスをインスタンス化するJSONペイロードを作成します。これは、シェルコマンド実行のためにOpen3.capture3により駆動されるrun_findメソッドを含みます。

エクスプロイトはUnixのfindコマンドの-execフラグを悪用することによって確定的になります。悪意のあるペイロードは、findをチェーンしてワーカーの特権下で任意のシェルコマンドを実行する引数を注入します。

これは入力検証やサンドボックスなどの典型的なコントロールをバイパスします。NullSecurityXの概念実証は、コマンドが確実に実行され、データ流出、サービス障害、または他のシステムへのピボットにつながることを示しています。メモリトリックは必要ありません。ただ巧妙なJSON工学です。

RubitMQジョブワーカーが大部分を占めていますが、Oj gemのデフォルト設定はRubyアプリ全体のリスクを増幅させます。

これを修正するには、利用可能な場合はRubitMQをパッチ版にアップグレードするか、Oj.loadをオブジェクト作成を無効にする:jsonモードなどのより安全なモードに切り替えてください。

ペイロードを厳密に検証し、ワーカーを隔離されたコンテナで実行し、動的ディスパッチロジックを監査してください。RubyのYAMLのような安全な制限もJSONに対して有効にしてください。CISAおよび同様の機関はまもなくアラートを発行する可能性があります。

この欠陥は、JSONのような「安全な」フォーマットが信頼できない入力にどのような精査が必要であるかを強調しています。バックグラウンドワーカーはしばしば昇格したアクセスで実行され、逆シリアライズを主要なRCEベクターにします。Rubyキューを使用しているチームは今すぐコードをスキャンすべきです。

翻訳元: https://cyberpress.org/critical-ruby-worker-deserialization-flaw-opens-door-to-complete-system-takeover/

ソース: cyberpress.org