26 марта 2026 года команда проекта FreeBSD раскрыла детали ранее обнаруженной сетевой уязвимости (CVE-2026-4247) для проведения удалённого эксплуатируемого вектора DoS-атаки (утечка mbuf) через TCP.

Протокол Transmission Control Protocol (TCP) — это транспортный протокол, ориентированный на установление соединения, который может использоваться в качестве верхнего уровня IP. При получении неожиданных сегментов TCP для установленного TCP-соединения в ответ могут быть отправлены так называемые сегменты «подтверждения запроса» (Challenge ACK), если выполняются определённые критерии. Скорость отправки подтверждений запроса ограничена, чтобы гарантировать, что удалённый узел не будет тратить слишком много циклов ЦП или исходящей полосы пропускания на локальном узле, если получено большое количество неожиданных сегментов TCP. Ограничение скорости контролируется параметрами net.inet.tcp.ack_war_timewindow и net.inet.tcp.ack_war_cnt, которые по умолчанию равны 1000 (миллисекундам) и 5, то есть подтверждения запроса будут отправлены для первых 5 соответствующих сегментов TCP, полученных в течение 1 секунды, а остальные будут проигнорированы. Обработка подтверждений запроса (Challenge ACK) — это общий код в файле tcp_subr.c, используемый во всех доступных в системе стеках TCP. Это включает в себя стеки FreeBSD по умолчанию, RACK и BBR. Существуют различия в поведении разных стеков; например, базовый стек FreeBSD отправляет подтверждения запроса (Challenge ACK) большему количеству неожиданных пакетов.

Оказалось, что когда необходимо отправить подтверждение запроса (Challenge ACK), функция tcp_respond() в FreeBSD формирует и отправляет подтверждение запроса и потребляет переданный mbuf. Если подтверждение запроса не требуется, функция возвращает управление и освобождает mbuf.

Если злоумышленник находится на пути установленного TCP-соединения или может сам установить TCP-соединение с уязвимой машиной FreeBSD, то он может легко создавать и отправлять пакеты, соответствующие критериям подтверждения запроса (ACK), и заставлять хост FreeBSD терять mbuf для каждого созданного пакета сверх настроенных ограничений скорости, то есть при настройках по умолчанию созданные пакеты, сверх первых 5, отправленных в течение 1 секунды, будут терять mbuf. Технически, злоумышленники, находящиеся вне пути прямого соединения между системами, также могут использовать эту проблему, угадывая IP-адреса, номера TCP-портов и в некоторых случаях порядковые номера установленных соединений и подделывая пакеты в направлении машины FreeBSD, но это уже намного сложнее реализовать на практике и эффективность такой атаки будет очень низкой.

Временное решение проблемы: утечку mbuf можно уменьшить, не ограничивая скорость отправки подтверждений (ACK). Этого можно добиться немедленно, установив параметр sysctl net.inet.tcp.ack_war_timewindow равным 0: sysctl net.inet.tcp.ack_war_timewindow=0. Это решение компенсирует утечку mbuf дополнительными затратами ресурсов ЦП/процессора, связанными с ответом на все пакеты, подходящие для подтверждения (ACK), полученные для установленных TCP‑соединений. Чтобы это изменение сохранялось после перезагрузки, добавьте его в файл /etc/sysctl.conf.

Рекомендуемое решение: обновить уязвимую систему до поддерживаемой стабильной или релизной версии FreeBSD / ветки безопасности (releng), выпущенной после даты исправления.

Эта проблема исправлена ​​в соответствующем хеше коммита Git в следующих стабильных и релизных ветках (ветка, хеш, ревизия):

  • stable/15/ 1fddb5435315 stable/15-n282699;

  • releng/15.0/ de9e5d82581e releng/15.0-n281011;

  • stable/14/ b45e7530ffb9 stable/14-n273839;

  • releng/14.4/ 44dd8b58394b releng/14.4-n273676;

  • releng/14.3/ a9cba5321021 releng/14.3-n271476;

2 декабря 2025 года состоялся выпуск стабильного релиза FreeBSD 15.0. Начиная с ветки FreeBSD 15, время сопровождения значительных веток после формирования первого релиза (15.0) сокращено с 5 до 4 лет, а новые значительные ветки будут формироваться раз в два года. Промежуточные выпуски (15.1, 15.2, 15.3) будут разрабатываться в рамках фиксированного цикла разработки, подразумевающего публикацию новых версий в одной ветке примерно через каждые 6 месяцев, а не раз в год, как было ранее. С учётом одновременного сопровождения двух разных значительных веток, новый промежуточный выпуск будет публиковаться раз в 3 месяца (15.4, 16.1, 15.5, 16.2 и тому подобное), за исключением подготовки первых релизов новых значительных веток, перед которыми будет 6-месячный перерыв в релизах (например, релиз 15.3 будет сформирован в июне 2027 года, версия 16.0 выйдет в декабре 2027 года, 15.4 — в марте 2028 года, 16.1 — в июне 2028 года).

10 марта 2026 года состоялся выпуск стабильной версии FreeBSD 14.4. Выпуск FreeBSD 14.0 произошёл в ноябре 2023 года. Согласно пояснению команды разработчиков, ветка FreeBSD 14.x станет последней с поддержкой 32-разрядных платформ. В следующей версии FreeBSD 15.x (первый релиз в конце 2025 года) будет доступна поддержка только 64-разрядных систем, но при этом сохранится возможность сборки 32-разрядных приложений и использования режима COMPAT_FREEBSD32 для запуска 32-разрядных исполняемых файлов в 64-разрядном окружении.