Nintendo Switch 2 взломали с помощью ИИ-агентов Codex: вышел джейлбрейк ns2jb

Исследователь выпустил ns2jb, по его словам, первый программный (без аппаратных модов) привязанный джейлбрейк для Nintendo Switch 2, код которого опубликован в открытом репозитории. Джейлбрейк позволяет запускать произвольный native-код с правами любого обычного системного модуля консоли, а также встроенного модуля fs, отвечающего за файловую систему. Автор оговаривается: «насколько мне известно», это первый подобный эксплойт для Switch 2.

Большую часть исследования и написания кода выполняли несколько экземпляров ИИ-агента Codex. Сначала Codex попробовал путь через WebKit: он заявил, что получил «нативный захват потока управления» с помощью известной уязвимости (n-day) в WebKit, загруженной через подставной Wi-Fi-портал. Однако эта попытка не удалась, и автор переключился на другой маршрут.

Второй путь, через игру для Switch 1 SmileBASIC, чей интерпретатор BASIC ранее уже был взломан в проекте smilehax, давшем выполнение кода на 3DS. Codex нашёл в интерпретаторе 32-битное переполнение целого числа: при удалении элементов из массива сумма позиции и количества могла «обернуться» и стать отрицательной, обходя проверку границ. На примере команды REMOVE R,&H60000000,&H3FFFFFFF сумма превращалась в 0x9fffffff, из-за чего интерпретатор выполнял memmove(backing, backing - 8, 32), копировал в массив 8 байт, которые ему предшествуют. Эти 8 байт в SmileBASIC всегда содержат указатель на сам массив, поэтому такая операция давала произвольное чтение и запись через подстроки переменной R[0] и в итоге, цепочку ROP на Switch 1.

Далее атака была перенесена на встроенный модуль fs Switch 2. Путь вида «/..\» с обратной косой чертой попадает в функцию, которая копирует его во временный буфер кучи размером 0x301 байт, буфер можно переполнить. Codex обнаружил, что переполнение задевает кэш-запись объекта BufferedStorage, что при установленном «dirty bit» даёт произвольное чтение и запись (ARW) в fs. С помощью ARW автор нашёл объект соединения SmileBASIC и подменил в нём сохранённый PID на 1, получив «FullPermission», права на привилегированные файловые операции, и выгрузил внутреннее хранилище и код всех обычных системных модулей для офлайн-анализа Codex-ом. Из них отображать исполняемый код в память разрешено только модулю ro, защищённому механизмами CFI, PAC и XOM, так что автор пошёл дальше через логическую ошибку в механизме загрузки программ.

Игры и системные модули Switch распространяются как архивы NCA с файловой системой ExeFS; при запуске программы загрузчик (ldr) просит fs открыть ExeFS, и fs передаёт ему хеш и подпись заголовка NCA для проверки подлинности. Поскольку именно fs отвечает за соответствие реально отдаваемой файловой системы этому заголовку, а у автора уже есть ARW внутри fs, он подменил объект ExeFS за IPC-хендлом загрузчика на свою временную файловую систему: она должна отдать подлинный main.npdm разработчика для первой проверки, но сам исполняемый файл main может быть произвольным, а вторая проверка подписи всё равно проходит, так как fs уже отправил корректные хеш и подпись оригинала. Переписав через ARW хендл события IEventNotifier значением 0xffff8001 (ядро интерпретирует его как «хендл текущего процесса»), автор получил управляемый из SmileBASIC хендл события IPC-соединения загрузчика и мог выбирать момент, когда fs обработает его сообщение. Используя main.npdm модуля ro, у него есть разрешение на системные вызовы ядра вроде MapProcessMemory, автор запустил собственный код и с его помощью патчил код самого fs. В итоге получилось выполнение произвольного кода с правами любого обычного системного модуля, для которого доступен main.npdm (а скопировать его можно для любого модуля или игры через соединение fsp-srv); для fs как встроенного модуля диспетчер служб не проверяет списки доступа, что даёт возможности, сравнимые со старым хаком smhax на 3DS.

