Une simple police de caractères suffirait à tromper tous les assistants IA
Ce que l'IA lit n'est pas ce que vous voyez — Vous tombez sur une page web louche qui vous demande d'exécuter une commande dans le terminal.
Réflexe sain : vous demandez à votre assistant IA de vérifier si c'est safe. Il analyse la page, vous répond que tout est cool, c’est bon t’inquiète frère. Sauf que la commande que VOUS voyez à l'écran et le texte que l'IA a lu dans le HTML n'ont juste strictement rien à voir.
Poisoned Typeface : le chiffre de César, version CSS

Des chercheurs de LayerX, une entreprise spécialisée dans la sécurité des navigateurs, ont partagé une attaque aussi élégante que vicieuse. Le principe tient en deux ingrédients : une police de caractères custom et un peu de CSS.
La police agit comme un code secret appliqué aux caractères eux-mêmes : chaque lettre dans le HTML est remappée visuellement par la font. Le texte "normal" du code source (en l’occurence pour test, de la fanfiction sur le jeu vidéo Bioshock) apparaît comme du charabia illisible pour l'utilisateur, tandis qu'un blob encodé dans le DOM s'affiche parfaitement lisible à l'écran.
Le CSS se charge ensuite de masquer le texte innocent (taille 1px, couleur identique au fond) et d'afficher le contenu malveillant en grand et en couleur.
Résultat : le navigateur montre des instructions pour ouvrir un reverse shell sur votre machine (pour tenter de prendre le contrôle de votre terminal à distance). L'assistant IA, lui, ne voit que de la fanfiction inoffensive et vous dit que la page est parfaitement clean.
Et le tout sans JavaScript, sans exploit navigateur, sans faille à proprement parler.
Tout le monde tombe dans le panneau
LayerX a testé son PoC en décembre 2025 sur une large brochette d'assistants : ChatGPT, Claude, Copilot, Gemini, Grok, Perplexity, et d’autres encore. Le résultat : aucune détection.
Chaque assistant a analysé le DOM, vu la fanfiction Bioshock, ignoré le blob encodé (traité comme du simple bruit), et conclu avec aplomb que la page ne présentait aucun problème de sécurité. Certains ont même activement encouragé l'utilisateur à suivre les instructions affichées (c'est-à-dire à déclencher le reverse shell). Nice.
Le problème est structurel : ces assistants lisent le HTML comme du texte structuré, mais ne rendent jamais la page visuellement.
Ils n'ont aucune idée de ce que le navigateur affiche réellement. Et comme les polices custom ne sont pas considérées comme un vecteur d'attaque sémantique par les modèles de sécurité web actuels, personne ne vérifie les tables de mapping des glyphes.
LayerX a signalé le problème à tous les éditeurs concernés en décembre 2025. Anthropic, OpenAI, Google, Perplexity, xAI, Dia : tous ont classé le rapport sans suite, invoquant tour à tour le "social engineering", les "limitations connues des LLM" ou l'absence d'impact suffisant.
Le seul éditeur à avoir traité le problème jusqu'au bout, c'est Microsoft. Copilot a été corrigé dans les 90 jours de disclosure réglementaires. Microsoft, premier de la classe en sécurité IA ?
DOM, Sweet DOM
Au-delà de cette attaque spécifique, c'est la confiance aveugle accordée aux assistants IA qui pose question. On leur demande de plus en plus d'évaluer la sécurité de pages web, de résumer du contenu, de détecter des menaces — et de plus en plus en totale autonomie.
Mais d’une certaine manière, ce qu’ils voient n'est qu'une couche du web (le DOM), et ils sont encore à ce jour structurellement aveugles à tout ce qui se passe dans le rendu visuel.
LayerX recommande aux éditeurs d'implémenter une analyse en double mode (DOM + rendu), de traiter les polices custom comme une surface d'attaque potentielle, et surtout d'arrêter d'affirmer qu'une page est "safe" quand ils sont incapables de vérifier ce que l'utilisateur voit réellement.
Reste que ce type d'analyse en double couche implique de faire tourner un moteur de rendu en plus du parsing texte, ce qui veut dire plus de compute, plus de tokens consommés, et au final une facture plus salée pour des assistants IA dont le coût d'inférence est déjà un sujet assez brûlant.
À propos de l'auteur
Nicolas Lecointre
Chief Happiness Officer des développeurs, ceinture noire de sudo. Pour rire, j'ai créé Les Joies du Code. J'utilise Vim depuis 10 ans parce que je sais pas comment le quitter.
À lire également
Ma phobie administrative a enfin trouvé son fix, et il s’appelle Abby
Je DÉTESTE, je HAIS l'administratif. Voilà, c'est dit, et ça me semble être une belle entrée en matière pour cet article. C’est assez simple, à mon niveau, tout ce qui...
Articles similaires
Axios compromis : un cheval de Troie découvert dans une dépendance du célèbre package npm
Claude Code : la fuite de code source piégée pour distribuer un infostealer
Claude Mythos : le modèle IA d'Anthropic trop dangereux pour être rendu public
Attention : des hackers publient de fausses alertes de sécurité sur GitHub pour vous piéger
Axios compromis : un cheval de Troie découvert dans une dépendance du célèbre package npm
Claude Code : la fuite de code source piégée pour distribuer un infostealer
Claude Mythos : le modèle IA d'Anthropic trop dangereux pour être rendu public
Attention : des hackers publient de fausses alertes de sécurité sur GitHub pour vous piéger
Plus de contenu
Quand j'essaie de copier une ligne dans les logs qui défilent en continu
Quand le client me dit qu'il a une idée la veille de la deadline
Vendredi soir
Quand je rajoute un await et que ça corrige un bug sans que je comprenne pourquoi
Quand le testeur sort du scénario pour pousser mon dev dans ses retranchements
Quand je trouve enfin d'où vient le bug sur lequel je travaille depuis une heure
Quand j'ajoute une bibliothèque JavaScript et que mon projet double de taille
Quand je vais voir le commercial après avoir appris ce qu'il vient vendre au client
Quand j'essaie de copier une ligne dans les logs qui défilent en continu
Quand le client me dit qu'il a une idée la veille de la deadline
Vendredi soir
Quand je rajoute un await et que ça corrige un bug sans que je comprenne pourquoi
Quand le testeur sort du scénario pour pousser mon dev dans ses retranchements