
Экспериментальный эксплойт ядра на основе webkit (Arb. R/W) для PS5 на прошивке <= 4.51FW
В этом репозитории содержится экспериментальная реализация ROP на WebKit для эксплуатации ядра PS5, основанная на Use-After-Free (UAF) в IPV6 от TheFlow, который был опубликован на HackerOne. Стратегия эксплуатации в основном основана на PoC TheFlow для BSD/PS4 с некоторыми изменениями, чтобы учесть раздражающую раскладку памяти PS5 (подробнее см. раздел Research Notes). Эксплойт устанавливает примитив произвольного чтения / (полу-произвольной) записи. Данный эксплойт и его возможности имеют множество ограничений, поэтому в основном он предназначен для разработчиков, желающих поэкспериментировать и провести реверс-инжиниринг некоторых частей системы.
Благодаря последним улучшениям стабильности надёжность составляет около 80%. Этот документ будет содержать исследовательскую информацию о PS5, а эксплойт будет продолжать развиваться и улучшаться со временем.
Те, кто заинтересован в участии в исследовании/разработке для PS5, могут присоединиться к discord, который я создал, здесь.
Эксплойт теперь должен поддерживать следующие прошивки:
dns.conf, указав manuals.playstation.net на IP-адрес вашего ПКpython fakedns.py -c dns.confpython host.py0.0.0.0
Чтобы использовать ELF-загрузчик, запускайте эксплойт до завершения. По завершении он запустит сервер на порту :9020. Подключитесь и отправьте ваш ELF на PS5 через этот порт, и он будет запущен. Если ELF не роняет браузер, можно продолжать запускать ELF-файлы бесконечно.
Эксплойт работает в 5 этапов и в основном следует той же стратегии, что и PoC от theflow.
ip6_pktopts и получение двух сокетов, указывающих на один и тот же pktopts / перекрывающихся (master-сокет <-> overlap spray-сокет)pktopts на master-сокете и подмена его спреем ip6_rthdr, содержащим перекрытие с тегом tclass.pktopts/rthdr для утечки kqueue из слаба 0x200 и pktopts из слаба 0x100.pktopts и найдите перекрывающийся сокет, чтобы использовать IPV6_RTHDR как примитив чтения/записи.Стабильность этого эксплойта составляет около 30% 80-90% и имеет две потенциальные точки отказа. В порядке убывания наблюдаемой вероятности:
Судя по различным тестам и дампам с помощью примитива чтения, похоже, что PS5 вернулся к размеру страницы 0x1000 по сравнению с 0x4000 у PS4.
Также похоже, что на PS5 соседние страницы редко принадлежат одному и тому же слабу, так как в соседних страницах вы получите совершенно разные данные. Раскладка памяти кажется более разбросанной.
Часто, когда PS5 паникует (по крайней мере в контексте webkit), будет ужасный звуковой вывод, так как аудиобуфер каким-то образом повреждается.
Иногда это повреждение звука сохраняется до следующей загрузки; непонятно, почему.
Как и на PS4, после паники PS5 потребуется вручную дважды нажать кнопку питания на консоли для перезагрузки.
Это нормально, что PS5 тратит нелепое количество времени на перезагрузку после паники, если она изолирована от интернета (к сожалению). Ожидайте, что загрузка займёт 3-4 минуты.