
Реализация fragnesia на Go (CVE-2026-46300)
Одна SA. Один байт за раз. Без состояния гонки.
Go-порт fragnesia (CVE-2026-46300). Относится к классу уязвимостей Dirty Frag — отдельная ошибка, та же поверхность, собственный патч.
Ошибка находится в подсистеме Linux XFRM ESP-in-TCP. Когда TCP_ULP espintcp устанавливается на сокет после того, как данные уже были переданы через splice() из файла в очередь приёма TCP, ядро обрабатывает поставленные в очередь данные как запись ESP-шифротекста и расшифровывает их на месте. Источник этих данных — страница кэша страниц. При расшифровке поток AES-GCM XOR-ится непосредственно в неё.
Результат — контролируемая запись одного байта в кэш страниц любого читаемого файла.
Таблица потокового шифра
Счётный блок AES-GCM (RFC 4106) на позиции 2: [salt(4) || IV(8) || 0x00000002]. Его шифрование сессионным ключом даёт 16-байтовый блок потока. Байт 0 этого блока XOR-ится с целевым байтом. Варьируя младшие 32 бита nonce IV, можно получить все 256 возможных значений байта потока в пределах первых 65536 nonce. Эксплойт строит эту таблицу поиска однократно при запуске через AF_ALG AES-ECB.
Цикл переворота байтов
Для каждого байта полезной нагрузки:
нужный_поток = текущее XOR желаемое.splice, получатель задерживает установку TCP_ULP до тех пор, пока данные не окажутся в очереди).текущее XOR поток = текущее XOR (текущее XOR желаемое) = желаемое.Одна SA. Максимум 192 триггера. Детерминированно.
go build -o fragnesia-go .
./fragnesia-go
В случае успеха запускается root-оболочка через новый PTY. Бинарный файл на диске не изменяется — изменения только в кэше страниц.
echo 1 | tee /proc/sys/vm/drop_caches
esp6 (транспортный режим, IPv6 loopback)Все ядра до патча: https://lists.openwall.net/netdev/2026/05/13/79
Тот же диапазон, что и dirtyfrag.
То же, что и dirtyfrag:
rmmod esp4 esp6
printf 'install esp4 /bin/false\ninstall esp6 /bin/false\n' \
> /etc/modprobe.d/fragnesia.conf
| dirtyfrag-go | fragnesia-go |
|---|
| CVE | CVE-2026-43284 / CVE-2026-43500 | CVE-2026-46300 |
| Транспорт | ESP-in-UDP + RxRPC | ESP-in-TCP (ULP) |
| Гранулярность записи | 4 байта за триггер | 1 байт за триггер |
| Количество SA XFRM | 48 | 1 |
| Криптография | HMAC-SHA256 + CBC-AES | AES-128-GCM |
| Семейство IP | IPv4 | IPv6 |