New Deserialization Vulnerability in Ruby Workers Could Enable Full System Compromise
2026/02/24 CyberSecurityNews — Ruby のバックグラウンド・ジョブ処理システムに、深刻なリモートコード実行 (RCE) 脆弱性 CVE-N/A が発見された。原因は安全ではない JSON デシリアライズであり、信頼できない入力データが実行可能なオブジェクトへと変換されてしまう。この問題は、Ruby 環境におけるデシリアライズの潜在的な危険性を示すものであり、たった一行のコードが、バックグラウンド・ワーカー・コンテキストで致命的なコマンド実行を引き起こす。

この脆弱性は、分かりにくいガジェット・チェーンやメモリ破損ではなく、設計レベルの信頼前提に起因するものだ。JSON 処理に “Oj gem” を利用している点が問題である。
信頼できない入力を “Oj.load” でデシリアライズすると、完全な機能を持つ Ruby オブジェクトが再構築される。そこには、メソッドおよびシステム・アクセスも含まれるため、データとコードの境界が消失し、完全な侵害へと至る。
脆弱性のメカニズムと悪用の方法
この問題の核心はバックグラウンド・ジョブ・パターンにある。具体的には、ユーザー制御入力が JSON ペイロードとして保存され、その後にバックグラウンド・ワーカーによりデシリアライズされる。
この問題を引き起こす行は “data = Oj.load (job.payload)” であり、単純な JSON 解析ではなくオブジェクトのデシリアライズを実行する。
NullSecurityX の研究者たちによると、”Oj.load” は「{“^o”: “ClassName”}」などの特別な JSON ディレクティブを解釈し、任意のクラス・インスタンスを生成可能である。したがって、変数の注入および機能オブジェクト生成が可能になる。
| Vulnerability Type | Risk Level | Attack Vector |
|---|---|---|
| Remote Code Execution (RCE) | Critical | Unsafe JSON Deserialization |
| Object Injection | High | Capability-Based Dynamic Dispatch |
| Command Injection | Critical | Malicious Payload in Background Jobs |
オブジェクト再構築後、アプリケーションは機能ベースの動的ディスパッチを使用してオブジェクトを評価する。対象となるオブジェクトが、特定のメソッド (例:run_find) を持つ場合には、その実行が許可される。
Node のようなユーティリティ・クラスに、Open3.capture3 を呼び出す安全ではないメソッドが存在する場合に危険となる。
“Oj.load” に Node オブジェクトをデシリアライズさせる、JSON ペイロードを作成する機会が、攻撃者に与えられる。たとえば、find コマンド引数に偽装した shell コマンドの埋め込みなどが可能になる。
保存されたペイロードが再構築後に実行される。任意 shell コマンド実行に至るという悪用チェーンは、壊滅的な被害をもたらす。
具体的には、未認証の攻撃者によるバックグラウンド・ワーカーの制御が可能となり、その結果として、完全なシステム侵害へ至る可能性が高い。
| Area | Status / Indicator | Key Detail | Mitigation / Note |
|---|---|---|---|
| Ruby Oj (object mode) | Vulnerable | Unsafe Oj.load deserialization | Use Oj.safe_load or enforce strict parsing |
| Background Job Queue | Vulnerable | Dynamic respond_to? dispatch abuse | Replace with explicit, hardcoded job handling |
| Malicious JSON Pattern | IOC | {"^o":"Node"} object instantiation | Indicates exploit attempt |
| Suspicious Process Execution | IOC | find / -maxdepth 0 -exec sh -c | Unexpected shell execution from worker |
緩和策として、シリアライズ入力は、デフォルトで非安全として扱うべきである。NullSecurityX が推奨するのは、Oj.safe_load または strict parsing モードの使用である。さらに、動的ディスパッチを明示的なジョブ・ハンドリングに切り替え、ユーザー制御引数を伴う OS コマンドの実行を完全に回避すべきである。
Ruby エコシステムで広く利用されている高速 JSON ライブラリ “Oj” の不適切な設定に起因する、深刻なリモートコード実行 (RCE) の脆弱性が報告されました。この脆弱性は、複雑なメモリ破損を突くものではなく、データの読み込み時に “本来はデータであるはずのものをプログラム (オブジェクト) として復元してしまう” という、設計上の信頼前提を崩壊させるものです。特に、ユーザーからの入力をバックグラウンドジョブとしてキューに溜め込み、後でワーカーが処理するような非同期処理パターンにおいて、致命的な破壊力をもたらします。ご利用のチームは、ご注意ください。よろしければ、Ruby での検索結果も、ご参照ください。

You must be logged in to post a comment.