- 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
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
Abusar de Unicode es solo la punta del iceberg
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
Sanity usa esta técnica para codificar Content Source Maps dentro del texto real de una página web
Me gusta la idea de usar esta técnica para poner marcas de agua en la salida de los LLM
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
El título es un poco engañoso
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
Los caracteres de etiqueta Unicode reflejan ASCII y a menudo no son visibles en elementos de la UI
Existe un caso real de explotación que Microsoft corrigió en Copilot