セキュリティ研究者pepsipu氏が、Nintendo Switch 2で独自のコードを動かすソフトウェア脱獄「ns2jb」の技術情報と実行デモを公開した。本体ソフトウェア23.0.1を対象に、改造チップを取り付けず、ファイル操作などを担うシステムモジュールの権限へ到達できるという。同氏は『マリオカート ワールド』を改造した実演も示している。ただし、研究で得た権限の広さと、配布物に用意された機能は別だ。現時点の公開デモは、ファイルシステム内でコードが動くことを確かめるものであり、再起動後も使える改造環境の完成を意味しない。
公開デモと、研究で得た権限の差
ns2jbの技術解説はシステムモジュールの権限での任意コード実行を述べる一方、公開READMEが案内する配布物はfs内の小さなネイティブ関数を検証するデモで、カスタムファームウェアや永続化を導入しない。
fsは、ゲーム機のストレージやファイルへのアクセスを扱うシステムモジュールである。pepsipu氏の技術解説によると、ns2jbは通常のシステムモジュールと、組み込みのfsの権限で、CPUが直接実行するネイティブコードを動かせる。同氏は、この権限によって自作ソフトの実行やゲームの解析・改造、セーブデータの退避が可能になると説明した。さらに、メモリ経由で周辺機器を操作する仕組みを使い、Switch 2のハードウェアを調べる用途も挙げている。
一方、配布READMEの「Switch 2 FS demo」が行うのは、fs内で小さなネイティブ関数を2つ動かし、結果を検証してから元の命令を復元することだ。研究成果の到達点と、このデモが提供する機能を分けると、現在の位置が見えてくる。
| 比較する項目 | pepsipu氏の技術解説 | 配布READMEのFSデモ |
|---|---|---|
| コードを動かせる権限 | 通常のシステムモジュールと組み込みfsの権限 | fs内の小さな関数の実行を検証 |
| 示している用途・機能 | 自作ソフト、ゲーム改造、セーブ退避など | 関数の実行結果を確認し、元の命令を復元 |
| 再起動後の持続性 | テザード方式と説明 | 永続化やカスタムファームウェアを導入しない |
表は2026年10月22日時点の同氏の技術解説とREADMEを、権限・機能・持続性で比較したものだ。独立した実機試験の結果ではなく、デモの機能が研究全体の上限を示すわけでもない。広い権限を得る手法が公開されても、その権限を利用する各種ツールまで一式そろったことにはならない、という違いがある。
実行環境にも条件がある。READMEはSmileBASIC 4.4.9と本体23.0.1に加え、macOSまたはLinuxで動くNode.js 22以上のPCを要求し、PCと本体が同じネットワークで互いに通信できることが前提だ。SmileBASICのセーブ領域には20 MiBを超える空きが必要だ。「ソフトウェアのみ」とは本体への改造チップの取り付けが不要という意味であり、外部PCまで不要になるわけではない。
READMEには10月21日の実機試験で、起動をやり直した3回目に検証・復元・後処理が通ったとの記録がある。最初の2回は検証チェックで停止し、後処理したという。この試験記録から一般的な成功率は算出できず、安定した利用環境としての評価には、さらに再現の蓄積が要る。
入口は旧世代のゲーム、到達先はfs
pepsipu氏が入口に選んだのは、Switch 2向けの新作ではなく、後方互換で動く初代Switch向けのSmileBASICだった。BASICのプログラムを解釈して動かすソフトであり、同氏は3DS向けのSmileBASICが過去にも脆弱性利用の対象になったことに着目している。
当初、CodexはブラウザーのWebKitを狙った。しかし、既存のJavaScript関数を別の関数に置き換えられるだけでは、システムサービスを自在に呼び出すところへ進みにくかったという。実行コードの読み取りを制限するXOM、ポインターの偽造を防ぐPAC、呼び出し先を制限するCFIといった保護が、必要な命令を探して実行する道を難しくしていた。
そこで同氏は、初代Switch向けゲームのコードを調べる方針を採った。初代SwitchはPACを備えず、ゲームのコードも復号して解析できることが理由だ。Switch 2のブラウザーの保護を正面からすべて破るのではなく、解析しやすい旧世代ソフトへ入口を移したことになる。
本人の説明では、CodexはSmileBASICの配列処理に32ビットの整数オーバーフローを発見した。要素を取り除く位置と個数を足した値が表現範囲を超えると、負の数へ折り返し、範囲の検査を通ってしまう。結果として、本来扱うはずのないメモリが配列へ入り、許された範囲の外を読み書きできるようになったという。
ただし、ゲーム内のメモリを書き換えられることと、システムサービスの権限を得ることの間には、もう一段ある。pepsipu氏はファイルシステムを扱うfsを選び、ファイルパスをそろえる正規化処理のバッファオーバーフローへ進んだ。用意した一時領域より長い内容をコピーできる欠陥と、Codexが見つけたキャッシュ構造を組み合わせ、fs内部の任意のメモリ読み書きに至ったと説明している。
つまり、今回の経路は旧ソフトの欠陥だけで完結していない。互換機能で動くアプリの弱点を、別の権限を持つfsの弱点へつないだ連鎖である。
署名を確認した後に、読み込む内容が変わる
fsを操作できると、コードを読み込む際の信頼関係にも手が届く。Switchのプログラムを読み込むldrというシステムモジュールは、fsから実行ファイルを受け取り、そのプログラムの権限や署名を確認する。pepsipu氏が示したのは、この受け渡しに含まれる不整合を利用する方法だ。
本来、開発者の鍵やプロセスの権限情報、配布用アーカイブのヘッダー、その中の実行ファイルは、署名とハッシュで結び付いている。正規の権限情報と署名が確認できれば、それに対応するプログラムだけが動くはずである。ただし、最終的に渡すファイルの中身がアーカイブ内のハッシュと一致するかどうかは、fsが保証する構造だった。
同氏によると、fsが正規アーカイブのハッシュと署名をldrへ提供した後、読み込み先のファイルシステムを別のものへ差し替えられた。正規の権限情報を残しながら、実行ファイルの本体だけを置き換えるため、署名の確認を通っても、実際に動くコードは別の内容になる。
暗号署名を数学的に偽造した成果とは性質が違う。署名が正しいという確認と、その後に供給される実行内容との結び付きを、侵害されたfsが崩せたのである。これは、署名チェックそのものに加えて、検証したデータを実行まで同じ状態に保つ必要があることを示す事例と読める。
研究ではさらに、コードを実行可能なメモリへ割り当てる権限を持つroというシステムモジュールの権限情報を利用し、fs自身のコードを書き換えたという。ここでも得たのはシステムモジュールの権限であり、OSの中核であるカーネルを乗っ取ったとする説明ではない。同氏は、組み込みシステムモジュールではfs以外を侵害する方法は現時点で持たないとも記している。
Codexが担った探索と、人が選んだ経路
pepsipu氏は研究のために、Codexが実機へ操作入力を送り、映像を受け取れる環境を作った。JetKVMを介してUSBでボタン入力を送り、HDMIで画面を確認する。クラッシュ後の再起動に備え、Bluetoothで動く機構に本体の電源ボタンを押させる仕組みまで用意していた。
ただ、短い指示を与えればAIが自律的に脱獄を完成させた、という説明は本人が訂正している。ブログ冒頭の冗談めいた指示文は実際の依頼ではなく、設定したユーザー領域のコード実行目標も成功しなかったという。脱獄そのものには約2週間の相当の労力がかかり、『マリオカート ワールド』の改造を1日で作らせた話とは分けている。
研究経路にも人の判断がある。Codexの複数の実行では音声やローカル通信などのサービスが候補に挙がった一方、本人は、他のサービスのコードを取り出して解析につなげられるfsを選んだ。AIによる欠陥発見と実装、人による標的の選択、実機での試行を組み合わせた研究だったことがうかがえる。
pepsipu氏は、今回の任意コード実行が自作ソフト開発を進め、カスタムファームウェアへの前進につながることを期待している。初代Switchでも試験したが、そちらの配布用パッケージはまだ用意していないとのことだ。Switch 2で広く使える開発基盤へ育つには、公開デモの再現性を確かめ、得た権限を利用するツールを整える段階が続く。その条件がそろえば、ゲーム改造の実演を越えて、開発者が本体の機能を調べ、自作ソフトを作るための足場になり得る。
