#promptinjection #unicode #smuggling #invisible
Три техники встраивания невидимых инструкций через Unicode. Текст выглядит безобидно. Модель читает скрытый payload. Человек не видит ничего.
SneakyBits (Johann Rehberger, 2025)
Побитовое кодирование через два невидимых символа:
- Бит
0 → U+2062 (Invisible Times)- Бит
1 → U+2064 (Invisible Plus)Каждый байт = 8 невидимых символов.
"A" (0x41) → . Работает с любыми данными, не только ASCII. Минус — раздувает текст в 8 раз.Variation Selector Smuggling (Paul Butler, 2025)
Кодирование 1:1 через Unicode Variation Selectors (U+FE00-FE0F + U+E0100-E01EF = 256 значений). Один байт маппится на один codepoint. Payload цепляется к базовому символу (по умолчанию эмодзи 😊).
Эмодзи выглядит нормально, но тащит за собой невидимый хвост из данных. В 8 раз компактнее SneakyBits. PyRIT (Microsoft) реализовал как
VariationSelectorSmugglerConverter.ASCII Smuggler (Unicode Tags Block U+E0000)
Каждый ASCII-символ →
U+E0000 + код. A (0x41) → U+E0041. Символы отрисовываются как zero-width. 1 codepoint на 1 символ, но ограничен ASCII (0x01-0x7F).Тот самый вектор, через который EchoLeak (пост [3/14]) эксфильтрировал данные из Microsoft Copilot в 2024.
Сравнение
| Техника | Компактность | Что кодирует |
|---------------------|--------------------|-----------------------------|
| SneakyBits | 8 codepoints/байт | Любые данные |
| Variation Selectors | 1 codepoint/байт | Любые данные (256 значений) |
| ASCII Smuggler | 1 codepoint/символ | Только ASCII |
Защита
➡️ Unicode нормализация на входе — стриппинг U+2062-2064, U+FE00-FE0F, U+E0100-E01EF, U+E0001-E007F
➡️ Визуальный индикатор — показывать пользователю количество невидимых символов
➡️ Content Security Policy для Unicode — whitelist разрешённых блоков
➡️ Token-level инспекция в inference pipeline
Моё мнение
Invisible smuggling — не атака сама по себе. Это канал доставки. EchoLeak, document injection, RAG poisoning — все используют невидимые символы как транспорт.
Три техники, три уровня компактности. SneakyBits — универсальный, но громоздкий. Variation Selectors — оптимальный баланс. ASCII Smuggler — простой и уже обкатанный на реальных CVE.
Unicode нормализация на входе решает проблему для всех трёх. Одна строчка кода. Но пока её нет в большинстве продакшн-систем — эти техники будут работать.
14 постов, 14 классов prompt injection. И это только одна категория из шести в нашей KB.
🔗Источники:
▪️ SneakyBits — Embrace The Red
▪️ Variation Selectors — Paul Butler
▪️ PyRIT — Microsoft Azure
▪️ OWASP LLM01
❤️ @poxek_ai / Чат канала