Автор Atmosphère объяснил значение нового эксплойта Nintendo Switch 2: возможности, ограничения и перспективы
TL;DR
Заметки Майка Хескина (HexKyz), лидера Atmosphère, об уязвимости, обнаруженной в Switch 2:
По его словам, в основе новой цепочки эксплойтов лежит давно известная уязвимость FS, а главная заслуга ИИ заключается в том, что он смог разработать сложную технику управления кучей памяти (heap), которая позволила её использовать.
Эксплойт даёт полный контроль над пользовательским пространством системы (userland). Это позволяет дампить игры, приложения и системные модули, а также модифицировать данные. При этом доступ к ядру и криптографическим ключам получить не удаётся. (Без ключей дампы игр останутся зашифрованными и не будут пригодны для использования).
Эксплойт работает на прошивке 23.0.1 и ниже. В будущих обновлениях уязвимость, скорее всего, закроют.
Автор также допускает возможность сделать эксплойт untethered, то есть добиться его автоматического запуска без необходимости каждый раз использовать отдельную точку входа. Для этого нужно будет внести изменения в системные данные консоли и добиться, чтобы эксплойт корректно запускался сразу после включения устройства. Пока неизвестно, получится ли это реализовать.
Перевод поста
Итак, вот что мы имеем:
- Уязвимость FS была известна задолго до того, как появилась в Atmosphère, причём довольно давно. По крайней мере, тогда считалось, что её нельзя использовать для эксплуатации, и она просто оставалась в коде на случай, если в будущем что-то изменится в FS и сделает её полезной. Как выяснилось, никаких изменений не потребовалось: уязвимость изначально была пригодна для эксплуатации.
- Главным препятствием была организация кучи (heap) в FS: в ней крайне мало полезных указателей. Техника, использованная LLM, тоже была известна, хотя и в несколько иной форме: нужно найти способ создавать новые объекты IStorage в куче и перехватывать указатели чтения и записи этих объектов. Здесь использовался механизм «BufferedStorage», но концепция та же. Настоящая сложность заключалась в том, чтобы достаточно долго удерживать объекты в куче и добиться того, чтобы все наши предыдущие попытки (с использованием других уязвимостей, а не этой) оказывались в свободной памяти.
- Весь процесс манипуляций с размещением объектов в куче (heap grooming) — действительно новая и ценная часть работы ИИ. Это ужасно запутанный процесс, но он доказывает, что такой подход действительно работает. Кроме того, код настолько нечитаем, что человеку практически невозможно разобраться в нём без колоссальных усилий. Поэтому перенос эксплойта на другие системы будет сложным, но вполне осуществимым.
- Начиная с произвольного чтения/записи (arbitrary read/write, ARB R/W), дальнейшие этапы уже хорошо известны и ранее использовались: получение указателя на PID 1, создание читов, обработчики исключений, манипуляции с обработчиками и так далее.
- Имея доступ к FS, можно использовать её как своего рода оракул для дампа любого бинарного файла, расположенного ниже уровня KIP, то есть игр, приложений и системных модулей, не относящихся к KIP.
- Получить ключи или ключевой материал через FS нельзя.
- Продвинуться выше по привилегиям (например, до ядра) через FS не проще, чем через любой другой системный модуль.
- Возможно, удастся скомпрометировать и другие KIP. Для этого существует техника, которую не рассматривали и не обсуждали в записи блога об эксплойте.
- SmileBASIC не является обязательным условием: для этого подойдёт любая точка входа, например игра для S1, игра для S2 или браузер. Однако разработка велась для точки входа через SmileBASIC, поэтому многие поспешат воспользоваться именно ею. Следует понимать, что этот подход можно перенести на что угодно, а команда FS, раскрывающая уязвимость, доступна практически везде.
- В более старых версиях прошивки всё ещё могут быть другие интересные нераскрытые возможности, которые потенциально позволят продвинуться глубже в систему. Например, в версии 19 была уязвимость FS, позволявшая дампить часть памяти ещё до этого случая.
- Существуют и другие частные уязвимости FS, но эта, безусловно, оказалась лучшей из доказавших свою эффективность. Есть вполне реальная вероятность, что это будет единственная возможность за долгое время эксплуатировать систему на таком глубоком уровне.
- Эта цепочка эксплойтов — современный аналог эксплойта «nspwn» для первой Nintendo Switch. Если вы не помните его или тогда ещё не интересовались этой темой, это была уязвимость FS, позволявшая выполнять произвольный код через ARB в похожем стиле.
- Теоретически этот эксплойт можно сделать «untethered» — работающим без необходимости повторного подключения к внешнему устройству или запуска через внешнюю точку входа. Для этого потребуется заранее изменить сохранение системы (system save data), но ранее мы уже доказывали возможность сделать это с помощью другого набора уязвимостей. Однако обеспечить полезное расположение объектов в куче сразу после загрузки системы — совершенно отдельная проблема, и пока неясно, удастся ли её решить.
Есть немало аргументов как за обновление прошивки, так и против него.
С одной стороны, это очень мощный эксплойт. Выше FS в пространстве пользовательских процессов (userland) подняться невозможно. Это означает, что всё, что находится за пределами userland, остаётся недоступным для данного эксплойта. В частности, компрометация FS никак не упрощает эксплуатацию ядра.
С другой стороны, эксплойт даёт полный контроль над пользовательским пространством, что позволяет создавать дампы, модифицировать данные и выполнять другие подобные действия. Однако эта возможность навсегда останется ограниченной прошивкой версии 23.0.1, поскольку уязвимость вскоре будет закрыта обновлением.
В старых версиях прошивки отсутствует множество защитных механизмов, что упрощает эксплуатацию системы. В будущем это может оказаться важным фактором.
Обратите внимание: сам по себе доступ к коду всех системных модулей (sysmodule) практически не имеет значения для эксплуатации. Ни один другой системный модуль не обладает большими возможностями, чем FS.
P.S. Релизу Zelda: Ocarina of Time пока ничего не угрожает. Выдыхаем.