安全研究员 Sammy Hajhamid 携代号为 ns2jb 的利用工具,打破了任天堂次世代游戏主机的防线。这套针对 Switch 2 最新固件 23.0.1 的纯软件越狱方案,通过硬件测试架与 AI 辅助,成功在系统服务模块(sysmodule)以及内置的文件系统(fs)模块中获得了原生代码执行权限,并展示了对《Mario Kart World》的角色替换。

社交网络随即掀起一场狂欢,许多人将其解读为次世代硬件已被完全攻克,甚至演绎出 AI 两周独立越狱的传奇故事。但这并不是一次彻底的底层沦陷。穿透演示视频可以看到,这只是一个高度依赖外部宿主机、重启即失效且尚未触及内核的系留式概念验证。它真正撕开的,不是现代硬件的正面防御,而是任天堂为了保住庞大旧游戏资产所留下的向下兼容缺口。

固件23.0.1下的系留实相:脆弱的受限概念验证

剥除外界渲染的滤镜,ns2jb 远非普通玩家所期待的自制系统(CFW)。该技术文章发布于 2026 年 10 月 18 日,其 GitLab 仓库于 2026 年 10 月 21 日上线。从工程实现来看,这套利用链对运行环境的要求近乎苛刻:目标机必须停留在系统固件 23.0.1,安装有特定版本 4.4.9 的 SmileBASIC,且机器内需预留超过 20 MiB 的该游戏存档空间。同时,同一局域网内必须有一台运行 Node.js 22+ 的 macOS 或 Linux 计算机充当控制节点。

ns2jb 攻击链路与权限边界 向下兼容入口 SmileBASIC 4.4.9 路径解析溢出 fs 模块 0x301 堆溢出 用户态系统特权 普通与内置 sysmodule 内核防御壁垒 Kernel / TrustZone 未攻破 / 无控制权 当前公开仓库局限性 系留式运行 · 无持久化驻留 · 仅执行两个验证函数并恢复指令 · 依赖外部电脑时序控制

更为关键的是,公开仓库所展示的代码行为极为有限。它并未构建一个开箱即用的自制程序运行环境,而是在注入 fs 模块后,仅执行了两个微型原生函数以验证内存读写能力,随后立即还原原始指令,防止触发系统崩溃。由于该机制缺乏任何持久化能力,一旦按下关机键,机器便立刻恢复出厂般的状态。

这种利用链对系统执行时序也极为敏感。在作者 2026 年 10 月 21 日记录的物理环境测试中,前两次尝试均因校验中断而触发清理流程,直到第三次从全新开机状态下注入才勉强成功。截至 2026 年 10 月 22 日,全球安全社区内尚未出现任何包含完整执行日志与明确测试者的第三方独立复现案例。

  • 风险.ns2jb 并非可供玩家直接安装的自制系统,而是一个成功率不稳定、随时会被官方小版本更新封杀的有线系留概念验证。

正面防线的代价:硬件加固逼退正面进攻

为什么黑客放弃了以往主机破解最常用的浏览器入口,转而选择如此曲折的路径?答案在于 Switch 2 在硬件防御上的大幅补强。

初代 Switch 之所以被黑客彻底瓦解,是因为其搭载的英伟达 Tegra X1 芯片存在无法通过软件修补的 BootROM 级硬件缺陷 Fusée Gelée。到了 Switch 2,任天堂全面清扫了低级错误,引入了指针认证码(PAC)、执行独占内存(XOM)以及细粒度的控制流完整性(CFI)机制。

这种现代化的移动架构防御体系,直接将传统的正面攻防推向了死角。以 WebKit 浏览器为例,即便攻击者通过 Wi-Fi 认证门户加载了已知漏洞获取任意内存读写,XOM 也会阻止其读取可执行代码以寻找跳转片段;即便推算出了地址,PAC 机制也会要求对调用指针进行硬件级签名;即便绕过签名,CFI 依然会严格核对调用点的类型一致性。

当正面战场被现代安全规范焊死,历史遗留的兼容代码就成了唯一的泄压阀。

面对正面坚不可摧的防线,攻击者将目光转向了生态负债。为了保障向后兼容,Switch 2 必须能够运行初代 Switch 的旧软件。然而,初代架构在设计之初并未引入 PAC 机制,且其根信任密钥在数年前已公之于众。这种新老技术交替下的缝隙,为绕开硬件防御提供了现成的跳板。

致命的向下兼容:SmileBASIC 与文件系统的多米诺骨牌

承担突破口角色的,正是曾经在 3DS 时代就发生过越狱事件的 Switch 1 游戏 SmileBASIC。该软件内包含一个庞大的 C++ 语言解释器,其旧架构代码在 Switch 2 的兼容环境下运行时,天然失去了 PAC 与 CFI 的硬件庇护。

