[Switch 1/ Switch2] Un nouvelle exploit userland trouvé par Gezine mais...
Gezine, connu dans la scène Playstation pour les nombreuses failles dévoile un exploit userland sur Switch 1 et 2, mais a attention, cela ne veux rien dire sur l'arrivé d'un hack, on vous explique tout
Le développeur Gezine, auteur des principaux hack sur PS4/5 nous dévoile une information importante par le biais de sont compter Twitter concernant la Nintendo Switch 1 / Switch 2
I created switch 1/2 userland exploit that is not webkit or save exploit
— Gezine (@gezine_dev) July 8, 2026
"But we already have userland exploit from day 1"
The difference is existing userland exploit is based on save exploit which can't be used without save transfer using Nintendo Online Service
Which forces… pic.twitter.com/7gNuaYXiIS
| Exploit userland pour la Switch 1/2, indépendant du firmware. Contrairement à la PS4/5, je me suis rendu compte que la Switch 1/2 ne permettait pas de transférer des fichiers de sauvegarde sans passer par le service en ligne de Nintendo. J’ai donc écarté l’utilisation d’exploits liés aux sauvegardes. Et j’ai trouvé un autre moyen d’exécuter du code malveillant. C'était ma première implémentation ROP sur arm64 et ça a été tellement plus compliqué que sur x86 haha |
Il nous dévoile donc qu'il a trouvé un exploit userland qui fonctionne sur Nintendo Switch et Nintendo Switch 2, si on a déjà eu un exploit userland avec une chaîne d'éxecution ROP a la sorti de la console, cette dernière nécessitais la récupération de donnée de sauvegarde altéré qui permettais sont éxecution, ce qui par conséquent nécessitais toujours la dernière version du firmware pour être transféré.
L'exploit de Gezine n'a ni besoin d'un Exploit Webkit ni d'un exploit de donnée de sauvegarde nécessitant le Nintendo Switch Online.
Mais du coup quand est-il du point d'entrée et pourquoi Gezine ne veux pas d'un Exploit Webkit, ce qui est principalement utilisé sur PS4/5
Pour comprendre il faut s'intéressé plus amplement a comment fonctionne la Nintendo Switch 2 en terme de sécurité, Nintendo n'a pas lésiner sur les moyens de protection.
Prenons en exemple un code en c
void A() {
B();
}
void B() {
printf("Hello");
}
En mémoire, ça ressemble à quelque chose comme :
0x1000 -> Fonction A
0x2000 -> Fonction B
0x3000 -> printf
Quand A() appelle B(), le CPU fait essentiellement :
PC = 0x2000
Le Program Counter (PC) contient donc l'adresse de la prochaine instruction à exécuter.
C'est la qu'entre en jeu le Pointer Authentication (PAC)
PAC protège les pointeurs.
Fonction B
Adresse :
0x2000
Avec PAC, ce n'est plus seulement :
0x2000
mais quelque chose comme :
0x2000 + Signature
Cette signature est calculée par le CPU avec une clé secrète stockée dans les registres matériels.
Le CPU fait en interne quelque chose du genre :
Signature = f(Adresse, Clé secrète)
Donc le pointeur devient :
0x2000 | PAC
Quand le programme veut appeler cette fonction : BLR x0
Adresse ? => 0x2000 => Signature valide ? => Oui => Exécution.
Ce que PAC empêche
- une adresse de retour
- un pointeur de fonction
- une vtable C++
- certains pointeurs internes : sans posséder la bonne signature.
Mais Nintendo ne c'est pas arrêter la, ils ont intégré également le Control Flow Integrity (CFI)
PAC vérifie que le pointeur est authentique.
CFI vérifie que l'appel est autorisé.
Prenons
void Login()
{
CheckPassword();
}
void DeleteAllFiles()
{
}
Le compilateur sait que :
Login() =>CheckPassword()
Mais cela est impossible :
Login() => DeleteAllFiles()
Avec CFI, le compilateur ajoute des vérifications.
Même si un attaquant arrive à modifier un pointeur...
...le programme regarde :
"Cette fonction fait-elle partie des destinations possibles ?"
Si la réponse est non :
Crash.
Mais Nintendo a été encore plus loin
Execute Only Memory, c'est la sécurité implémenté sur le firmware 21.x
Normalement, une page mémoire contenant du code est :
RX
Read
Execute
Donc un exploit peut faire :
memcpy(buffer, fonction, 100);
et copier le code.
Avec XOM :
--X
Execute seulement
Le CPU accepte :
PC = 0x5000
Mais refuse :
LDR x0, [0x5000]
Pourquoi c'est important ?
Les exploits modernes font souvent :
Lire .text => Chercher des gadgets => Construire un ROP
Les gadgets sont de petites séquences d'instructions déjà présentes dans le binaire
Sans pouvoir lire .text, trouver ces gadgets devient beaucoup plus difficile.
XOM intervient
Le MMU répond :
Permission READ refusée.
Dans ce contexte, d'ou pourrais t-on trouvé une faille, et bien c'est hexkyz qui a repris avec Alula Atmosphère qui nous apporte l'information
Source : Discord Reswitched
Le développeur Hexkyz nous a en effet communiqué qui est contrôlé par quoi sur les différentes parti de la console
Ainsi nous apprenons que les jeux Switch 2 utilise PAC + CFI puis de manière optionnel XOM
Les applets (album par exemple) utilise PAC + CFI et XOM est ajouté a partir du firmware 21.0.0
Les sysmodules utilise PAC + CFI et XOM depuis le début
A savoir qu'ils précisent également : Les applets et les applications avaient (ou avaient auparavant, cela semble avoir changé) une implémentation assez limitée de CFI, qui essayait essentiellement d'utiliser BTI (Branch Target Identification), tandis que les sysmodules utilisent un CFI similaire à celui généré par Clang, qui est bien plus robuste.
Et dans le lot on apprend surtout que les jeux Switch 1 non ni PAC ni CFI ni XOM
Il est donc fort a parié que l'entrypoint vienne de jeu Switch 1.
Maintenant l'exploit a permis de prendre le contrôle userland, et contrairement au premier exploit cela a été plus loin avec le contrôle de l'applet de gestion des erreurs car il n'est pas contrôlé par le Kernel.
Ce n'est pas hack complet, actuellement elle ne sert pas a grand chose et nous ne savons même pas si Gezine la partagera sachant qu'elle semble très facilement patchable par Nintendo.
Seul l'avenir nous montrera si ce premier hack permettra une vrai avancé dans le modding de la Switch 1/2
Veuillez vous connecter ou vous créer un compte pour commenter cet article !
Il n'y a aucun commentaire pour le moment.