Byepervisor, première exploit de l'hyperviseur PS5

Specter dévoile sur le github PS5Dev le premier exploit de l'hyperviseur PS5 compatible sur les firmware 1.X.X a 2.X.X


Le développeur Specter vient de posté Byepervisor, ce poste englobe l'arrivé 2 exploit de l'hyperviseur à destination de la Playstation 5, les deux exploits permettent respectivement d'hacker l'hyperviseur en version 1.X.X et 2.X.X.
Elles sont indépendantes l'une de l'autre et l'une ou l'autre peut être utilisée. Un exploit est fourni principalement pour la préservation (/_old_jump_table_exploit), seule la chaîne d'exploitation principale doit être utilisée (QA flags exploit).

Explication technique : 

Le premier exploit utilise une vulnérabilité où les tables de saut du code de l'hyperviseur sont partagées avec le noyau invité, et est contenu dans /_old_jump_table_exploit/. En détournant l'entrée de la table de saut pour l'hypercall VMMCALL_HV_SET_CPUID_PS4, l'exécution de code dans l'hyperviseur peut être réalisée.Nous exécutons une chaîne ROP qui désactive Nested Paging (NPT) et Guest Mode Execute Trap (GMET), ce qui nous permet de désactiver eXecute Only Memory (XOM) aka xotext dans les Page Table Entries (PTE) du noyau pour les vider, ainsi que d'activer l'écriture dans les PTE pour hooker/patcher le noyau également.

Cette méthode nécessite un bon nombre de gadgets et de décalages, ce qui est la principale raison pour laquelle cet exploit n'est pas le principal. De plus, il ne casse actuellement l'hyperviseur que sur le cœur sur lequel la chaîne ROP tourne, l'hyperviseur est toujours actif sur les autres cœurs et doit être désactivé.

QA Flags Exploit : 

L'exploit principal et recommandé tire parti du fait que les drapeaux d'assurance qualité (QA) du système sont partagés entre l'hyperviseur et le noyau invité. Lors de l'initialisation de l'hyperviseur, le code d'initialisation pour la construction des tables de pages imbriquées vérifie les drapeaux d'assurance qualité pour le drapeau de débogage de niveau système (SL). Si cet indicateur est activé, les entrées de table de pages imbriquées (PTE) n'auront pas le bit xotext activé pour les pages .text du noyau, et les pages .text du noyau auront également le bit write activé.

Ces drapeaux ne sont pas réinitialisés par le chargeur sécurisé à la sortie du mode veille, alors que l'hyperviseur l'est. En définissant le drapeau SL, en mettant le système en veille et en le reprenant, nous pouvons éditer les tables de pagination du noyau invité pour rendre les pages .text du noyau accessibles en lecture/écriture, ce qui permet le dumping du noyau et des hooks/patches.

Notes important : 

Actuellement, seule la version 2.50 du firmware est prise en charge par le Homebrew Enabler (HEN) ; la prise en charge d'autres versions de firmware sera ajoutée ultérieurement.
La charge utile de l'exploit (byepervisor.elf) devra être envoyée deux fois, une fois avant de suspendre le système et une autre fois après l'avoir repris.
Vous devrez mettre le système en mode repos manuellement vous-même.
Le dump du noyau à partir de l'exploit QA flags ne contiendra pas la région .data de l'hyperviseur pour le moment, si c'est important pour vous, faites un dump en utilisant l'exploit jump table après le portage ou désactivez d'abord la pagination imbriquée (c'est un TODO).

Comment l'utilisé ? 

- Exécuter la chaîne d'exploitation UMTX dans webkit ou BD-J et lancer un chargeur ELF
- Envoyer byepervisor.elf
- Mettre le système en mode repos
- Rallumer le système
- Envoyer à nouveau byepervisor.elf (si vous utilisez le chargeur ELF de John Tornblom, le chargeur ELF devrait continuer à accepter les charges utiles après la reprise, si ce n'est pas le cas, l'exploit UMTX devra être relancé).

Lien du projet : Byepervisor


Veuillez vous connecter ou vous créer un compte pour commenter cet article !


Il n'y a aucun commentaire pour le moment.