越獄功能與適用範圍
ns2jb 是一個僅需軟體即可運作的 tethered 越獄工具,針對 Switch 2 的韌體版本 23.0.1。它允許使用者以普通系統模組(sysmodule)或內建檔案系統模組的身份執行任意原生代碼。
透過此權限,使用者可以運行自製軟體(homebrew)、對 Switch 2 遊戲進行逆向工程與修改、將存檔備份至主機外部,並通過 MMIO 存取大部分 Switch 2 的週邊設備。開發者表示,這是目前已知的首個 Switch 2 越獄漏洞利用方案。
為了展示其能力,開發者使用該工具修改了 Switch 2 獨佔遊戲《瑪利歐賽車世界》(Mario Kart World),增加了新角色並進行了測試。
AI 輔助與自動化測試環境搭建
開發者建立了一套自動化測試框架,試圖讓 AI 工具 Codex 在無人介入的情況下完成越獄工作。該框架使用 JetKVM 設備通過 USB 發送控制器輸入並通過 HDMI 接收視頻輸出,以便 AI 能觀察主機狀態。
由於 Switch 2 當機後需要按下電源鍵才能重啟,開發者利用一個來自 Amazon 的藍牙燈開關裝置來自動按壓電源鍵。當槓桿落下時會觸發電源鍵,隨後機械結構的扭力會將槓桿抬起。
雖然開發者最初設定讓 Codex 嘗試透過 WebKit 瀏覽器漏洞取得用戶空間代碼執行權限,但該路徑因安全緩解措施(如 PAC、CFI 和 XOM)而受阻。最終,越獄過程耗時約兩週,主要由人工與 AI 協作完成,而《瑪利歐賽車世界》的修改則是在一天內透過 AI 輔助快速完成。
利用 SmileBASIC 漏洞取得初步控制權
開發者轉向攻擊 Switch 1 遊戲,因為這些遊戲由第三方開發者編寫,較少使用 PAC(指針認證代碼)和 CFI(控制流完整性)等現代安全保護機制,且其信任根已被破解,可讀取解密後的代碼。
重點目標是 SmileBASIC 遊戲,該遊戲曾在 3DS 上被利用過漏洞。Codex 在 SmileBASIC 的解釋器中發現了一個 32 位元整數溢出漏洞:當從陣列移除元素時,位置與計數的和可能繞回變成負數,導致記憶體移動操作錯誤地將陣列前的 8 個位元組複製到陣列內部。
這使得開發者能夠讀寫超出邊界的記憶體,因為指針佔用了字串長度欄位的位置,從而獲得任意讀寫(ARW)原語。透過此漏洞,開發者在 Switch 1 上取得了 ROP(返回導向編程)執行能力,為後續攻擊更高權限的系統模組奠定了基礎。
突破檔案系統模組限制以載入自訂代碼
為了獲得更高的系統權限,開發者選擇攻擊內建的檔案系統模組(fs)。該模組負責提供解密後的代碼並處理遊戲內容歸檔(NCA)的載入請求。
開發者在 fs 模組的 GetEntryType IPC 命令中發現了一個緩衝區溢出漏洞。當路徑中包含反斜槓組成的父目錄元件時,會分配一個固定大小的臨時堆緩衝區,若輸入路徑過長則會發生溢出。
透過將溢出的數據覆蓋到 BufferedStorage 物件的快取條目指標上,開發者實現了對檔案系統模組內存的控制。接著,他們替換了載入器(ldr)請求的 ExeFS 對象為自訂的臨時檔案系統,該系統包含有效的元數據但執行檔可被替換為任意代碼。
由於 fs 模組在載入器檢查簽名之前已提交原始 NCA 標頭的哈希與簽名,因此第二道簽名檢查會通過。這使得開發者能夠以 ro 模組(具有映射可執行記憶體權限)的身份執行自訂原生代碼,進而修改 fs 模組的代碼並獲得對其他系統模組的讀寫權限。
未來發展與社群反應
開發者指出,目前該越獄僅能 compromises(攻陷)fs 模組,尚未找到攻擊其他內建系統模組的方法。未來的改進方向包括將 fs 漏洞移植到 WebKit 以實現離線越獄、尋找其他內建模組的漏洞,以及直接協調加密硬體進行 NCA4 解密。
該漏洞已在 Switch 1 上測試成功,但尚未打包發布。與 Modchip 不同,此軟體方案不需要外部硬體,但功能受限於韌體版本。
社群評論指出,若 fs 模組的讀寫權限確實可被利用來解密遊戲代碼,可能會加速 Switch 2 遊戲轉錄(recomp)到其他平台的速度。此外,有網友確認自動按壓電源鍵的裝置為 SwitchBot Bot,並對 AI 在複雜系統漏洞挖掘中的應用表示興趣與質疑。




