Уязвимость в обработке STP сетевым мостом Linux позволяет выполнить код в ядре

linux

В ядре Linux обнаружена уязвимость, связанная с обработкой таймеров протокола покрывающего дерева (STP) в реализации программного сетевого моста. Проблема позволяет локальному пользователю выполнить произвольный код в контексте ядра. Эксплойт для неё уже опубликован, а разработчики выпустили исправление.

Детали уязвимости

Сетевой мост в Linux - это программный механизм, объединяющий несколько сетевых интерфейсов в один логический сегмент. Такие мосты широко применяются в виртуализации, контейнерных средах и при построении сложных сетевых конфигураций. Для предотвращения петель в сети мост может использовать протокол STP, который выбирает активные пути и переводит избыточные порты в блокирующее состояние. Работу протокола обеспечивают периодические таймеры, запускаемые ядром.

Уязвимость относится к категории использования после освобождения (use-after-free), то есть к обращению к уже освобождённой области памяти. Таймеры STP встроены во внутреннюю структуру сетевого устройства моста. Когда мост удаляется, память возвращается в системный пул. Если в этот момент таймеры ещё стоят в очереди на выполнение, при срабатывании ядро обращается к памяти, которой больше не существует.

Причина проблемы - в расхождении двух путей завершения работы устройства. При штатном переводе моста из активного состояния в неактивное ядро вызывает процедуру остановки, которая синхронно удаляет все таймеры STP. Однако если интерфейс уже находится в неактивном состоянии и его удаляют напрямую, эта процедура не выполняется. В результате таймеры остаются в очереди, а само сетевое устройство уничтожается.

Для воспроизведения уязвимости нужно выполнить несколько условий. Мост должен быть административно выключен, но с включённым STP. Один из портов моста необходимо перевести в состояние обучения - режим, при котором порт анализирует входящие кадры, но ещё не передаёт данные. В этом состоянии код STP запускает периодические таймеры, причём проверка активности интерфейса не выполняется. После удаления моста таймеры продолжают оставаться в очереди.

Таймеры в ядре организованы по процессорным очередям: каждый процессор имеет собственный список отложенных задач. Когда таймер ставится в очередь, он привязывается к текущему процессору. При срабатывании ядро ищет функцию обратного вызова по указателю, хранящемуся в структуре таймера. Если структура перезаписана, ядро вызовет произвольный адрес.

Через небольшой промежуток времени обработчик таймеров запускает отложенную функцию. Поскольку структура моста уже освобождена, сработавший таймер обращается к некорректной памяти. Если атакующий разместит в этой области собственные данные и подменит указатель на функцию обратного вызова, он получит контроль над потоком выполнения ядра. Это классический сценарий перехвата управления, который обычно приводит к выполнению произвольного кода.

Локальный пользователь, имеющий возможность создавать и удалять сетевые интерфейсы, а также управлять мостами и портами, может использовать уязвимость для повышения привилегий. В мультитенантных средах, где пользователи имеют ограниченный доступ к сетевым настройкам, такая проблема может стать шагом к побегу из контейнера или виртуальной машины. Атака не требует физического доступа к системе, но предполагает наличие учётной записи в ней.

Проблему обнаружили независимые исследователи n132 и Sven Sze. Они представили её на соревновании TyphoonPWN 2026 и заняли второе место в категории повышения привилегий в Linux. Технические детали раскрытия публиковала организация SSD Secure Disclosure.

Разработчики ядра уже включили исправление в основную ветку. Патч доступен в виде коммита 2a00517db8de4be7df3d483b215c5544fb30a191. Администраторам рекомендуется обновить ядро до версии, содержащей это исправление. Дистрибутивы, поддерживающие собственные ядра, должны выпустить обновлённые пакеты в ближайшее время.

До установки патча стоит избегать конфигураций, в которых мост с включённым STP находится в выключенном состоянии. Однако такая мера не является полноценной защитой, так как администраторы не всегда контролируют все возможные сценарии изменения состояния интерфейсов. Наиболее надёжное решение - своевременное обновление ядра.

Уязвимость затрагивает все версии ядра до выхода исправления. Она привлекает внимание к важности согласованной очистки ресурсов при разных путях удаления сетевых устройств. Ошибки в жизненном цикле структур данных периодически встречаются в сетевой подсистеме, и их устранение требует тщательной проверки всех веток завершения работы. Опубликованный эксплойт делает задачу обновления особенно актуальной для систем, где доступ к сетевым настройкам имеют непривилегированные пользователи.

Ссылки

Комментарии: 0