Faille CivSwitch sur Nintendo Switch 2 : comment la cartouche Switch 1 de Civilization VII ouvre une brèche sur le firmware 23.0.1

La scène homebrew vient de trouver un nouveau cheval de Troie pour s’inviter dans les entrailles de la dernière console hybride de Kyoto. Baptisée CivSwitch et publiée en open source sur GitHub par le chercheur en sécurité et développeur Gezine, cette nouvelle chaîne d’exploitation ouvre un point d’entrée logiciel (userland entry point) hors ligne sur la Nintendo Switch 2 ainsi que sur la première Switch, en détournant tout simplement l’édition Nintendo Switch 1 de Sid Meier’s Civilization VII lancée via la rétrocompatibilité.
Depuis que Nintendo a purgé l’eShop de plusieurs anciens vecteurs historiques comme l’application SmileBASIC, les chercheurs en sécurité cherchaient une porte d’entrée pressée sur une cartouche physique que le constructeur ne peut pas effacer à distance. Après les secousses provoquées par l’exploit logiciel ns2jb sur le firmware 23.0.1 de la Nintendo Switch 2, cette méthode baptisée CivSwitch prouve que les couches héritées de la génération précédente restent un terrain d’expérimentation privilégié sur les firmwares allant de la branche 20.x.x jusqu’à l’actuelle version 23.0.1.
Une faille XSS cachée dans le chat multijoueur de la cartouche Switch 1 en version 1.0.0
Le fonctionnement technique de CivSwitch repose sur une vulnérabilité de type XSS (Cross-Site Scripting) nichée au cœur de l’interface du salon multijoueur sans fil local de Sid Meier’s Civilization VII. Concrètement, la boîte de discussion textuelle du lobby interprète certaines balises sans les filtrer correctement, ce qui permet d’injecter du code JavaScript arbitraire directement dans le moteur d’interface du jeu.
Toutes les copies du célèbre 4X de Firaxis Games et 2K ne sont toutefois pas éligibles : l’exploit exige strictement la cartouche physique Nintendo Switch 1 en version 1.0.0 d’origine, telle qu’elle a été gravée en usine. Les éditions dématérialisées téléchargées sur l’eShop, les boîtes contenant un simple code de téléchargement ou les cartouches ayant reçu un correctif en ligne ne permettent pas de reproduire la faille. Pour préserver cette version initiale sur une Switch 2 (testée avec succès par Gezine sur les firmwares 20.4.0 et 23.0.1, ainsi qu’en 22.5.0 sur la première Switch), la documentation recommande de bloquer au préalable les serveurs de mise à jour de Nintendo via un pare-feu DNS comme 90DNS.

PicoSwitch et sauvegarde persistante : comment l’injection s’automatise en 15 minutes
Comme la saisie manuelle d’une charge utile complète à la manette ou au clavier serait interminable, la chaîne d’outils de Gezine se divise en deux briques complémentaires qui s’appuient notamment sur les travaux antérieurs de Netflix-N-Hack (et le fork d’ufm42) ainsi que sur le projet Pico-Switch-Controller d’Element2424 :
- Le module matériel PicoSwitch : compilé au format UF2 pour un microcontrôleur Raspberry Pi Pico (puces RP2040 ou RP2350), ce petit circuit imprimé à quelques euros se comporte comme un clavier USB HID lorsqu’on le branche au dock de la console. Une fois le joueur placé dans le menu du chat sans fil local (Multiplayer > Wireless > Create Game > Host Lobby > Chat) avec le clavier système réglé en anglais américain, le Pico tape automatiquement environ 87 lignes de code compressées (via terser, deflateRaw et un encodage base-25 contournant le filtre de censure par des balises
img/onerror) en une quinzaine de minutes. - Le Remote JS Loader sur le port TCP 9026 : dès que la frappe automatisée s’achève, un serveur d’écoute local s’ouvre sur la console via le port TCP 9026. Le développeur peut alors envoyer n’importe quel script JavaScript depuis son PC à l’aide de l’utilitaire Python
send_js.pyet lire les journaux d’exécution renvoyés en direct par la machine. - Le déclencheur persistant dans la sauvegarde : pour éviter de rebrancher le Raspberry Pi Pico à chaque session, le second outil baptisé
installer-creatorgénère un fichier de sauvegarde modifié (XSTRIG.Civ7Save) injecté dans le répertoire du jeu. Lors des démarrages suivants, il suffit de cliquer sur « Charger une partie » (Load Game) depuis l’écran titre pour activer instantanément le chargeur TCP, qui survit même à la mise en veille de la console.
Détail astucieux relevé par Gezine pour les possesseurs d’une Nintendo Switch 2 japonaise verrouillée en langue : si le firmware ne permet pas de basculer la saisie USB en alphabet latin, il est possible de connecter une première Switch en sans-fil local au salon de la Switch 2 et de brancher le Raspberry Pi Pico sur la console secondaire afin de transmettre la charge utile à travers le réseau local du lobby.

Ce que CivSwitch permet aujourd’hui (et pourquoi le noyau de la Switch 2 reste verrouillé)
Si l’ouverture d’un accès sur le dernier firmware 23.0.1 marque une étape technique notable, il convient de mesurer précisément la portée de cette démonstration. CivSwitch est strictement un point d’entrée userland : le code exécuté demeure confiné aux privilèges restreints du conteneur de rétrocompatibilité attribué au jeu Switch 1.
À l’heure actuelle, cet outil ne fournit ni élévation de privilèges vers le noyau (kernel) de la Switch 2, ni accès étendu au système de fichiers global (filesystem escalation). Il ne permet donc pas d’installer un Custom Firmware (CFW) complet, de modifier l’interface native de la console ou d’extraire des cartouches Switch 2 pour alimenter les premiers émulateurs PC de la Nintendo Switch 2 comme Eden-NX2 et Eglantine. Pour les chercheurs en sécurité et les développeurs de logiciels amateurs, il constitue en revanche un tremplin stable, reproductible hors ligne et indépendant de l’eShop pour explorer le bac à sable de rétrocompatibilité de Nintendo.
Mon regard
C’est un classique indémodable de l’histoire des consoles Nintendo : on blinde la porte d’entrée principale avec une puce flambant neuve et des vérifications cryptographiques dernier cri, mais on laisse une fenêtre entrebâillée au sous-sol à cause de la rétrocompatibilité. En voyant un Raspberry Pi Pico taper patiemment 87 lignes de code dans le chat multijoueur de Civilization VII pendant un quart d’heure pour transformer une sauvegarde en cheval de Troie permanent, impossible de ne pas repenser à l’époque dorée de Cubic Ninja sur 3DS ou aux failles du mode Wii virtuel sur Wii U.
Certes, le grand public n’en fera rien dans l’immédiat puisque tout reste enfermé dans le bac à sable userland d’un jeu Switch 1 sans accès au noyau de la Switch 2. Mais sur le plan symbolique comme technique, le coup de maître de Gezine rappelle une règle d’or aux ingénieurs de Kyoto : dès qu’une cartouche physique version 1.0.0 circule dans la nature avec une faille de saisie, aucun retrait sur l’eShop ne peut plus jamais la faire disparaître.
Civilization VII
Retrouvez toutes les bandes-annonces, la fiche technique et les actualités dédiées à Civilization VII.
Retrouvez Pro-Gamer en priorité sur Google
Ajoutez pro-gamer.fr à vos sources préférées pour retrouver nos guides et actus directement dans votre flux Google Discover et vos résultats de recherche.
















