Byepervisor

PS5Dev PS5Dev
Dépôt créer le : 29/09/2024
Forks: 22 Watcher: 0 330
Choisir une liste...
FR

Au revoir

Résumé

PS5 hyperviseur exploiter pour <= 2.xx firmware. Deux vulnérabilités et chaînes d'exploitation sont contenues dans la repo, elles sont indépendantes les unes des autres et peuvent être utilisées. Une exploitation est fournie principalement pour la préservation (/_old_jump_table_exploit), seule la chaîne d'exploitation primaire doit être utilisée (exploitation des drapeaux de l'AQ).

Cette recherche a été présentée chez Hardwear. io NL 2024, des diapositives peuvent être trouvées Ici.. L'exposé sera bientôt publié.

Exploiter la table de saut

Le premier exploit utilise une vulnérabilité où les tables de saut de code 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 le VMMCALL_HV_SET_CPUID_PS4 hypercall, l'exécution de code dans l'hyperviseur peut être réalisée. Nous organisons une chaîne ROP qui désactive la Pagination Nestée (NPT) et le Piège Exécuté en Mode Invité (GMET), ce qui nous permet de désactiver eXecute Only Memory (XOM) aka xotext dans le noyau Page Table Entrées (PTEs) pour le déposer, ainsi que pour permettre à l'écriture dans les PTEs d'accrocher/patch le noyau aussi bien.

Cette méthode nécessite un nombre suffisant de gadgets et de décalages, ce qui est la principale raison pour laquelle cet exploit n'est pas la principale. Actuellement, l'hyperviseur ne brise que le noyau de la chaîne ROP, l'hyperviseur est toujours actif sur d'autres noyaux et devrait être désactivé.

Drapeaux de l'AQ Exploiter

L'exploitation primaire et recommandée profite du fait que les drapeaux d'assurance qualité (QA) du système sont partagés entre l'hyperviseur et le noyau invité. Lorsque l'hyperviseur initialise, le code init pour construire des tables de pages imbriquées va vérifier les drapeaux QA pour le drapeau de débogage de niveau système (SL). Si ce drapeau est défini, les entrées de table de page imbriquées (PTE) n'auront pas la xotext bit set pour les pages du noyau .text, et plus loin les pages du noyau .text auront également le bit d'écriture.

Ces drapeaux ne sont pas réinitialisés par le chargeur sécurisé au retour du mode sommeil, bien que l'hyperviseur soit. En réglant le drapeau SL, en dormant le système et en le reprenant, nous pouvons modifier les tables de pages du noyau invité pour rendre les pages .text lisibles/inscriptibles, ce qui permet de décharger le noyau et les crochets/patches.

Remarques importantes

  • Actuellement, seulement 2,50 FW est pris en charge pour Homebrew Enabler (HEN), la prise en charge d'autres versions de firmware sera ajoutée ultérieurement.
  • La charge utile d'exploitation (byepervisor.elf) devra être envoyée deux fois, une fois avant de suspendre le système et encore après la reprise.
  • Vous devrez mettre le système en mode repos manuellement vous-même
  • La décharge de noyau de l'exploitation des drapeaux QA ne contiendra pas la région .data de l'hyperviseur pour le moment, si cela est important pour vous, la décharge en utilisant l'exploitation de la table de saut après le portage ou la désactivation de la recherche imbriquée d'abord (c'est un TODO)

Actuellement inclus

  • Code de déversement du noyau (commenté, en utilisant ce code sera paniquer le système comme il va essayer de jeter autant qu'il peut avant de frapper la mémoire non mapée)
  • Code pour décrypter la bibliothèque système SELFs sur TCP
  • Enableur pour firmware 2,50 (fself+fpkg)

Construire des notes

Cette charge utile d'exploitation est construite en utilisant le PS5-Payload-Dev SDK. Notez également que la construction pour hen/ est légèrement spécial, car il est compilé à un binaire plat qui est copié dans une grotte de code du noyau. L'ensemble du code en hen/ fonctionne en mode superviseur/kernel.

Comment utiliser

  1. Exécutez la chaîne d'exploitation UMTX dans webkit ou BD-J et lancez un chargeur ELF
  2. Envoyer byepervisor.elf
  3. Mettre le système en mode repos
  4. Système d'alimentation arrière
  5. Envoyer byepervisor.elf à nouveau (si vous utilisez le chargeur ELF de John Tornblom, le chargeur ELF devrait continuer à accepter les charges utiles après la reprise, sinon l'exploitation UMTX devra être lancé à nouveau)

Travaux futurs

  • [ ] Soutenir plus de firmwares (offets)
  • Allez-y. byepervisor.elf ne doit être envoyé qu'une fois
  • [ ] Suspendre automatiquement le système?
  • [ ] Patch vmcbs avec des drapeaux QA exploiter pour décharger les données hyperviseur

Crédits / Shouts

Discorde

Ceux qui souhaitent contribuer à la recherche/dev PS5 peuvent rejoindre une discorde que j'ai mise en place Ici..

Contributeurs GitHub

Cryptogenic
Cryptogenic
8 contributions
kiwidoggie
kiwidoggie
9 contributions