2 points par GN⁺ 2025-02-13 | 1 commentaires | Partager sur WhatsApp
  • 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

 
GN⁺ 2025-02-13
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

    • La plupart des systèmes et bibliothèques sont conçus pour la laisser passer telle quelle
    • Cela peut constituer une voie potentielle d’exfiltration de données
    • La plupart des développeurs ne savent pas grand-chose au-delà de « utilisez toujours Unicode pour éviter les problèmes d’internationalisation »
  • Le détournement d’Unicode n’est que la partie émergée de l’iceberg

    • Il peut provoquer des dépassements de tampon dans les systèmes qui acceptent des chaînes Unicode
    • En général, cela provoque des erreurs ou des plantages, mais parfois cela peut produire des résultats inattendus et amusants
  • 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

    • Cela faisait surtout planter le serveur, qui redémarrait automatiquement, mais avec assez de manipulation, on peut exploiter certains systèmes ou logiciels
  • Sanity utilise cette technique pour encoder les Content Source Maps dans le texte réel des pages web

    • Cela permet aux éditeurs de cliquer sur le texte pour remonter facilement à la structure du contenu
    • Mieux vaut ne pas l’ajouter aux éléments nécessitant une analyse syntaxique, comme les dates, les URL ou les ID
  • J’aime l’idée d’utiliser cette technique pour le watermarking des sorties de LLM

    • On pourrait facilement repérer 99 % des générateurs basés sur le copier-coller
    • Je me demande quelle quantité d’information peut être insérée dans chaque caractère ou token
  • 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é

    • On pourrait inclure les informations de probabilité pour chaque token afin d’apporter de la transparence sur le processus de génération
    • Cela fait partie de la spécification de l’API OpenAI, et c’est aussi pris en charge par d’autres moteurs
  • Le titre est légèrement trompeur

    • Le caractère de base n’a pas besoin d’être un emoji, et le traitement des sélecteurs de variation est le même que pour les caractères ordinaires
    • C’est simplement plus amusant avec des emojis
  • 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

    • On n’avait pas envie de télécharger 9 Mo juste pour parcourir les autres utilisateurs
  • Les caractères de balise Unicode reflètent l’ASCII et sont souvent invisibles dans les éléments d’interface

    • Certains LLM interprètent le texte caché comme de l’ASCII et suivent les instructions, et peuvent même en écrire eux-mêmes
  • Il existe un cas réel d’exploitation corrigé par Microsoft dans Copilot