
Switch 2で、ゲーム改造や自作ソフトの実行につながるソフトウェア脱獄が実証されました。現在の手法はuserlandと呼ばれる一般ユーザー権限の範囲にとどまり、カーネルを含む本体全体は制御できません。初代Switchで2018年に見つかった起動時の脆弱性とは、仕組みや修正の難しさが異なります。
SmileBASICの配列処理からメモリーを読み書き
この手法「ns2jb」は、Switch用のプログラミング環境「SmileBASIC 4」を利用します。SmileBASICは利用者がコードを書いて実行できるインタープリターで、3DS版も過去に別の脱獄手法に使われました。
配列から要素を削除する処理では、位置と削除数を足した値が32ビット整数の範囲を超えると、値が折り返す問題がありました。研究者のSammy Hajhamid氏は、この整数オーバーフローを使い、配列の直前にあるポインターを読み書きに利用したと説明しています。
さらに、Switch 2のファイルシステムサービスにもバッファーオーバーフローが見つかりました。ファイルパスの正規化処理で一時バッファーの範囲を超えて書き込み、キャッシュされたデータへのポインターを操作することで、任意のメモリー読み書きにつなげたといいます。
自作ソフトやゲーム改造に使えるuserland権限
得られた権限では、通常のシステムモジュールやファイルシステム用モジュールとしてネイティブコードを実行できます。これにより、自作ソフトの実行、ゲームの解析や改造、セーブデータのバックアップ、本体周辺機器へのアクセスが可能になるとHajhamid氏は述べています。
実証例として、Switch 2専用ソフト『マリオカート ワールド』に新しいキャラクターを追加した改造が公開されました。脱獄した本体で動作する簡単なデモや開発ツールも披露されています。
現在の実行環境は比較的小さなサンドボックスに制限されています。
最新ファームウェアで動作、利用には条件も
ns2jbは、最新のシステムソフトウェア23.0.1で動作します。一方、Switch 2本体だけで完結する方式ではなく、同じネットワーク上のmacOSまたはLinux搭載パソコンからNode.jsパッケージを実行する必要があります。
この脱獄は「テザー型」とされ、パソコンとの接続を伴います。Hajhamid氏は、研究用の仕組みを作り、問題の発見から脱獄の実現までに約2週間を費やしたと記しています。
SmileBASIC 4は、脱獄手法が公になった後にSwitchのオンラインストアから各地域で削除されました。日本向けの体験版は引き続き利用可能とされていますが、過去にソフトを入手していない本体では、手法を実行できる範囲が狭まる可能性があります。
初代Switchの起動時脆弱性とは修正方法が異なる
2018年に初代Switchで見つかったFusée Geléeは、Nvidia Tegra X1チップの読み取り専用ブートROMにある欠陥を利用しました。USBリカバリーモードで過大なデータを処理させ、保護されたメモリー領域を書き換えて起動時にコードを実行する仕組みでした。
初代Switchの手法では、電源投入時に本体へ物理的にアクセスし、USBリカバリーモードへ移行させる必要がありました。ブートROMは製造後に更新できないため、脆弱なチップをソフトウェア更新で修正できず、対策にはハードウェアの改訂が必要とされました。
今回のSwitch 2の手法は、SmileBASICやファイルシステムサービスのソフトウェア上の欠陥を利用します。現行ファームウェアで動作するものの、今後の更新で修正される可能性があり、継続的な利用に必要な更新が脆弱性を塞ぐこともあり得ます。初代Switchの起動時脆弱性と今回の脱獄の方式の違いは、でも扱われています。