代码中的逻辑破绽出现在数组元素移除函数。在执行删除操作时,解释器试图验证指定位置与删除数量之和是否合法,却忽略了 32 位有符号整数的翻转问题。当传入特定超大数值后,加法运算溢出为负数,使得越界判定被直接绕过。借助底层内存块复制指令的逻辑偏差,数组前序包含自身地址指针的关键结构被逆向覆盖,赋予了攻击者在游戏沙箱内的越界读写原语。

Switch 2 跨世代安全机制反差 Switch 2 原生沙箱环境 硬件机制:ARMv8.3+ PAC 指针认证 内存防护:XOM 执行独占内存拦截 控制流:CFI 严格类型检验 防御态势:正面攻击路径全面收紧 向下兼容执行层 (SmileBASIC) 硬件机制:无 PAC 支持(遗留架构限制) 代码基础:庞大历史 C++ 解释器代码 根信任:一代根密钥已完全泄露公开 防御态势:整数溢出轻易撕裂沙箱边界

拿到沙箱读写权后,渗透进一步蔓延至系统的内置服务模块。研究员将目光锁定在系统底层的 fs 文件系统服务上,其根源在于 Switch 2 为了延续旧版文件操作规范,保留了大量未作架构重构的历史逻辑。

在 fs 模块处理路径规范化逻辑中,当路径包含特定反斜杠父目录结构时,系统会分配一段固定大小为 0x301 字节的临时堆内存。然而由于缺乏严格的长边界截断,超长路径可诱发堆缓冲区溢出。攻击者通过覆写缓存节点指针,将该连接对象的权限标识直接置换,从而取得了最高文件权限。最终,通过在程序加载器与文件系统服务之间制造竞态读写,将合法游戏的可执行镜像掉包替换,达成了在系统服务层运行任意原生代码的目的。


剥离神话的协同:自动化代工并非自主黑客

围绕 ns2jb 的另一个核心话题,是开发过程中引入的 AI 工具。网络舆论将这一过程高度简化为 AI 独立攻破游戏机,但在实际工程中,两者的分工界限极其清晰。

整套测试架包含两台 JetKVM、通过 HDMI 捕捉画面并通过 USB 发送手柄指令,配以一个从亚马逊购入的蓝牙物理按键拨片,用于在系统异常宕机时自动下压电源键进行硬重启。在硬件测试闭环内,大语言模型并未展现出任何跨维度的全局架构能力。

Code
[人类安全研究员] ──(战略决断:放弃 WebKit,调转方向针对兼容层)──┐
                                                           │
┌──────────────────────────────────────────────────────────┘
▼
[AI 工具 (Codex)] ──(战术执行:定位 SmileBASIC 整数溢出、组装内存原语)
▼
[硬件闭环测试架] ──(自动化验证:JetKVM 信号反馈、物理机械拨片硬重启)

真正的破局节点全由人类工程师主导。当 AI 在 WebKit 的 PAC 与 CFI 防御前原地打转时,是人类推断出向下兼容层缺乏硬件指针保护,从而叫停了正面爆破,选定了旧软件突破口;面对复杂的系统微内核结构,也是人类凭借逆向经验选定了具有解密能力的 fs 模块。

AI 所承担的角色,更像是一个拥有无限体力的代码分析员与装配工。它负责在人类圈定的局部代码内,快速筛查诸如数组索引溢出的经典错误,并根据已知逻辑填充利用原语。作者甚至在文档中坦承,自己并未完全逐行通读由 AI 组装打包的分发代码。离开人类的技术图纸,AI 既无法自主制定多阶段攻击策略,也无法解决复杂硬件环境下敏感的时序竞争。

  • 结论.这套方案验证了自动化代码分析在辅助渗透中的工程价值,但远未达到自主发现多阶段复合提权链的智能水准。

权限鸿沟与修补倒计时

判断一次主机越狱的实际威力和生命周期,关键在于它所抵达的系统层级。在现代操作系统安全模型中,系统服务权限与内核(Kernel)控制权之间存在着本质鸿沟。

ns2jb 取得的是普通 sysmodule 以及 fs 模块的权限,这足以支撑读取存储数据、加载简单的文件系统钩子,甚至修改部分游戏角色的模型文件。但这不代表系统被彻底接管。它无法绕过底层内核的特权隔离,不能随意安装系统级的非签名自制程序,更谈不上修改系统引导链以实现自制固件持久化。

对于任天堂而言,这样的漏洞虽然令其尴尬,但绝非不可收拾的死局。当年面对初代 Switch 芯片级的只读漏洞,任天堂束手无策,只能等待硬件改版;而眼前的 ns2jb 是一套纯软件利用链,攻击面清晰地暴露在特定的游戏解释器与文件路径处理函数上。

任天堂甚至不需要对 Switch 2 的系统架构大动干戈,只要向 eShop 推送一个 SmileBASIC 的安全更新,修复那处已被公开的整数溢出;或者推送固件补丁,在 fs 服务的规范化函数中加入长度判定,这条由向下兼容链条拼凑出的利用链路就会瞬间断裂。在软硬件长期对抗的拉锯战里,靠遗留代码偷袭得手的第一枪已经打响,但围绕系统最核心控制权的较量,才刚刚拉开序幕。