2 puntos por GN⁺ 2025-02-13 | 1 comentarios | Compartir por WhatsApp
  • Es posible codificar datos arbitrarios en un solo emoji
    • Unicode representa el texto como una secuencia de puntos de código, y cada punto de código es un número al que el Consorcio Unicode le asigna un significado.
    • En el caso de texto simple con alfabeto latino, existe una correspondencia uno a uno entre los puntos de código Unicode y los caracteres que aparecen en pantalla.
    • En otros sistemas de escritura, un carácter visible en pantalla puede representarse con varios puntos de código.
  • Selectores de variación
    • Unicode define 256 puntos de código llamados "selectores de variación", que no se muestran por sí solos en pantalla, pero se usan para modificar la representación del carácter anterior.
    • La mayoría de los caracteres Unicode no tienen variantes, y los selectores de variación deben preservarse incluso durante conversiones.
    • Los 256 selectores de variación ofrecen una forma de ocultar un solo byte.
  • Codificación de datos
    • Al encadenar secuencias de selectores de variación, se puede representar una cadena arbitraria de bytes.
    • Por ejemplo, se pueden codificar los datos [0x68, 0x65, 0x6c, 0x6c, 0x6f] que representan el texto "hello".
    • Después de convertir los bytes en selectores de variación, se adjuntan detrás de un carácter base para realizar la codificación.
  • Decodificación de datos
    • La decodificación es tan simple como la codificación.
    • Al convertir los selectores de variación de vuelta a bytes, se pueden restaurar los datos originales.
  • Posibilidades de abuso
    • Como esto implica abusar de Unicode, no se recomienda.
    • Puede usarse con fines maliciosos, como evadir filtros de contenido para humanos o insertar marcas de agua en el texto.
  • Conclusión
    • Se explica un método para ocultar datos arbitrarios usando emojis, aprovechando los selectores de variación de Unicode.
    • Es un método curioso, pero puede no ser apropiado para un uso real.

1 comentarios

 
GN⁺ 2025-02-13
Comentarios de Hacker News
  • El PUA (Private Use Area) de Unicode se usa para fines internos y personalizados, y no se transfiere a sistemas externos

    • La mayoría de los sistemas y bibliotecas están diseñados para dejarlo pasar tal cual
    • Esto puede convertirse en una posible vía de filtración de datos
    • La mayoría de los desarrolladores no saben mucho más allá de “usa siempre Unicode para evitar problemas de internacionalización”
  • Abusar de Unicode es solo la punta del iceberg

    • Puede provocar desbordamientos de búfer en sistemas que aceptan cadenas Unicode
    • Normalmente causa errores o bloqueos, pero a veces puede producir resultados inesperados y curiosos
  • En una experiencia pasada de pruebas de penetración, recuerdo haber provocado un desbordamiento de búfer en el servidor web backend con simples marcas diacríticas

    • Por lo general solo hacía que el servidor fallara y se reiniciara automáticamente, pero con suficiente manipulación se podría explotar en ciertos sistemas o programas
  • Sanity usa esta técnica para codificar Content Source Maps dentro del texto real de una página web

    • Esto permite que los editores hagan clic en el texto y rastreen fácilmente la estructura del contenido
    • Es mejor no agregarlo a elementos que requieren análisis sintáctico, como fechas, URL o ID
  • Me gusta la idea de usar esta técnica para poner marcas de agua en la salida de los LLM

    • Se podría detectar fácilmente al 99% de los generadores basados en copiar y pegar
    • Me pregunto cuánta información se puede insertar en cada carácter o token
  • StegCloak lleva esta idea un paso más allá al cifrar la carga oculta con AES-256-CTR

  • Además del marcado de agua en la salida de los LLM, también podría usarse para empaquetar datos de log probabilities

    • Se podría incluir información de probabilidad de cada token para aportar transparencia al proceso de generación
    • Forma parte de la especificación de la API de OpenAI y también está soportado por otros motores
  • El título es un poco engañoso

    • El carácter base no tiene que ser un emoji, y el tratamiento de los selectores de variación es igual que con caracteres normales
    • Con emojis se vuelve más divertido
  • El tokenizador sí lo detecta

  • En un trabajo anterior tuvimos que usar punteros de código para contar los “caracteres” en apodos de usuario y mensajes de estado debido a varios casos de abuso

    • No queríamos descargar 9 MB solo para navegar por otros usuarios
  • Los caracteres de etiqueta Unicode reflejan ASCII y a menudo no son visibles en elementos de la UI

    • Algunos LLM interpretan el texto oculto como ASCII y siguen las instrucciones, e incluso pueden escribirlo
  • Existe un caso real de explotación que Microsoft corrigió en Copilot