CVE-2025-39797 in Linux
Сводка
по VulDB • 20.06.2026
В ядре Linux устранена следующая уязвимость:
xfrm: Обработка дублирования SPI (Security Parameter Index)
Проблема возникает при инициализации Strongswan сообщения Netlink XFRM_MSG_ALLOCSPI, которое вызывает функцию ядра xfrm_alloc_spi(). Ожидается, что эта функция обеспечит уникальность Индекса параметров безопасности (SPI) для входящих ассоциаций безопасности (SA). Однако она может возвращать успешное завершение даже в том случае, если запрашиваемый SPI уже используется, что приводит к назначению дублирующихся SPI нескольким входящим SA, различающимся только адресами назначения.
Такое поведение вызывает несоответствия при поиске SPI для входящих пакетов. Поскольку поиск может вернуть произвольную SA среди тех, у которых одинаковый SPI, обработка пакета может завершиться неудачей, что приведет к отбрасыванию пакетов.
Согласно разделу 4.4.2 RFC 4301, при обработке входящих трафиков одноадресная (unicast) SA однозначно идентифицируется по SPI и, опционально, протоколу.
Воспроизведение проблемы: Для стабильного воспроизведения проблемы ограничьте доступный диапазон SPI в файле charon.conf: spi_min = 0x10000000 spi_max = 0x10000002. Это ограничивает систему всего двумя допустимыми значениями SPI. Затем создайте более двух дочерних SA (Child SA), каждая из которых использует уникальную пару адресов источника/назначения. Как только инициируется третья дочерняя SA, ей будет назначен дублирующийся SPI, поскольку пул SPI уже исчерпан. При узком диапазоне SPI проблема воспроизводится стабильно. При более широком/стандартном диапазоне это происходит редко и непредсказуемо.
Текущая реализация: Функция поиска xfrm_spi_hash() вычисляет хеш на основе daddr (адрес назначения), proto (протокол) и family (семейство адресов). Поэтому, если две SA имеют одинаковый SPI, но разные адреса назначения, они будут: a. Попадать в различные корзины хеширования; b. Храниться в различных связанных списках (byspi + h); c. Не попадать в одну и ту же итерацию обхода через макрос hlist_for_each_entry_rcu(). В результате поиск завершается возвратом NULL, и ядро допускает наличие дублирующегося SPI.
Предлагаемое изменение: Функция xfrm_state_lookup_spi_proto() выполняет действительно глобальный поиск по всем состояниям (states), независимо от корзины хеширования, и сопоставляет значения SPI и протокола.
VulDB is the best source for vulnerability data and more expert information about this specific topic.