Отдалечено експлоатирана уязвимост в TCP стека на ядрото на Linux

Компания Anthropic разкри информация за критична уязвимост (CVE-2026-98432) в TCP стека на ядрото на Linux, която позволява отдалечено изпълнение на код чрез изпращане на специално оформени пакети. Обявено е за съществуването на работещ експлоит, позволяващ изпълнение на код на ниво ядро и отдалечен достъп до права root в системата. Подготовеният експлоит е подходящ за атака на системи с сървърни процеси, приемащи връзки чрез мрежови сокети, които поддържат използването на протокола MPTCP (Multipath TCP). Подкрепата на MPTCP може да бъде активирана за отделни мрежови сокети, което се прави по подразбиране в стандартната библиотека на езика Go, започвайки от версия Go 1.24 (февруари 2025 г.).

Подготовеният експлоит може да бъде използван при работа с всякакви сървърни приложения на езика Go, включително HTTP-сървър Caddy, при наличие на възможност за изпращане на мрежови пакети към създадения от тях слушащ сокет. Тъй като уязвимостта присъства директно в стека на IPv4 и не е специфична за MPTCP, не е изключено съществуването на експлоити, работещи без обвързване с MPTCP, но подобни експлоити все още не са демонстрирани. Например, е възможна експлоатация на уязвимостта при обработка на заявки за миграция на сокети, налична в конфигурации с параметъра net.ipv4.tcp_migrate_req=1 или при използване на eBPF програми с опция BPF_SK_REUSEPORT_SELECT_OR_MIGRATE.

Уязвимостта е причинена от състояние на гонка, което възниква при едновременно обработване на повторно изпратени SYN заявки при установяване на TCP връзка. Тъй като функцията tcp_v4_syn_recv_sock() предава на дъщерния сокет параметри от структурата ireq->ireq_opt чрез референция, а не чрез копиране, при определени обстоятелства възниква ситуация, при която паметта под структурите inet_opt и ireq_opt с параметри на сокета вече е освободена, но свързаните с тях опции на сокета продължават да се използват (use-after-free).

Отдалената експлоатация се извършва чрез изпращане на поредица от синхронизирани във времето мрежови запитвания. Създаденият експлойт успешно се прилага и за ядра, в които се използва рандомизация на адресите (KASLR), но попаднането в прозореца на състезанието отнема достатъчно много време и изисква голям брой повторни опити. Упрощава експлоатацията фактът, че пропускането на прозореца на състезанието води само до нулиране на сесията за установяване на връзка (handshake), а не до срив на ядрото, което дава възможност за безкрайни опити. В създадения прототип на експлойта за провеждане на атаката бяха необходими около час — 48 минути за определяне на разположението на паметта и още 5 минути за организиране на изпълнението на кода.

Гарантирано блокиращи обходни методи за защита на уязвимостта все още не са представени — като единствен надежден вариант се предлага инсталирането на актуализация на ядрото. Проблемът се проявява от ядрото Linux 4.4 и е отстранен в версиите 5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10 и 7.3. Статусът на отстраняването на уязвимости в дистрибутивите може да бъде оценен на тези страници: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch.
Fedora.

От препоръките за противодействие на конкретни методи на експлоатация, които не блокират уязвимостта в общия случай, може да се отбележи деактивирането на поддръжката на MPTCP и задаването на параметъра net.ipv4.tcp_migrate_req в ядрата sysctl на стойност 0:

sysctl -w net.mptcp.enabled=0
sysctl -w net.ipv4.tcp_migrate_req=0

За определяне наличието на процеси в системата, които използват сокети с
MPTCP, могат да се използват командите:

ip mptcp endpoint show
ip mptcp limits show

За деактивиране на поддръжката на MPTCP в програми на езика Go, трябва да се използва флагът "multipathtcp=0", за задаването на който може да се зададе променливата на средата "GODEBUG=multipathtcp=0". За деактивиране на поддръжката на MPTCP по време на компилация, може да се добави "godebug multipathtcp=0" в файла с модула go.mod. В кода на приложението използването на MPTCP може да се деактивира чрез функциите net.Dialer.SetMultipathTCP и net.ListenConfig.SetMultipathTCP.

Освен разгледаната проблематика, компания Anthropic анонсира серия локално експлоатирани уязвимости в ядрото на Linux, OpenBSD и FreeBSD, позволяващи получаване на права root в системата и излизане от изолирани контейнери; уязвимости в Chrome и Safari, водещи до изпълнение на код в системата при отваряне на специално оформени уеб-страници; уязвимост в ядрото на Windows, водеща до аварийно спиране на работа; уязвимост в платформата Android, която позволява заобикаляне на заключването на екрана и достъп до лична информация и снимки без отключване на устройството (атаката е демонстрирана на смартфона Google Pixel 9).

Допълнение:

  • В nginx възможността за активиране на опцията IPPROTO_MPTCP за слушащия мрежов сокет е налична от версия 1.29.7, но не се прилага по подразбиране.
  • В Lighttpd опцията за включване на MPTCP е налична от версия 1.4.76.
  • В Apache httpd пачовете за поддръжка на MPTCP бяха добавени в клон Apache httpd 2.5-HEAD през 2024 година.
  • В systemd поддръжката за активиране на MPTCP при активиране по сокет е добавена в версия 257.
  • В Apache Traffic Server опцията за включване на MPTCP се поддържа от версия 9.2.4.
  • В HAProxy от версия 3.1.0 е налична опцията „mptcp{,4,6}@
    .”.
  • В Traefik задаването на флага IPPROTO_MPTCP е включено по подразбиране от версии 2.11.26, 3.4.2 и v3.5.0-rc1.
  • В СУБД Valkey от версия 9.0.0 е налична опцията „—mptcp” и настройките „mptcp yes” и „repl-mptcp yes”.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster