Ruby のバックグラウンドに深刻な RCE 脆弱性 CVE-N/A:完全なシステム侵害の可能性

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 オブジェクトが再構築される。そこには、メソッドおよびシステム・アクセスも含まれるため、データとコードの境界が消失し、完全な侵害へと至る。

Ruby background job processing system(source : Medium)
Ruby background job processing system (source : NullSecurityX)
脆弱性のメカニズムと悪用の方法

この問題の核心はバックグラウンド・ジョブ・パターンにある。具体的には、ユーザー制御入力が JSON ペイロードとして保存され、その後にバックグラウンド・ワーカーによりデシリアライズされる。

この問題を引き起こす行は “data = Oj.load (job.payload)” であり、単純な JSON 解析ではなくオブジェクトのデシリアライズを実行する。

NullSecurityX の研究者たちによると、”Oj.load” は「{“^o”: “ClassName”}」などの特別な JSON ディレクティブを解釈し、任意のクラス・インスタンスを生成可能である。したがって、変数の注入および機能オブジェクト生成が可能になる。

Vulnerability TypeRisk LevelAttack Vector
Remote Code Execution (RCE)CriticalUnsafe JSON Deserialization
Object InjectionHighCapability-Based Dynamic Dispatch
Command InjectionCriticalMalicious Payload in Background Jobs

オブジェクト再構築後、アプリケーションは機能ベースの動的ディスパッチを使用してオブジェクトを評価する。対象となるオブジェクトが、特定のメソッド (例:run_find) を持つ場合には、その実行が許可される。

Node のようなユーティリティ・クラスに、Open3.capture3 を呼び出す安全ではないメソッドが存在する場合に危険となる。

“Oj.load” に Node オブジェクトをデシリアライズさせる、JSON ペイロードを作成する機会が、攻撃者に与えられる。たとえば、find コマンド引数に偽装した shell コマンドの埋め込みなどが可能になる。

保存されたペイロードが再構築後に実行される。任意 shell コマンド実行に至るという悪用チェーンは、壊滅的な被害をもたらす。

具体的には、未認証の攻撃者によるバックグラウンド・ワーカーの制御が可能となり、その結果として、完全なシステム侵害へ至る可能性が高い。

AreaStatus / IndicatorKey DetailMitigation / Note
Ruby Oj (object mode)VulnerableUnsafe Oj.load deserializationUse Oj.safe_load or enforce strict parsing
Background Job QueueVulnerableDynamic respond_to? dispatch abuseReplace with explicit, hardcoded job handling
Malicious JSON PatternIOC{"^o":"Node"} object instantiationIndicates exploit attempt
Suspicious Process ExecutionIOCfind / -maxdepth 0 -exec sh -cUnexpected shell execution from worker

緩和策として、シリアライズ入力は、デフォルトで非安全として扱うべきである。NullSecurityX が推奨するのは、Oj.safe_load または strict parsing モードの使用である。さらに、動的ディスパッチを明示的なジョブ・ハンドリングに切り替え、ユーザー制御引数を伴う OS コマンドの実行を完全に回避すべきである。