Entrée via le démonstrateur de Rock Band Blitz
Après la diffusion du PoC Bad Update v1.0, deux contributeurs ont ajouté un point d’entrée dans la version démo de Rock Band Blitz (RBB). Le paquet de démon, disponible gratuitement sur le Xbox Live Store, peut être copié sur une clé USB grâce à la prise en charge du stockage USB par la Xbox 360. En manipulant les vulnérabilités de corruption mémoire du parseur DLC du jeu, ils ont créé un fichier de sauvegarde qui, lorsqu’il est chargé, déclenche la chaîne ROP du second stade de Bad Update et démarre l’exploitation du hyperviseur. Cette méthode supprime la dépendance au disque de Tony Hawk American Wasteland : il suffit de placer les fichiers sur la clé USB, de les brancher et de lancer RBB depuis le tableau de bord.
Optimisations de la condition de course du hyperviseur
Un contributeur identifié comme « Máté » a soumis un pull request contenant trois améliorations majeures : une table de hachage pour pré‑calculer les ciphertexts malveillants, une primitive de vidage de cache plus efficace et une meilleure synchronisation entre le thread de charge utile XKE et le thread d’écrasement du ciphertext. Ces changements ont fait passer le temps d’exécution d’environ 20 minutes avec un taux de succès de 30 % à quelques secondes avec un taux de réussite proche de 100 %.
Table de hachage des ciphertexts
Le schéma de chiffrement de la mémoire utilise une valeur de blanchiment de 12 bits, soit 1024 combinaisons possibles pour un même texte en clair. Le PoC initial ne générait qu’un seul ciphertext parmi ces 1024, ce qui limitait la fiabilité. Máté a implémenté une table de hachage où les N premiers bits du ciphertext attendu servent d’indice. Deux tableaux parallèles stockent respectivement les 64 bits de validation et le ciphertext malveillant à injecter. Les collisions sont volontairement ignorées ; en choisissant une taille de clé de 20 bits, le nombre de collisions reste généralement inférieur à dix, ce qui évite la surcharge de gestion de buckets. Le coût mémoire de cette structure s’élève à environ 24 Mo, un compromis acceptable entre la réduction des accès RAM et la pression sur le cache L2.
Le processus de construction parcourt les 1024 valeurs de blanchiment, chiffre chaque page, récupère le ciphertext du décodeur LZX et celui du payload malveillant, puis les insère dans les tableaux. Cette boucle exhaustive garantit que, lors de la condition de course, le bon ciphertext peut être écrit instantanément dans la mémoire chiffrée.
Amélioration du vidage de cache
Dans la version initiale, l’auteur verrouillait la moitié du cache L2 du CPU Xbox 360 pour augmenter la pression sur le cache. Cette technique, bien que novatrice, n’atteignait pas le niveau de contention souhaité. Le nouveau code utilise l’instruction HvxFlushSingleTb pour forcer le vidage d’une ligne de translation (TLB) et synchroniser les écritures, éliminant ainsi les incohérences de blanchiment observées sur les anciennes constructions du hyperviseur (circa 2011). En testant sur la version hyperviseur 17559, la combinaison du vidage ciblé et du scheduling affiné des threads a réduit la latence du race condition à quelques secondes, tout en maintenant une stabilité suffisante pour atteindre presque 100 % de succès.