Переполнение буфера в TCP-стеке и уязвимости bhyve затрагивают FreeBSD

FreeBSD

Уязвимости в сетевом стеке, звуковой подсистеме и гипервизоре bhyve затрагивают поддерживаемые ветки FreeBSD. Переполнение буфера в TCP-стеке RACK позволяет удалённому участнику соединения записать данные за границы выделенной памяти в ядре. Ошибки в моделях устройств гипервизора bhyve дают гостевой виртуальной машине возможность аварийно завершить процесс гипервизора или выполнить свой код в окружении хоста. Ещё одна уязвимость в звуковом драйвере открывает локальному пользователю путь к повышению привилегий.

CVE-2026-101307, CVE-2026-101308 и три уязвимости bhyve

FreeBSD подтвердила все пять проблем и 14 октября 2026 года выпустила исправления в поддерживаемых ветках. Уведомления опубликованы открыто, поэтому технические детали доступны. Сведений об использовании этих уязвимостей в реальных атаках вендор не приводит. Самая высокая оценка - 8.2 из 10 по шкале CVSS (общая система оценки серьёзности уязвимостей); у остальных проблем она ниже.

Переполнение буфера в TCP-стеке RACK

Стек RACK реализует в FreeBSD алгоритм обнаружения потерь по последним подтверждениям приёма и подключается как модуль ядра tcp_rack. Внутри него модуль измерения ёмкости пути хранит отсчёты по каждому подтверждению в массиве, который растёт по мере поступления данных. При расширении массива счётчик выделения удваивается, а он 16-битный. После серии удвоений счётчик переполняется и обнуляется, поэтому вместо большого буфера выделяется почти пустой. В него копируются накопленные отсчёты, что даёт запись примерно на 512 КБ за границами буфера в куче ядра. Итог - паника ядра, то есть аварийная остановка системы.

Атака идёт по сети: достаточно установить TCP-соединение с уязвимой системой и отправлять подтверждения приёма. Учётные данные не нужны, участие пользователя не требуется. Проблема затрагивает ветку FreeBSD 15.1 с загруженным модулем tcp_rack. Если модуль не загружен, система этой уязвимости не подвержена; состояние модуля показывает утилита kldstat. Перенести существующие соединения на другой TCP-стек умеет утилита tcpsso.

Состояние гонки в звуковом драйвере

Звуковой драйвер sound представляет каждое аудиоустройство набором символьных устройств. Приложения отображают буфер канала в своё адресное пространство вызовом mmap, чтобы работать со звуком с малой задержкой. Когда размер буфера нужно изменить, драйвер проверяет, что буфер не отображён в память, и снимает блокировку канала на время выделения нового буфера. В этот промежуток другой поток успевает выполнить отображение. Драйвер освобождает уже отображённый буфер, не перепроверив состояние, и возникает использование памяти после освобождения в ядре. Это состояние гонки вида проверка-использование: проверка проходит до операции, а между ними объект меняется.

Для атаки нужен локальный доступ к звуковому устройству. Привилегии не требуются, но учётная запись на системе нужна. Оценка - 5.5 из 10. Затронуты все поддерживаемые версии FreeBSD. Системы без звуковых устройств этой проблеме не подвержены. Обходных мер вендор не называет.

Три уязвимости в моделях устройств bhyve

bhyve - гипервизор FreeBSD, который запускает гостевые системы в виртуальных машинах и эмулирует для них оборудование. В модели xHCI, то есть контроллера USB 3, размер кольца событий не проверялся и не сохранялся: гипервизор перечитывал его из памяти гостя при каждом обращении. Поля блока запроса передачи (TRB) загружались без защиты от одновременного изменения со стороны гостя. Гость, получивший права внутри виртуальной машины, мог вызвать состояние гонки.

В модели звукового устройства HDA не проверялись записи списка буферных дескрипторов (BDL) нулевой длины. Такая запись приводила к чтению или записи за границами буфера при прямом доступе к памяти (DMA), а поля списка гость мог менять после проверки. В модели кадрового буфера (framebuffer) предельные значения разрешения дублировались в двух модулях и разошлись. Запись в область регистров устройства (BAR) задавала произвольные ширину и высоту без проверки, а потоки ввода-вывода и отрисовки по протоколу удалённого доступа к экрану (RFB) не были синхронизированы.

Каждая из трёх проблем получила 7.0 из 10. Для атаки нужен запуск вредоносного кода внутри гостевой системы с привилегиями; сетевой доступ и участие пользователя не требуются. Гость может аварийно завершить процесс bhyve либо выполнить код в пользовательском окружении хоста, но возможности ограничены песочницей Capsicum (изолирующая среда FreeBSD). Обходных мер нет. Виртуальные машины, которым не переданы устройства xhci, hda и fbuf, этой группе проблем не подвержены.

Исправленные версии и порядок обновления

Исправления вошли в 15.1-RELEASE-p5, 14.5-RELEASE-p2 и 14.4-RELEASE-p11. Уязвимость в TCP-стеке исправлена только в ветке 15.1. Системы, установленные из базовых пакетов, обновляются через менеджер пакетов pkg из репозитория FreeBSD-base. Остальные обновляются утилитой freebsd-update, которая сначала получает, а затем устанавливает исправления. После обновления нужна перезагрузка, потому что часть исправлений находится в ядре. Для bhyve достаточно перезапустить все виртуальные машины, хотя перезагрузка тоже подходит. Номера вида 15.1-RELEASE-p5 означают уровень патча системы, а не версию уведомления.

Приоритет задаёт переполнение буфера в TCP-стеке: ему нужно только сетевое соединение, а результат - остановка ядра. Уязвимости bhyve важны на хостах виртуализации, где гостям переданы USB, звук или кадровый буфер. Звуковая уязвимость требует локального доступа, поэтому стоит третьей в очереди на обновление.

Ссылки

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