# Injection de prompt avancée ## Objectif Un agent IA qui lit un document, une page web ou un fichier tiers de son propre chef reproduit un risque classique : l'instruction n'est jamais tapée par l'utilisateur, elle est cachée dans un contenu que l'agent va lire pendant qu'il travaille. `detecteur-injection-prompt-avance` scanne un dossier de fichiers texte et documente six techniques d'injection indirecte, sans dépendance externe et sans aucun appel réseau. ## Stéganographie par caractères de balisage Unicode Le bloc TAGS (U+E0000 à U+E007F) reflète bit à bit l'espace ASCII imprimable : un message entier peut être encodé caractère par caractère dans des points de code totalement invisibles à l'affichage, mais lisibles par un modèle qui traite le flux Unicode brut. Cette technique est documentée publiquement sous le nom "ASCII Smuggling" (recherche en sécurité IA, 2026). L'outil ne se contente pas de signaler la présence de tags : il décode le message caché et l'affiche dans le rapport. ## Cinq autres techniques couvertes - Caractères de formatage bidirectionnel explicite (13 caractères exhaustifs, UAX #9) : la classe exploitée par "Trojan Source" (CVE-2021-42574), qui réordonne l'affichage d'un texte sans changer son ordre logique en mémoire. - Caractères invisibles et de largeur nulle. - Scripts mixtes suspects : tokenisation en runs alphanumériques, avec signalement d'un run qui mélange Latin avec Cyrillique, Grec ou Arménien ET contient au moins un caractère d'une table de confusables — le patron structurel des attaques par homographe, appliqué ici à du texte au lieu de noms de domaine. - Texte masqué visuellement via CSS dans un attribut style. - Faux marqueurs de conversation en tête de ligne, et gabarits de balisage imitant un début de tour de dialogue. > ATTENTION : la table de confusables est volontairement finie (une cinquantaine d'entrées), pas une correspondance avec la base complète du Consortium Unicode. Un homoglyphe rare hors de cette table échappe à la détection — compromis assumé plutôt que d'embarquer une table générée de plusieurs mégaoctets. ## Un piège de conception évité dès la première version Un premier essai de simplification d'un test conditionnel imbriqué a été rejeté par les règles internes du projet, car il masquait silencieusement un cas non géré. Corrigé avec un filtre explicite qui obtient la même lisibilité sans cet écueil. > INFO : le contenu scanné est traité comme une donnée totalement inerte, jamais exécutée ni interprétée — y compris le message décodé de la stéganographie par tags, affiché tel quel dans le rapport, jamais réinterprété comme une instruction par l'outil lui-même. ## Limites assumées Aucune normalisation NFKC (la bibliothèque standard de Rust n'en fournit aucune primitive) : une obfuscation reposant sur une décomposition de compatibilité plutôt que sur un caractère confusable direct n'est pas couverte. La détection des faux marqueurs de rôle repose sur une recherche de sous-chaînes littérales, pas une analyse contextuelle — un texte qui parle légitimement de ces techniques déclenchera des signalements attendus, d'où un marqueur d'exemption ligne par ligne. Cet outil reste un outil de dégrossissage rapide et reproductible, pas une preuve d'absence d'injection.