Les Honda Civic et le voiturier malveillant
(juniperspring.org)- L'unité principale de la Honda Civic modèle 2021 peut accepter, via la voie de mise à jour USB, des mises à jour signées avec des clés de test AOSP publiques, ce qui permet à une personne ayant un accès physique d'exécuter du code arbitraire
- Les mises à jour de Honda sont appliquées via Android recovery, et même si le binaire
recoverya été modifié, la logique de vérification de signatureverify_filereste conforme à celle d'AOSP par défaut - En signant avec les clés de test AOSP publiques et en respectant le format attendu pour la clé USB, il est possible d'installer le code de son choix sans
sunisetuid, une attaque appelée EvilValet - Le nouvel outil ota-builder facilite la préparation de fichiers de mise à jour acceptés par l'unité principale, et apk-rebuilder convertit les fichiers de mise à jour en une arborescence de sortie utile pour la rétro-ingénierie
- Le projet a terminé l'essentiel du travail d'investigation, mais le dépôt n'est pas abandonné et des contributions sont nécessaires sur les informations de version, la toolchain, les thèmes personnalisés et l'amélioration du mapping AIDL
Contexte de la mise à jour du projet
- Il y a 3 ans, un premier travail pour comprendre et rétroconcevoir l'unité principale d'une Honda Civic 2021 a été publié, et cette mise à jour récapitule les progrès réalisés depuis
- La réaction initiale a été très encourageante, et l'avancée la plus importante est venue de la compréhension du processus de mise à jour
Les clés du royaume
- Honda prend en charge les mises à jour de l'unité principale via USB, et au final un fichier de mise à jour AOSP signé présent sur la clé USB est préparé et appliqué via Android recovery
- Il existe plusieurs vérifications propres à Honda, mais des clés de test AOSP publiquement connues étaient encore présentes dans
res/keys, et la logique de signatureverify_filedu binairerecoverymodifié restait conforme à celle d'AOSP par défaut - En formatant correctement la clé USB et en signant avec les clés de test AOSP publiques, il est possible d'installer le contenu de son choix sur l'unité principale sans accès root préalable
- Il n'est pas nécessaire d'obtenir un accès root classique en configurant
setuidsursu - Tant que l'unité principale est alimentée et que l'attaquant a un accès physique au port USB le plus à l'avant, il est possible d'exécuter du code arbitraire sur l'unité principale via le mécanisme de mise à jour
- Il n'est pas nécessaire d'obtenir un accès root classique en configurant
- Cette attaque ressemble à une evil maid attack, où quelqu'un obtient un accès physique à une chambre d'hôtel, mais comme il faut ici accéder à l'habitacle du véhicule, elle est appelée EvilValet
- Dans le scénario d'exemple, un voiturier d'hôtel installe la mise à jour via USB et, lorsque la voiture est rendue, le conducteur ne se rend pas compte que l'unité principale a été modifiée
- Ce billet n'est pas une documentation technique détaillée ; pour plus d'informations, voir le document Display Audio Update Files
- Le nouvel outil ota-builder permet de préparer facilement des fichiers de mise à jour acceptés par l'unité principale
- Il en est encore à ses débuts, mais par exemple, créer un fichier de mise à jour qui installe un binaire
suavecsetuidest devenu trivial
- Il en est encore à ses débuts, mais par exemple, créer un fichier de mise à jour qui installe un binaire
- Il existe de solides raisons de penser que toutes les mises à jour sont signées avec des clés de test AOSP publiques, mais il n'y a pas eu accès à tous les fichiers de mise à jour officiels possibles ni à tous les systèmes de fichiers des variantes d'unité principale
- Les unités principales vérifiées contenaient bien des clés de test AOSP dans
res/keys, mais comme HondaHack avait déjà été installé, il est possible que des clés aient été injectées dans le keystore - Le fichier de mise à jour logicielle UE publiquement disponible
MRC_EU_SW_v12_4.zipest signé avec des clés de test ; il a été téléchargé depuis un forum public et n'a pas été modifié - Il est très probable que toutes les mises à jour soient signées avec des clés de test AOSP, mais des contributions sont nécessaires pour étayer ou réfuter cette hypothèse
- Les unités principales vérifiées contenaient bien des clés de test AOSP dans
Construction des outils
- En dehors du processus de mise à jour, le travail le plus utile a été le développement de apk-rebuilder
- apk-rebuilder prend en entrée des fichiers de mise à jour de Honda Civic trouvés sur Internet et produit une arborescence de sortie propre qui automatise le travail qu'un spécialiste de la rétro-ingénierie devrait autrement faire à la main
- Il effectue l'interprétation des ressources
- Il effectue la reconstruction du code
.smali - Il effectue le reconditionnement des fichiers APK
- Il effectue l'extraction du ramdisk
- Et d'autres opérations encore
- Comme le vrai code source Honda ne peut pas être publié, apk-rebuilder sert de fonction prenant en entrée des fichiers de mise à jour que le dépôt public n'héberge pas, pour produire le code
.smaliHonda, les ressources d'image et autres éléments - Les sorties générées suivent une structure de répertoires claire et peuvent être référencées dans la documentation sans téléverser les fichiers sensibles eux-mêmes
Travail restant et appel à contributions
-
Versions connues
- Le processus de mise à jour est vulnérable et dépend fortement du numéro de version
- Le numéro de version peut être usurpé, il ne limite donc pas la capacité à exécuter du code non signé
- Pour créer un fichier de mise à jour, il faut connaître la version attendue par l'unité principale
- Des modifications du logiciel de l'unité principale qui ne correspondent pas au build en cours peuvent entraîner un comportement inattendu et une recovery loop
- Les personnes qui conduisent une Honda Civic de 10e génération et sont à l'aise avec la technique peuvent contribuer à la section Known Versions, Display Audio Software du dépôt
- Les plus audacieuses peuvent lire le code de
ota-builderet tenter de flasher une mise à jour, mais si l'unité principale diffère de l'appareil de référence, elle peut entrer dans une recovery loop et être soft-brickée
-
Toolchain
- Une toolchain expérimentale et en cours de construction existe sur la machine locale
- Cette toolchain prend du code
.ccandidat et le compile pour ARMv7 avec la même version de compilateur et les mêmes flags de build que le binaire fournisseur d'origine - Cette toolchain a été essentielle pour comprendre le processus de mise à jour
- Dans sa forme actuelle, elle utilise beaucoup Docker, reste désordonnée et très adaptée à un workflow spécifique, et l'objectif est de publier une implémentation propre
-
Thèmes personnalisés
- En faisant du vibe-coding sur apk-renderer, une exploration partielle des thèmes personnalisés a été menée
- Les thèmes personnalisés se trouvent dans le fork du framework AOSP de Mitsubishi, et les applications de l'unité principale semblent réduites de manière à attendre des ID de ressources codés en dur, ce qui risque de compliquer fortement le déploiement
- Déployer des thèmes personnalisés nécessitera probablement de modifier chirurgicalement le framework fournisseur et d'écrire des outils pour automatiser cela
- Ce travail n'est ni simple ni forcément suffisamment utile pour justifier l'effort, mais les contributions sont les bienvenues
-
Amélioration de aidl-rebuilder
- Le travail a commencé sur un outil qui parse les fichiers
.smalipour générer et cartographier toutes les interfaces AIDL de l'unité principale - L'outil fonctionne, mais sa précision n'a pas encore pu être suffisamment vérifiée
- Ce travail ouvre la voie à des applications personnalisées comme un compteur de vitesse virtuel
- Le travail a commencé sur un outil qui parse les fichiers
Réflexions sur la documentation et les LLM
- L'accent est mis davantage sur l'outillage que sur les documents de référence
- Si des outils fiables et déterministes mappent le code de l'unité principale vers une forme plus facile à comprendre, les utilisateurs peuvent interroger cette forme avec un LLM pour obtenir des réponses à des questions précises
- Comme le code de l'unité principale est la source de vérité, cela réduit la charge liée au maintien de documents de référence susceptibles de diverger du code réel
- Un guide utilisateur expliquant comment se connecter à l'unité principale via ADB reste utile
- Quand le code Java lui-même peut être exploité par un LLM, maintenir séparément une documentation sur le comportement du code Java devient une charge de maintenance
Conclusion
- L'essentiel du travail d'investigation prévu sur l'unité principale est terminé
- Cela pourrait rester un projet sur lequel continuer à s'investir, mais il est probable qu'un passage à d'autres projets ait lieu désormais
- Le dépôt n'est pas à l'arrêt, et les PR sont toujours les bienvenues
1 commentaires
Avis sur Hacker News
Cette vérification de version peut être contournée, et le paquet est signé avec les clés de test AOSP publiques, donc avec un accès physique au port USB avant il est possible de signer et flasher un paquet arbitraire, puis d’exécuter du code arbitraire sur l’unité principale
pas besoin de root/su, cela a été testé jusqu’au bout sur une Civic 2021, et il a aussi été vérifié séparément que les fichiers de mise à jour officiels de l’UE utilisent eux aussi une signature par clé de test AOSP
Dans l’Information Security Manual du gouvernement australien de mars 2026, un contrôle a été ajouté pour recommander de ne pas connecter d’appareils gouvernementaux à l’infodivertissement d’un véhicule, et de ne pas consulter de documents sensibles ni tenir de conversations sensibles dans ou à proximité d’un véhicule connecté
https://www.cyber.gov.au/business-government/asds-cyber-secu...
Les personnes susceptibles d’être vulnérables à ce genre d’attaque disposent déjà de procédures de travail et d’équipements de confiance distincts, et les agences de police américaines appliquaient déjà des règles comparables pour les voitures de location depuis l’arrivée d’OnStar
La plupart des données télématiques dangereuses pour le grand public sont de toute façon déjà vendues
En sécurité, le modèle de menace partait depuis toujours du principe que si l’attaquant a un accès physique à l’appareil et du temps, alors c’est terminé
L’état intermédiaire actuel est le pire : une atteinte à la vie privée qui surveille l’utilisateur pendant tout le trajet, et en même temps un appareil peu sûr qui livre ces données à quiconque s’y intéresse un minimum
Si les données peuvent être saisies, mieux vaut ne pas les stocker localement, et selon la loi on peut aussi être forcé à déverrouiller, mais aux États-Unis on devrait être protégé en refusant de fournir son mot de passe
Techniquement, Google et Apple ont beaucoup amélioré la sécurité physique, et GrapheneOS va encore plus loin sur cette base en réduisant la surface d’attaque et en ajoutant de bonnes fonctionnalités. Avec notamment l’adoption large du redémarrage automatique, on peut désormais nuancer sur les téléphones la conclusion selon laquelle « accès physique = partie terminée »
https://grapheneos.org/features#auto-reboot
https://discuss.grapheneos.org/d/35728-demystifying-phone-un...
Ce n’est pas parce qu’un attaquant suffisamment sophistiqué et persévérant peut prendre le contrôle de n’importe quel appareil avec un accès physique qu’il faut pour autant le rendre facile pour tout le monde
Un voiturier malveillant ayant un accès physique à la voiture ne perdrait pas son temps à pirater l’unité principale ; il cacherait simplement un dispositif d’écoute quelque part dans le véhicule
Et puis un conducteur de Civic a peu de chances d’être la cible de services de renseignement
L’unité principale contient généralement des données historiques comme une base SQLite de contacts restés après synchronisation, un historique de localisation, ou d’anciennes données laissées dans la télémétrie ou les fichiers journaux
En outre, l’unité principale a souvent accès aux bus internes du véhicule, et même lorsqu’il existe un pare-feu comme un module Gateway, il est généralement faible. Comme dans le cas célèbre chez Honda où le déverrouillage et l’autorisation de démarrage étaient possibles sans matériel cryptographique via le bus CAN des phares, l’infodivertissement peut être bien plus puissant qu’un simple dispositif de suivi
De plus, injecter du code dans l’unité principale ou extraire les données déjà présentes laisse beaucoup moins de traces que de fixer un traceur séparé
La Civic est l’une des voitures les plus courantes, donc idéale pour se fondre dans le décor, et des personnes « en apparence ordinaires » comme des scientifiques, ingénieurs, journalistes ou avocats peuvent très bien conduire une Honda Civic
Un dispositif d’écoute caché dans la voiture peut être découvert, mais quelque chose directement installé dans le firmware du véhicule a encore moins de chances d’être trouvé
Mais la vraie question posée était de savoir si le firmware était signé pour satisfaire une obligation interne, pas si la procédure de mise à jour du firmware vérifiait la signature, et en réalité elle ne vérifiait rien du tout
« Sinon, comment mettre à jour l’algorithme de signature ? », en gros — et le pire, c’est qu’à une époque c’était correctement fait
Le mode de signature a changé quand l’équipe sécurité a exigé des signatures « post-quantiques sûres », et c’est là qu’un bug de régression a été introduit
Mais quand ces voitures auront plus de 10 ans et passeront à des gens qui voudront les bidouiller, la capacité d’ouvrir le logiciel et de le personnaliser sera un énorme avantage
Ce serait bien de voir émerger une communauté qui crée des modifications utiles et prolonge la durée de vie de l’appareil. Ça me semble bien préférable à un utilisateur final qui arrache l’unité principale d’origine pour la remplacer par une unité façon « tablette Android » d’Aliexpress, probablement pire que l’appareil de Honda en matière de sécurité et de qualité d’ingénierie
Si l’on ne va pas faire confiance à toutes les mises à jour par défaut, il aurait fallu fournir un mécanisme permettant au vrai propriétaire d’approuver les mises à jour
Si c’était vraiment intentionnel, il y aurait eu quelque chose comme un bootloader déverrouillable nécessitant une clé spéciale, ou un interrupteur difficile d’accès
Ça marcherait sur plus de marques qu’une méthode qui ne fonctionne que sur une seule génération de Honda Civic, et ce serait probablement plus rapide à installer
À un instant donné, il y a très peu de chances que toute la documentation d’un projet soit réellement à jour avec le code
Globalement, je suis d’accord avec cette direction, mais à condition que le code soit effectivement bien conçu
Les tests peuvent montrer l’usage prévu et des cas limites intéressants, et comme ils continuent d’être exécutés et de passer, on sait aussi qu’ils sont à jour
C’est un avantage majeur trop souvent sous-estimé quand on ajoute davantage de tests
Si un développeur risque de poser des questions sur un comportement ou un cas limite, il vaut mieux avoir un test qui permette de prouver directement la réponse plutôt que de l’obliger à tout redéduire