Présentation du jailbreak ns2jb

Le dépôt ns2jb propose le premier exploit purement logiciel et tethered pour la Nintendo Switch 2. Il autorise l’exécution de code natif arbitraire en tant que sysmodule ordinaire ou en tant que sysmodule fs intégré, ce qui ouvre la possibilité de lancer du homebrew, de modifier des jeux ou de sauvegarder les fichiers de la console. Le processus nécessite une connexion physique entre la console et un PC, les JetKVMs transmettant les entrées USB et récupérant la vidéo HDMI, tandis qu’un interrupteur Bluetooth simule la pression du bouton d’alimentation lorsqu’un plantage survient.

Mécanisme d’exploitation via WebKit

Le vecteur initial exploite une faille n‑day de WebKit chargée via un portail captif Wi‑Fi. En détournant le flux de contrôle natif, le code injecté s’exécute dans le contexte du navigateur, ce qui permet d’obtenir un accès préliminaire aux services du micro‑noyau. Cette technique repose sur la capacité de WebKit à charger du JavaScript non sandboxé, un point d’entrée fréquent pour les consoles, et constitue le socle du jailbreak tethered.

Exploitation complémentaire sur Switch 1 et dérivation vers les sysmodules

Parallèlement, l’auteur a identifié une vulnérabilité d’overflow d’entier 32 bits dans l’interpréteur BASIC du jeu SmileBASIC sur la Switch 1. Le calcul position + count peut déborder et devenir négatif, entraînant un memmove hors limites :

memmove(
    backing + position * 8,                  // start of the gap
    backing + (position + count) * 8,        // elements after the gap
    (length - position) * 8                  // bytes to copy
);

Ce débordement copie les 8 octets précédant le tableau, contenant un pointeur vers le tableau lui‑même, ce qui transforme le tableau en une chaîne de longueur artificiellement gigantesque. En lisant ou écrivant via des sous‑chaînes, l’attaquant obtient un accès lecture/écriture arbitraire. En combinant ce primitive avec un dépassement de tampon de 0x301 octets dans la fonction GetEntryType du sysmodule fs, il est possible d’altérer les structures de cache de BufferedStorage et de rediriger les pointeurs vers des zones contrôlées, obtenant ainsi le privilège FullPermission (PID = 1).

Une fois ce niveau d’accès atteint, les dumps des sysmodules ordinaires révèlent que seul le module ro possède la permission de mapper de la mémoire exécutable, bien que tous les modules soient protégés par CFI, PAC et XOM. Cette contrainte limite les vecteurs d’injection directe, mais ouvre la porte à des attaques basées sur la corruption de pointeurs de fonction au sein du module ro.

Limites et perspectives de sécurité

Le jailbreak reste tethered : il nécessite une connexion continue à un hôte et ne persiste pas après redémarrage, ce qui restreint son usage à des scénarios de recherche ou de modding temporaire. De plus, la dépendance à une faille WebKit expose le vecteur à des correctifs futurs, et les protections CFI/PAC/XOM sur les sysmodules limitent les possibilités d’exécution native sans contournement supplémentaire. Enfin, la chaîne d’exploitation repose sur plusieurs étapes distinctes (WebKit, SmileBASIC, overflow du sysmodule fs), chacune pouvant être patchée indépendamment, ce qui rend la stabilité à long terme incertaine.