L’horloge de bord d’une Renault Latitude millésime 2014 affichait un décalage d’une heure par rapport à l’heure réelle, et le propriétaire avait beau fouiller tous les sous-menus, aucun réglage ne permettait de la corriger. Ce qui lui barrait la route n’était pas une défaillance mécanique, mais un serveur cartographique désactivé par le fabricant à des milliers de kilomètres de là.
Le système embarqué Carminat LIVE de ce véhicule avait été conçu par le sous-traitant TomTom. Lors de la cession de l’automobile, l’ancien propriétaire lui avait demandé s’il souhaitait conserver la carte SD cartographique, l’avertissant : « sur cette voiture, on en a même besoin rien que pour mettre la pendule à l’heure ». Incrédule et jugeant la cartographie obsolète, il avait décliné la proposition, et la carte avait fini à la poubelle. Il constatera plus tard que chaque mot prononcé par l’ancien propriétaire était rigoureusement exact.
L’horloge d’une automobile, prise en otage par une simple carte SD. Ce choix d’architecture a transformé la légitime propriété du matériel en une location précaire, tributaire de services extérieurs. Les serveurs étant définitivement débranchés, le seul correctif capable de réparer le véhicule devait nécessairement être écrit par son propre conducteur.
Régler l’heure exigeait de racheter une ancienne carte cartographique
Sur la Renault Latitude, l’écran de la console centrale est piloté par une plateforme répondant au nom de code beaumont, articulée autour d’une puce Samsung S5P6440 sous un système TomTom personnalisé s’appuyant sur le noyau Linux 2.6.28.10.
Le point d’entrée de l’interface utilisateur repose sur le processus PNDNavigator. Renault et TomTom n’avaient pas développé de menu de configuration autonome pour le véhicule : le réglage de l’heure, le choix de la langue ou la luminosité de l’écran étaient tous imbriqués dans les définitions d’interface de PNDNavigator. Or, ces définitions étaient lues dynamiquement depuis la carte SD externe. Sans cette carte, le système embarqué ignorait tout bonnement comment lancer l’application des paramètres.
Figure : L’écran central affichant en estonien la notification « No maps found! » : la carte SD contrôlait bien plus que les seules cartes de navigation. Source : blog.nns.ee
Après avoir passé une heure à scruter chaque recoin des menus, le propriétaire ne put jamais accéder à l’option « Régler l’heure ». La démarche officielle la plus simple consistait à racheter une carte d’origine : on en trouve encore sur les marchés d’occasion, mais la livraison jusqu’en Estonie revenait à une soixantaine d’euros. Refusant de débourser 60 euros pour ajuster une pendule de tableau de bord, il décida de reprendre lui-même le contrôle du système.
Les constructeurs ont relégué les réglages de base au rang d’accessoires de la navigation
Il y a un peu plus d’une décennie, l’industrie automobile connaissait sa première vague de connectivité. Les constructeurs voulaient mettre en avant des cockpits intelligents mais manquaient cruellement de savoir-faire interne en développement logiciel, déléguant l’intégralité du système multimédia à des spécialistes du guidage comme TomTom. Pressée par les calendriers de production, l’équipe sous-traitante s’était contentée de transposer le firmware des GPS autonomes (PND) directement dans le tableau de bord : au démarrage, l’application de navigation se chargeait en priorité, et les réglages de base du véhicule venaient s’y greffer en sous-ordre. Les réglages élémentaires étant inféodés au service de navigation, l’horloge a cessé d’être réglable dès l’arrêt des serveurs cartographiques. Le propriétaire s’est retrouvé avec une berline mécaniquement irréprochable, mais incapable de passer à l’heure d’été.
Verrouillage matériel et noexec : une série de remparts face au propriétaire
La tentative de dépannage la plus intuitive consistait à prendre une carte SD ordinaire et à y déposer des scripts exécutables. Pourtant, le système avait prévu plusieurs lignes de défense successives.
Le premier verrou résidait dans l’appairage matériel. Le système DRM de TomTom contrôle le CID (Card Identification) — un identifiant unique gravé en usine dans le contrôleur de la carte, impossible à altérer — ainsi que la signature cryptographique des fichiers de cartes. Une carte vierge du commerce est immédiatement rejetée dès cette première étape.
Le second rempart tenait à la politique de montage : même en parvenant à usurper un CID valide, le système d’exploitation montait le stockage amovible avec l’option noexec. Tout binaire ou script présent sur la carte se voyait strictement refuser l’exécution. Des dispositifs initialement conçus pour endiguer le piratage cartographique ont finalement neutralisé le propriétaire légitime qui cherchait simplement à réparer sa propre voiture.
Provoquer un crash noyau pour contourner les verrous d’exécution
Le propriétaire, Rasmus Moorats, a extrait l’image du firmware directement de l’appareil, l’a émulée sous QEMU pour architecture S5P6440 sur son ordinateur et s’est lancé dans le désassemblage. Il a patiemment rétro-ingénié le binaire ttn, chargé d’interpréter le fichier master.script, et a documenté le protocole interne de commandes SHEX : celui-ci n’accepte qu’un seul argument séparé par un espace et le transmet à launchserver, lequel l’exécute via l’appel système execve — un chemin rendu stérile par le montage noexec.
La faille décisive s’est révélée dans le mécanisme de génération de vidages mémoire (core dump) du noyau Linux. Linux autorise la configuration du traitement des crashs via le paramètre /proc/sys/kernel/core_pattern. La prise en charge d’arguments en ligne de commande dans cette directive a été intégrée avec le noyau 2.6.24 ; ce véhicule tournant sous un noyau 2.6.28, core_pattern pouvait encore être réécrit depuis l’espace utilisateur. Il a alors identifié un processus dont le crash était inéluctable : le binaire /bin/dbus-monitor déclenche immédiatement un signal SIGABRT lorsqu’il ne parvient pas à se connecter au bus système D-Bus. Le noyau exécutant la commande enregistrée dans core_pattern avec les privilèges root, cet appel échappe totalement aux restrictions noexec du système de fichiers.
Figure : L’écran central notifiant l’exécution de master.script, le script utilisateur s’exécutant ensuite avec succès sur la machine réelle en contournant noexec. Source : blog.nns.ee
Au terme de la manœuvre, le véhicule disposait d’un système capable d’exécuter des scripts personnalisés avec les privilèges root, rétablissant le contrôle total sur l’horloge et le fuseau horaire.
Lorsque le code source est abandonné par son créateur
La nouvelle de cette reprise de contrôle s’est rapidement propagée parmi les passionnés et la communauté de bidouilleurs, incitant d’autres conducteurs à reproduire l’opération. Sur les forums officiels de TomTom, des membres ont confirmé que la même procédure fonctionne à l’identique sur la version de firmware Carminat TomTom 8.843. Les discussions ont également mis au jour un détail contre-intuitif : l’absence de carte n’empêche pas le récepteur GPS de fonctionner ; seul l’affichage de l’heure était bloqué. Les éléments à corriger étaient en réalité les fichiers de cache des éphémérides satellites (packedephemeris.ee, ee_meta.tlv, ee_meta.txt). En les remplaçant par des données hors ligne actualisées, le positionnement par satellite et la synchronisation de l’heure sont redevenus pleinement opérationnels.
Ceux qui ont acheté un véhicule complet à prix d’or doivent recourir à des méthodes de hacker pour maintenir en état de marche des fonctions élémentaires. Lorsque les constructeurs automobiles asservissent les fonctions matérielles à des services cloud éphémères, les utilisateurs ne détiennent plus qu’un droit d’usage précaire. Les serveurs peuvent s’éteindre et le code cesser d’être maintenu : reprendre le contrôle logiciel absolu reste la seule solution pour permettre aux machines de survivre à leurs fabricants.
Liens de référence :
- blog.nns.ee : Jailbreaking my car’s navigation system just so I can change the time
- Fil de discussion officiel de la communauté TomTom (Carminat TomTom 8.843)
- Discussion technique sur la communauté Lobsters