
Эксплойт гипервизора PS5 для прошивок 1.xx-2xx.
Эксплойт гипервизора PS5 для прошивок <= 2.xx. В репозитории содержатся две уязвимости и две цепочки эксплойтов, они независимы друг от друга, и можно использовать любую из них. Один эксплойт предоставлен в основном для сохранения (/_old_jump_table_exploit), использовать нужно только основную цепочку эксплойтов (эксплойт QA-флагов).
Это исследование было представлено на hardwear.io NL 2024, слайды можно найти здесь. Запись выступления будет опубликована позже.
Эксплойт таблицы переходов
Первый эксплойт использует уязвимость, при которой таблицы переходов кода гипервизора являются общими с гостевой ОС, и содержится в /_old_jump_table_exploit/. Перехватив запись в таблице переходов для гипервызова VMMCALL_HV_SET_CPUID_PS4, можно добиться выполнения кода в гипервизоре. Мы запускаем ROP-цепочку, которая отключает Nested Paging (NPT) и Guest Mode Execute Trap (GMET), что позволяет отключить eXecute Only Memory (XOM), также известную как xotext, в записях таблицы страниц (PTEs) ядра, чтобы снять дамп, а также включить запись в PTEs для перехвата/патчинга ядра.
Этот метод требует довольно большого количества гаджетов и смещений, что является основной причиной, по которой этот эксплойт не является основным. Кроме того, в настоящее время он ломает гипервизор только на том ядре, на котором выполняется ROP-цепочка; на других ядрах гипервизор остаётся активным, и его потребуется отключить.
Эксплойт QA-флагов
Основной и рекомендуемый эксплойт использует тот факт, что системные флаги контроля качества (QA) являются общими между гипервизором и гостевой ОС. При инициализации гипервизора код инициализации, создающий вложенные таблицы страниц, проверяет QA-флаги на наличие флага отладки системного уровня (SL). Если этот флаг установлен, вложенные записи таблицы страниц (PTEs) не будут содержать бит xotext для страниц .text ядра, а также страницы .text ядра будут иметь установленный бит записи.
Эти флаги не переинициализируются защищённым загрузчиком при выходе из спящего режима, в отличие от гипервизора. Установив флаг SL, переведя систему в спящий режим и возобновив её работу, мы можем изменить таблицы страниц гостевой ОС, сделав страницы .text ядра читаемыми/записываемыми, что позволяет снять дамп ядра и выполнять перехваты/патчи.
.data гипервизора; если это для вас важно, снимите дамп с помощью эксплойта таблицы переходов после портирования или сначала отключите вложенное разбиение на страницы (это в TODO).Эта полезная нагрузка эксплойта собирается с использованием PS5-Payload-Dev SDK. Также обратите внимание, что сборка для hen/ немного особенная, так как она компилируется в плоский бинарный файл, который копируется в кодовый кейв ядра. Весь код в hen/ выполняется в режиме супервизора/ядра.
byepervisor.elfbyepervisor.elf снова (если вы используете ELF-загрузчик Джона Торнблума, загрузчик должен продолжать принимать полезные нагрузки после возобновления работы; если нет, эксплойт UMTX нужно будет запустить снова)byepervisor.elf нужно было отправлять только один разТе, кто заинтересован в участии в исследованиях/разработке для PS5, могут присоединиться к Discord-серверу, который я создал, здесь.