Сообщество разработчиков ядра Linux столкнулось с очередной серьёзной проблемой в подсистеме безопасности. Исследователи выявили уязвимость CVE-2026-46300, получившую кодовое имя Fragnesia (известную также как Copy Fail 3.0). Она позволяет любому непривилегированному пользователю получить права root, перезаписывая данные в страничном кэше. Примечательно, что это уже четвёртая подобная уязвимость за последние две недели, и для неё уже существует рабочий эксплоит.
Уязвимость CVE-2026-46300 (Fragnesia)
Суть проблемы во многом схожа с ранее раскрытыми уязвимостями Copy Fail и Dirty Frag. Как и в случае с Dirty Frag, новая брешь обнаружена в подсистеме xfrm-ESP, однако вызвана она другой ошибкой и требует отдельного исправления. Уязвимость проявляется в ядрах Linux, выпущенных после 5 мая 2026 года. Как выяснилось, она была случайно активирована одним из исправлений, предназначенных для устранения Dirty Frag. Разработчики уже предложили патч, но его первоначальная версия оказалась недостаточной. В результате был подготовлен второй вариант исправления, который пока не вошёл в стабильные выпуски дистрибутивов.
Теперь подробнее о том, как работает Fragnesia. Уязвимость локализована в подсистеме xfrm, отвечающей за трансформацию пакетов в сетевом стеке Linux. Конкретно затронута реализация механизма инкапсуляции протокола ESP (Encapsulating Security Payload - инкапсулирующий протокол безопасности) поверх TCP. Этот механизм, описанный в RFC 8229, применяется для туннелирования трафика IPsec (протокола защиты IP-трафика) через TCP-соединения. Для исключения лишней буферизации операции с использованием алгоритма шифрования AES-GCM выполнялись по месту - то есть через выполнение операции XOR (исключающее ИЛИ) непосредственно с данными в страничном кэше. Из-за логической ошибки в этом процессе возникают условия, позволяющие перезаписать один байт в страничном кэше по выбранному смещению. Повторяя операцию, злоумышленник может байт за байтом изменить содержимое любого файла, кэшированного в памяти.
Почему это опасно? Дело в том, что все операции чтения из файлов в первую очередь обращаются к страничному кэшу. Если злоумышленник модифицирует данные в кэше, последующие чтения вернут подменённые данные, а не то, что реально хранится на накопителе. Эксплуатация уязвимости сводится к изменению страничного кэша для исполняемого файла с установленным флагом suid (set user ID - флаг, позволяющий запускать программу с правами владельца). Для этого файл предварительно должен попасть в кэш (например, через обычное чтение). В предложенном исследователями эксплоите первые 192 байта файла /usr/bin/su в страничном кэше перезаписываются кодом, запускающим /usr/bin/sh. Последующий запуск утилиты su приводит к тому, что в память загружается не оригинальный исполняемый файл с накопителя, а изменённая копия из кэша. В результате пользователь получает root-оболочку.
Вместе с тем для успешной атаки необходимо выполнение одного условия: в системе должно быть разрешено создание пространств имён идентификаторов пользователей (user namespace). В Ubuntu по умолчанию эта возможность заблокирована, однако её можно включить через параметр ядра kernel.apparmor_restrict_unprivileged_userns=0 или соответствующие профили AppArmor (системы мандатного контроля доступа). В других дистрибутивах доступность user namespace для непривилегированных пользователей регулируется параметром kernel.unprivileged_userns_clone: если он равен нулю, атака невозможна.
На момент написания статьи обновления с исправлениями для ядра Linux и пакетов с ядром в дистрибутивах пока не опубликованы. Однако существует временный обходной путь защиты. Администраторы могут заблокировать загрузку модулей ядра esp4 и esp6, выполнив в терминале команду:
| 1 | sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 2>/dev/null; true" |
Эта мера, как отмечают эксперты, идентична той, что рекомендовалась для уязвимости Dirty Frag. После её применения необходимо перезагрузить систему или сбросить кэш страниц (командой echo 1 > /proc/sys/vm/drop_caches), чтобы устранить уже потенциально подменённые данные в памяти.
Теперь о влиянии на пользователей. Уязвимость Fragnesia представляет серьёзную угрозу для серверов и рабочих станций под управлением Linux, особенно в облачных средах и на VPS (виртуальных частных серверах), где пользователи могут иметь ограниченные привилегии. Исследователи, обнаружившие проблему, подтвердили её работоспособность на ядре 6.8.0-111-generic из дистрибутива Ubuntu, запущенном на сервере Linode. Важно подчеркнуть, что атака не требует физического доступа к машине и может быть проведена удалённо, если атакующий имеет возможность выполнить произвольный код с правами обычного пользователя.
В целом ситуация напоминает прошлогодние инциденты с уязвимостями Dirty Pipe и Dirty Cow, но отличается более сложным механизмом эксплуатации. Факт появления четвёртой уязвимости за короткий срок в одной и той же подсистеме вызывает вопросы к процессу рецензирования патчей в ядре Linux. Разработчикам стоит уделить особое внимание тестированию исправлений, чтобы не допускать появления регрессий, которые открывают новые бреши при закрытии старых.
Пользователям и администраторам рекомендуется отслеживать статус исправлений на страницах отслеживания ошибок своих дистрибутивов: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch Linux, Fedora. Пока обновления не вышли, стоит применить временную меру защиты и ограничить возможность создания user namespace для непривилегированных пользователей там, где это возможно. Это снизит риск эксплуатации уязвимости до выхода официальных патчей.
Ссылки
- https://github.com/v12-security/pocs/tree/main/fragnesia
- https://github.com/v12-security/pocs/blob/d4043edc2acbd75d093e3f5795751b678c66b259/fragnesia/fragnesia.c