В тексте указаны такие применения джейлбрейка: homebrew-приложения, реверс-инжиниринг и моддинг игр Switch 2, бэкап файлов сохранений и доступ к периферии консоли через MMIO; о пиратстве автор не упоминает. В качестве демонстрации Codex по просьбе автора смодифицировал эксклюзив Switch 2 Mario Kart World, мод был полностью «вайбкодинг» и занял один день, тогда как сам джейлбрейк потребовал около двух недель серьёзной работы. Друзьям автора из Dabney House он благодарен за помощь в выборе персонажей для мода и его тестировании.

Ключевые факты

  • ns2jb, программный привязанный (tethered) джейлбрейк Nintendo Switch 2 с открытым репозиторием; по словам автора, это первый подобный эксплойт для консоли
  • Цепочка эксплойта: 32-битное переполнение целого числа в интерпретаторе игры SmileBASIC (Switch 1) → переполнение буфера в системном модуле fs → подмена файловой системы ExeFS у загрузчика → код с правами fs и других обычных системных модулей
  • Большую часть поиска уязвимостей и написания эксплойта выполняли несколько экземпляров ИИ-агента Codex; попытка через WebKit и n-day-уязвимость не удалась
  • Сам джейлбрейк потребовал около двух недель серьёзной работы; демонстрационный мод игры Mario Kart World Codex сделал за один день «вайбкодингом»
  • Заявленные применения, homebrew, реверс-инжиниринг, моддинг игр, бэкап сохранений и доступ к периферии через MMIO

Почему это важно

Это заявленный первый программный джейлбрейк новой консоли Nintendo Switch 2, причём большую часть технической работы, поиск уязвимостей, написание эксплойта и даже модификацию игры, выполнили ИИ-агенты Codex, а не человек напрямую. История показывает применение агентных ИИ-систем не в типичном программировании, а в offensive security, многоэтапном поиске цепочки уязвимостей в реальном продукте.

Кому это важно

Разработчикам homebrew-софта и моддерам для консолей Nintendo, исследователям безопасности встраиваемых систем, а также всем, кто следит за тем, на что уже способны агентные модели типа Codex при решении сложных, многошаговых технических задач за пределами обычной разработки.

Как это применить

Код и методика опубликованы в репозитории ns2jb в открытом доступе. Джейлбрейк привязанный, то есть требует повторного запуска через внешнюю привязку при каждом включении консоли, хотя детали механики в тексте не раскрыты. Заявленные сценарии использования, запуск homebrew-приложений, реверс-инжиниринг и моддинг игр, резервное копирование сохранений и доступ к аппаратной периферии через MMIO.

Можно ли доверять

Это самостоятельная публикация исследователя (имя в доступном тексте не раскрыто, известен только домен pepsipu.com) с открытым исходным кодом эксплойта, что позволяет проверить заявления независимо; ключевые утверждения в тексте намеренно оговорены («насколько мне известно»), а неудачная попытка через WebKit честно описана как провал. Реакции или патча от Nintendo в материале не упомянуто, и исходный текст статьи обрывается до конца, часть материала (включая последнюю сноску) осталась за пределами разбора.

Риски и подводные камни

Получение произвольного выполнения кода с правами системных модулей, мощная возможность, и Nintendo может закрыть использованные уязвимости обновлением прошивки; в тексте не указано, на каких версиях firmware эксплойт работает. Привязанный характер джейлбрейка означает, что процедуру, вероятно, нужно повторять при каждом перезапуске консоли, но механика этого не описана. Автор прямо указывает заявленные применения (homebrew, моддинг, бэкап сохранений, доступ к периферии) и не упоминает пиратство, но принципиальная возможность произвольного кода на системном уровне всегда несёт более широкие риски для безопасности устройства.

«Надеюсь, это поможет сообществу любителей самодельного софта продвинуться к созданию кастомной прошивки (CFW).»

— автор ns2jb