В ядре Linux обнаружена критическая уязвимость use-after-free в обработке TCP-соединений (IPv4). 9.8 баллов по шкале CVSS 3. Ошибка присутствует в ядре Linux начиная с версии 4.4 и затрагивает обработку входящих IPv4 TCP-соединений. Уязвимость позволяет удалённо захватить сервер с правами root без пароля.
Обновляемся, ибо выстрелить может в самых неожиданных местах. Например, в Xray для VPN серверов. Разработчики Xray выпустили экстренное обновление v26.10.31 из-за этой уязвимости в ядре Linux. Опасность оказалась особенно высокой для сетевых приложений на Go, способных автоматически включать уязвимый механизм соединений. Связь с Xray объясняется как раз используемым языком Go.
Полностью защищает только исправленное ядро Linux. Безопасные ядра 5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10 и 7.3. Однако исправления в исходном коде недостаточно. Производители дистрибутивов должны включить изменения в собственные пакеты, после чего администраторы смогут установить обновления.
Если углубиться
Суть проблемы: когда приходит SYN и создаётся дочерний сокет, указатель на IP-опции (inet_opt) передаётся ему без копирования. При этом другой процессор может в этот же момент обрабатывать повторный SYN и собирать SYNACK, читая те же самые опции.
Раньше ничто не мешало дочернему сокету освободиться, пока SYNACK ещё собирается. А освобождение опций делалось обычным kfree() — без учёта того, что их кто-то ещё может читать. Итог: обращение к уже освобождённой памяти (use-after-free).
Похожая история — при миграции request-сокетов (tcp_migrate_req или BPF-программы для SO_REUSEPORT): клон и оригинал делят одни и те же опции, и при освобождении клона оригинал может всё ещё их использовать.