- Il est possible d’encoder des données arbitraires dans un seul emoji
- Unicode représente le texte comme une séquence de points de code, chacun étant un nombre auquel le Consortium Unicode attribue une signification.
- Dans le cas d’un simple texte en alphabet latin, il existe une correspondance un à un entre les points de code Unicode et les caractères affichés à l’écran.
- Dans d’autres systèmes d’écriture, un caractère affiché à l’écran peut être représenté par plusieurs points de code.
- Sélecteurs de variante
- Unicode définit 256 points de code appelés « sélecteurs de variante », qui n’apparaissent pas eux-mêmes à l’écran mais servent à modifier le rendu du caractère précédent.
- La plupart des caractères Unicode n’ont pas de variante, et les sélecteurs de variante doivent être conservés lors des conversions.
- Ces 256 sélecteurs de variante offrent un moyen de dissimuler un seul octet.
- Encodage des données
- En chaînant des séquences de sélecteurs de variante, on peut représenter une chaîne arbitraire d’octets.
- Par exemple, il est possible d’encoder les données [0x68, 0x65, 0x6c, 0x6c, 0x6f], qui représentent le texte « hello ».
- Après avoir converti les octets en sélecteurs de variante, on les concatène à un caractère de base pour effectuer l’encodage.
- Décodage des données
- Le décodage est aussi simple que l’encodage.
- Il suffit de reconvertir les sélecteurs de variante en octets pour restaurer les données d’origine.
- Possibilités d’abus
- Comme il s’agit d’un détournement d’Unicode, cette méthode n’est pas recommandée.
- Elle peut être utilisée à des fins malveillantes, par exemple pour contourner des filtres de contenu conçus pour les humains ou insérer un filigrane dans un texte.
- Conclusion
- L’article explique comment cacher des données arbitraires à l’aide d’un emoji, en exploitant les sélecteurs de variante d’Unicode.
- La méthode est amusante, mais peut s’avérer inadaptée à un usage réel.
1 commentaires
Avis Hacker News
La PUA (Private Use Area) d’Unicode est utilisée à des fins internes et personnalisées, et n’est pas transmise aux systèmes externes
Le détournement d’Unicode n’est que la partie émergée de l’iceberg
Lors d’un ancien test d’intrusion, je me souviens avoir provoqué un dépassement de tampon sur le serveur web backend avec de simples signes diacritiques
Sanity utilise cette technique pour encoder les Content Source Maps dans le texte réel des pages web
J’aime l’idée d’utiliser cette technique pour le watermarking des sorties de LLM
StegCloak pousse cette idée plus loin en chiffrant la charge utile cachée via AES-256-CTR
En plus du watermarking des sorties de LLM, cela pourrait servir à empaqueter des données de log-probabilité
Le titre est légèrement trompeur
Le tokenizer les détecte
Dans mon précédent emploi, à cause de plusieurs cas d’abus, nous avons dû utiliser des pointeurs de code pour compter les « caractères » dans les pseudonymes et messages de statut des utilisateurs
Les caractères de balise Unicode reflètent l’ASCII et sont souvent invisibles dans les éléments d’interface
Il existe un cas réel d’exploitation corrigé par Microsoft dans Copilot