Exploiter l’armement du redimensionnement d’images contre les systèmes d’IA en production
(blog.trailofbits.com)- Il est possible d’attaquer des systèmes d’IA en production en exploitant des vulnérabilités de redimensionnement d’images
- Une image apparemment normale peut, lors du downscaling, se transformer en charge utile de prompt injection, entraînant une possible exfiltration de données
- Cette attaque a été observée sur divers services réels, dont Google Gemini CLI, en exploitant un décalage entre ce que voit l’utilisateur et ce qui est réellement donné en entrée au modèle
- Les techniques d’attaque et leur impact varient selon les algorithmes de downscaling et leurs implémentations respectives, et l’outil open source Anamorpher permet d’expérimenter des attaques par image
- Parmi les mesures de défense recommandées : fournir un aperçu de l’entrée, appliquer des modèles de conception sûrs et exiger une approbation explicite de l’utilisateur
Contexte et formulation du problème
- Il existe un scénario d’attaque dans lequel une image d’apparence ordinaire, fournie à un système d’IA comme un LLM, déclenche pendant le downscaling une prompt injection multimodale cachée qui exfiltre les données de l’utilisateur vers l’extérieur
- Cette vulnérabilité existe parce que l’image réellement transmise au modèle passe par une étape de mise à l’échelle, au cours de laquelle la charge utile insérée par l’attaquant devient visible
Attaques par redimensionnement d’images visant les systèmes d’IA en production
- Ce billet de blog montre concrètement comment des vulnérabilités de redimensionnement d’images peuvent être exploitées dans des attaques réelles contre divers produits d’IA, dont Gemini CLI, Vertex AI Studio, Gemini web et API, Google Assistant, Genspark
- L’outil open source Anamorpher permet de générer et de valider facilement ces images personnalisées
Exemple d’attaque par exfiltration de données (Gemini CLI)
- Dans Gemini CLI, avec les paramètres par défaut, le serveur Zapier MCP approuve automatiquement tous les appels d’outils MCP sans confirmation de l’utilisateur (paramètre
trust=Truedanssettings.json) - Lorsqu’un utilisateur téléverse une image d’apparence normale, la prompt injection contenue dans l’image redimensionnée provoque l’exfiltration des données de Google Calendar vers l’adresse e-mail de l’attaquant
- Comme aucun aperçu réel n’est fourni, l’utilisateur ne peut pas savoir si le résultat a été altéré ni si une attaque est en cours
- Des attaques similaires par prompt injection ont déjà été observées dans divers outils de développement agentiques, dont Claude Code et OpenAI Codex
- Ces outils présentent souvent par défaut des réglages non sûrs et des schémas système fragiles, ce qui exige des correctifs de fond
Autres cas d’attaque
- Des attaques par prompt injection fondées sur le redimensionnement d’images ont également réussi sur Vertex AI, l’interface web de Gemini, l’API Gemini, Google Assistant et Genspark
- En particulier, dans Vertex AI Studio, l’utilisateur ne peut consulter que l’image en haute résolution et ne voit pas la version réduite réellement consommée par le modèle
- En conséquence, le décalage entre la perception de l’utilisateur et l’entrée réelle du modèle facilite l’attaque
- Le vecteur d’attaque est largement présent à travers de nombreux systèmes et outils
Mécanisme interne des attaques par redimensionnement d’images
- Cette attaque exploite les propriétés d’interpolation des algorithmes de downscaling (rééchantillonnage)
- Parmi les principaux algorithmes de downscaling figurent Nearest Neighbor, Bilinear, Bicubic Interpolation, chacun nécessitant des techniques d’attaque adaptées à ses caractéristiques
- Des différences d’implémentation existent aussi selon les bibliothèques (Pillow, PyTorch, OpenCV, TensorFlow), notamment en matière d’anti-aliasing, d’alignement et de bugs internes
- Pour optimiser l’attaque, l’attaquant doit réaliser une analyse d’empreinte afin d’identifier quel algorithme et quelle implémentation sont utilisés par chaque système
- Des images de test variées, comme des motifs en damier, des cercles concentriques, des motifs en bandes, des effets de Moiré ou des bords inclinés, servent à analyser les caractéristiques des algorithmes et les artefacts
Principes de l’échantillonnage d’images et théorème de Nyquist–Shannon
- Lorsqu’un ruban contient des motifs complexes et qu’on l’échantillonne à intervalles réguliers, une fréquence d’échantillonnage trop faible peut empêcher de reconstruire fidèlement le motif d’origine et produire des distorsions
- Il s’agit de l’effet d’aliasing décrit par le théorème d’échantillonnage de Nyquist–Shannon, que l’attaquant exploite en manipulant les pixels pour faire apparaître un motif précis après downscaling
Anamorpher : outil de création d’images d’attaque
- Anamorpher est un outil open source qui permet de créer et visualiser des images d’attaque adaptées aux principaux algorithmes de downscaling (Nearest Neighbor, Bilinear, Bicubic)
- Par exemple, avec Bicubic Interpolation, la valeur d’un pixel de sortie est déterminée en pondérant les pixels voisins à partir de 16 pixels d’une zone 4x4
- L’attaquant choisit une image à fort contraste (par exemple un fond noir très sombre) et optimise la luminosité des pixels les plus influents (méthode des moindres carrés) pour que le résultat du downscaling forme un motif d’attaque net
- Anamorpher fournit une interface frontend et une API Python, ainsi qu’une architecture backend modulaire qui permet à l’utilisateur d’expérimenter jusqu’à des algorithmes de downscaling personnalisés
Défense et réponses possibles
- La méthode la plus sûre consiste à ne pas utiliser du tout le downscaling d’images et à limiter la taille des images pouvant être téléversées
- Si une transformation et un downscaling sont inévitables, il faut impérativement fournir, sur tous les canaux d’entrée comme les CLI et les API, un aperçu de l’image réellement transmise au modèle
- Il faut en particulier exiger une approbation explicite de l’utilisateur afin que le texte présent dans l’image ne puisse pas déclencher d’appels d’outils sensibles, et appliquer à l’échelle du système entier des modèles de conception sûrs et des réponses systématiques
Travaux à venir
- Sur les appareils mobiles et edge, le risque peut être plus élevé en raison des contraintes de taille d’image fixe et de l’usage plus fréquent d’algorithmes de downscaling inefficaces
- Des recherches supplémentaires et de nouvelles mesures de défense sont nécessaires, notamment sur la combinaison avec l’IA vocale, des algorithmes plus sophistiqués et des méthodes de détection d’injection, la prompt injection sémantique et l’exploitation des artefacts d’upscaling
Conclusion
- Anamorpher est actuellement en phase bêta
- À l’avenir, on peut espérer des retours pertinents et des améliorations en parallèle des recherches sur la sécurité des systèmes d’IA multimodaux et agentiques
1 commentaires
Avis Hacker News
Au début, j’étais un peu perdu, l’article n’expliquait pas très bien comment l’injection de prompt se produisait concrètement… Je me demandais si c’était un effet secondaire du type manipulation des données hexadécimales de l’image pour les convertir en ASCII
Puis j’ai compris : c’était littéralement <i>une méthode pour dissimuler du texte rendu dans l’image</i>
Franchement fascinant
Cette méthode d’attaque est discutée depuis assez longtemps ; on peut se référer à cet article
Le côté vraiment glaçant, c’est qu’en redimensionnant une image, on peut la faire apparaître comme une image complètement différente
Par exemple, si quelqu’un voulait faire arrêter un groupe en l’accusant de posséder des images illégales, il pourrait utiliser ce genre d’astuce de mise à l’échelle pour transformer l’image en mème, en message politique, ou en quelque chose que le groupe ciblé aurait envie de télécharger
En tant que personne qui construit des systèmes VLM, c’est vraiment effrayant
On en est au point où il faut des recommandations OWASP spécifiques aux VLM
J’entends parler de nouvelles techniques d’attaque presque tous les mois
D’ailleurs, OWASP a récemment publié ceci : Multi-Agentic System Threat Modeling Guide
Au début, je n’ai absolument pas remarqué le texte dans l’image
Le problème ne vient pas seulement du redimensionnement : il vient aussi du fait que du simple texte présent dans une image soit traité comme une partie du prompt, sans transparence sur les instructions que l’agent suit réellement
Ce qui est vraiment intéressant ici, c’est l’image adversariale conçue pour paraître différente lors du downscaling
Le downsampling (réduction du nombre d’échantillons) est une technique traditionnelle, il n’y a pas d’IA là-dedans
C’était justement le point qui m’intriguait
Le texte rendu nécessite de l’OCR pour être lu par une machine, donc je ne comprends pas pourquoi une IA passerait par ce processus coûteux
Si cela fait partie d’un système multimodal, il se peut qu’il ne sache pas distinguer ce texte du prompt lui-même
Si c’est bien le cas, alors ce défaut est vraiment difficile à comprendre
À minima, la fonction d’OCR ne devrait pas injecter automatiquement ses résultats dans le prompt ; elle devrait prévenir l’utilisateur et demander confirmation
Je déteste ce genre de système non déterministe et instable
J’aimerais vraiment qu’on revienne à des algorithmes et à des technologies solides
Ce problème n’apparaît que quand les permissions sont trop larges
Mais la tendance actuelle, ce sont les systèmes plus agentiques, et ils ont souvent besoin de permissions plus souples
Il suffit d’imaginer un robot humanoïde qui ramasse un colis posé devant chez vous
La vision est indispensable pour qu’il puisse saisir le colis
Si quelqu’un colle une image sur le colis pour tenter une injection de prompt, on pourrait pousser le robot à jeter des objets de valeur par la fenêtre
Je pense qu’il est urgent de protéger ce type de système contre l’injection de prompt
Le vrai problème ici n’est pas que l’image contienne un prompt, mais que le robot ne sache pas distinguer qu’un ordre vient d’une source non autorisée à demander cette action
Le problème fondamental des modèles de ML, c’est que leur reasoning passe par le flux de tokens du modèle, et comme ce flux accepte aussi des entrées externes, le modèle n’a aucun mécanisme efficace pour distinguer ses propres pensées des entrées extérieures
Cela doit être intégré directement au système
Par exemple, il faut empêcher l’agent d’utiliser son bras pour des actions destructrices
Si on s’attend à ce qu’une machine obtienne une morale humaine par libre arbitre et qu’on essaie juste de distinguer les « bons prompts » des « mauvais prompts », on continuera d’être surpris par la dangerosité de ces systèmes
En résumé, une gouvernance vérifiable et un déterminisme comportemental sont indispensables pour ce type de systèmes
C’est probablement encore plus important que les contre-mesures à l’injection de prompt
On peut résoudre le problème en donnant au robot un prompt lui disant d’ignorer les faux prompts
En général, je me demande si le problème de l’injection de prompt ne pourrait pas être suffisamment traité par une hiérarchie de tâches
On pourrait faire en sorte que le LLM exécute le travail en le découpant en composants plus petits
Le LLM chargé de la tâche de niveau supérieur n’a pas besoin de connaître librement tous les détails de niveau inférieur, il peut simplement filtrer et affiner les résultats
Cela permettrait aussi de limiter le contexte de l’instance LLM de niveau supérieur, ce qui l’aiderait à rester focalisée
Bien sûr, les sous-tâches peuvent transmettre des données au niveau supérieur, mais on n’est pas obligé de concevoir le système ainsi
Pour des tâches sensibles du point de vue de la sécurité, il vaut peut-être mieux que le LLM supérieur ne reçoive pas de sortie libre
Un bon algorithme de mise à l’échelle d’image doit absolument prendre en compte la limite de Nyquist
Par exemple, si on réduit une image à un tiers de sa taille d’origine avec un redimensionnement bicubique, il faut utiliser une grille 12x12, pas 4x4
Il suffit aussi de légèrement adapter la formule qui calcule les poids appliqués
Il faut également faire le de-gamma de l’image
C’est dommage que les bons algorithmes de mise à l’échelle soient si rares
Ils laissent passer beaucoup trop d’aliasing (distorsion d’information)
Comme l’indique l’article, même avec un meilleur algorithme, si la taille du kernel est suffisante, un peu d’information peut encore subsister à cause de la quantification, mais l’impact diminue fortement
Ce qui m’étonne, c’est que même des bibliothèques populaires se contentent encore du mipmapping (génération préalable de plusieurs tailles)
De bons filtres de rééchantillonnage étaient déjà utilisés pour du traitement vidéo en temps réel sur des CPU d’il y a 15 ans
Il arrive souvent que la correction gamma coûte plus de calcul que l’augmentation de la taille du kernel
Selon les cas, omettre la correction gamma plutôt que le rééchantillonnage par filtre peut avoir une vraie justification
L’avenir de la sécurité des LLM me fait vraiment peur
On a construit des systèmes qui ignorent complètement des principes appris au prix de nombreux essais et erreurs, comme la séparation in-band entre données et commandes
Il existe énormément de vecteurs d’attaque : de la simple insertion visible d’instructions à ce genre d’obfuscation, en passant par l’ASCII Smuggling
Quant aux défenses, elles reviennent souvent à demander gentiment à un algorithme non déterministe de ne pas suivre des instructions inappropriées
Référence : Cacher et retrouver du texte avec les tags Unicode
De plus en plus de développeurs supplient les LLM de bien vouloir se comporter correctement
Ça rappelle l’ambiance de Warhammer 40k, c’est à la fois drôle et inquiétant
L’autre alternative, c’est de ne pas utiliser du tout de LLM, ni de système qui en contient
Ça me fait penser à l’époque où, en php, on construisait des requêtes en concaténant directement les entrées utilisateur dans des chaînes, puis on jouait sans fin à la taupe pour bloquer les motifs dangereux
C’est triste de refaire la même erreur des décennies plus tard, faute de savoir séparer les données et les commandes
Je trouve étonnant qu’il n’existe rien comme un token sudo dans le modèle
J’aurais aimé qu’il y ait une syntaxe qui ne puisse pas être exprimée avec des tokens ordinaires
On a l’impression de revenir à l’époque des anciens terminaux série
Je trouve vraiment frappant de ne jamais avoir pensé au fait qu’on puisse cacher quelque chose dans une image pour l’envoyer
Les LLM sont vraiment les logiciels les plus vulnérables de l’histoire
Quand je testais autrefois le prédécesseur de Gemini, je me souviens que si on entrait un message initial très long, on pouvait évincer le prompt système et lui faire faire n’importe quoi
Le passage « This image and its prompt-ergeist » m’a beaucoup marqué
Je me demande si ajouter un peu de bruit à l’image avant le downsampling pourrait résoudre ce problème
Lorsqu’on réduit une image, il faut appliquer un smoothing pour supprimer les hautes fréquences proches du taux d’échantillonnage
Cela permet de réduire les effets d’aliasing
Il suffit de chercher le terme « théorème d’échantillonnage de Nyquist-Shannon »
C’est une théorie assez connue en traitement numérique du signal
Cela peut constituer une mesure de sécurité dans une certaine mesure, mais l’efficacité dépend de la manière dont le texte a été caché et du type de bruit utilisé
Le problème, c’est qu’on risque aussi d’effacer du contenu réellement utile (texte légitime, détails, etc.), donc ce n’est pas une vraie solution
Je me demande si j’ai raté quelque chose
Si la méthode d’attaque ici consiste à « injecter du texte obfusqué dans une image… en espérant <i>qu’un système l’interprète comme un prompt</i> », est-ce bien cela ?
Oui
Cette attaque exploite intelligemment l’algorithme de downscaling pour cacher du texte de manière invisible à l’œil humain
Selon l’architecture du système, l’étape qui consiste à « le cacher aux humains » peut même être superflue
Les LLM ne font fondamentalement aucune distinction entre données et commandes, donc dès qu’une commande se glisse dans le flux de données, on peut contrôler le comportement du modèle
J’ai aussi mis ce genre d’exemple dans ma bio
« injecter du texte obfusqué dans une image, en espérant que le système l’interprète comme un prompt »
Ce qui manque ici, c’est l’hypothèse selon laquelle le « prompt » serait une entrée dotée d’un privilège particulier
En réalité, le prompt n’est qu’une partie de l’entrée globale, et le modèle traite toutes les entrées de la même manière
C’est pour cela que les attaques du type « ignore toutes les instructions précédentes et… » continuent de marcher depuis si longtemps
Je me demande pourquoi le modèle ne sait pas distinguer le texte contenu dans une image d’un prompt textuel classique