Après avoir porté l'exploit qwertyoruiopz sur divers firmwares, le développeur Specter vient de rédiger toute une documentation sur le fonctionnement de ce dernier afin d'aider les développeurs à progresser. Les explications apportées par Specter sont tellement précises qu'elles ont permis à qwertyoruiopz de changer quelques paramètres et il a pu même comprendre et corriger un bug.
Specter explique que l'exploit utilisé est différent de Pegasus utilisé par la Team Chaitin Tech, même si les concepts sont similaires, il confirme aussi que l'exploit est patché sur 4.50, il convient donc d'utiliser au maximum un firmware 4.07, rappelons que qwertyoruiopz dispose d'un firmware 4.06 sur sa PS4.
Il a décompose les diverses couches que l'exploit utilise, de toute façon comme il est patché cela ne changera pas grand chose, il saute volontairement quelques explications sur int64 qui ne sont pas pertinents pour l'exploit en lui même.
Dans le processus il explique d'abord que l'exploit cherche à savoir s'il peut s'exécuter, avant même d'être lancé, pour cela il teste rapidement le bug afin de s'assurer qu'il fonctionne, le noyau du bug réside dans la fonction peek_stack (). Cette fonction est intéressante car contrairement à poke_stack () elle permet de lancer des variables au travers de Function.prototype.apply.
Sans vous expliquer toutes les étapes, l'exploit va ensuite appliquer une série de scripts appelé "papillons" par butterflySpray afin d'attaquer la mémoire avec des objets cibles, afin de créer une pile, un sorte de zone tampon, qui est une mémoire utilisateur libre, et qui pourrait être très utile, cependant pour le moment il n'est pas possible d'utiliser, de lire ou d'écrire sur cette mémoire libre sans déclencher une série de bugs. Pour simplifier, l'exploit va tenter de créer des zones primitives de lecture et d'écriture, et permet de calculer des fonctions primitives, donnant une adresse mémoire utilisable, qui elle permet de lancer des chaînes ROP.
La dernière partie de l'exploit consiste à s'assurer que les primitives soient stables et il calcule que les adresses de base pour l'utilisation de gadgets dans la chaîne ROP soient bonnes. Le module WebKit contient en fait un export de libkernel, en particulier « __stack_chk_fail ». Ce processus permet de revenir à une adresse, et peut donc être utilisé comme fonction de base, pour trouver une autre adresse, rendant ainsi accès à plus de gadgets et plus d'adresse de syscalls.