CVE-2026-97583 в Linux Kernel: use-after-free в AFS, уязвимые версии и защита

CVE: CVE-2026-97583
Продукт: Linux Kernel
Дата публикации: 25.09.2026
Критичность: HIGH
CVSS: 7.5 (3.1)
EPSS: 0,41%; процентиль 32,48%
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


Уязвимость CVE-2026-97583 затрагивает модуль AFS в ядре Linux. Ошибка возникает при обновлении списка адресов сервера: функция afs_fs_probe_fileserver() не сохраняет старый список, из-за чего peers, удалённые из списка, остаются с непочистенными данными app_data. После освобождения объекта через RCU другой CPU может обратиться к уже освобождённой памяти и вызвать use-after-free в afs_find_server().

Основные характеристики​


Риск связан с обращением к освобождённой памяти внутри ядра Linux при работе модуля AFS (Andrew File System). Это может привести к нестабильности ядра или компрометации системной памяти.

  • Тип ошибки: use-after-free в ядре Linux, компонент AFS
  • CVSS v3.1: CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H (7.5, HIGH)
  • Вектор атаки: удалённый доступ без привилегий, но с высокой сложностью и требованием взаимодействия пользователя
  • Факт эксплуатации: не подтверждён в предоставленных источниках
  • EPSS: 0,41% (процентиль 32,48%)

Какие продукты и версии затронуты​


Затронут модуль AFS в ядре Linux. Конкретные версии дистрибутивов и диапазоны версий ядра не указаны в предоставленных источниках.

  • Компонент: Linux Kernel, подсистема AFS (Andrew File System)
  • Файлы с изменениями: fs/afs/addr_list.c и fs/afs/fs_probe.c
  • Функции: afs_fs_probe_fileserver(), afs_set_peer_appdata(), afs_find_server()
  • Связанные механизмы: RxRPC, RCU (Read-Copy-Update), управление памятью ядра

Причина уязвимости​


Ошибка находится в функции afs_fs_probe_fileserver() в файле fs/afs/fs_probe.c. При получении текущего состояния endpoint под блокировкой server->fs_lock переменная old_alist остаётся равной NULL.

Из-за этого функция afs_set_peer_appdata() воспринимает каждую замену списка адресов как первичную настройку. Она связывает только новые peers и не развязывает peers, удалённые из старого списка. В результате данные app_data у старых peers остаются непочистенными.

Когда CPU 0 заменяет список сервера S и удаляет Pold без очистки его app_data, уничтожитель сервера очищает только текущие peers S и позволяет объекту S дойти до RCU callback. После освобождения объекта через RCU callback другой CPU (CPU 1) обрабатывает callback через RxRPC-соединение, которое всё ещё закрепляет Pold, читает Pold->app_data и вызывает afs_use_server() на освобождённом объекте.

Вторая часть проблемы — в функции afs_set_peer_appdata() в файле fs/afs/addr_list.c. При сравнении старых и новых списков, если peer встречается в обоих списках, указатели не продвигаются. Это приводит к бесконечному циклу на общем элементе.

Исправление сохраняет старый список адресов для обновления peer app-data, чтобы удалённые peers были очищены до замены состояния endpoint. Также исправление продвигает оба указателя, когда старый и новый списки разделяют peer.

Как работает атака​


Атака использует гонку между двумя CPU в ядре Linux при работе модуля AFS.

Первый CPU выполняет обновление списка адресов сервера. Он заменяет текущий список новым и удаляет старые peers, но не очищает их данные app_data. Объект сервера S остаётся в памяти до того, как RCU callback освободит его.

Второй CPU обрабатывает входящий RxRPC-пакет. Через соединение, которое всё ещё закрепляет старый peer Pold, он обращается к освобождённой памяти объекта S. Функция afs_find_server() читает данные из освобождённого блока slab и вызывает afs_use_server() на этом объекте.

KASAN фиксирует ошибку как slab-use-after-free в функции afs_find_server()+0x3c/0xa0. Чтение размера 4 байта происходит по адресу, который уже освобождён через RCU callback.

Полный стек вызовов:

Код:
afs_find_server+0x3c/0xa0
afs_rx_new_call+0x15c/0x390
rxrpc_new_incoming_call+0x97c/0x1730
rxrpc_input_packet.constprop.0+0xd03/0xec0
rxrpc_io_thread+0x967/0x1640

Объект был выделен через цепочку:

Код:
afs_lookup_server+0x1a7/0x14c0
afs_alloc_server_list+0x43f/0xb60
afs_create_volume+0x923/0x1490
afs_get_tree+0x1c6/0x10a0

И освобождён через:

Код:
kfree+0x131/0x3c0
rcu_core+0x50a/0x1850

Условия успешной эксплуатации​


Для успешной эксплуатации необходимы следующие условия:

  • Активный модуль AFS в ядре Linux, подключённый к сети или используемый для доступа к файловой системе
  • Обновление списка адресов сервера, которое вызывает замену старого списка на новый
  • Гонка между CPU, когда один CPU освобождает объект через RCU callback, а другой обращается к нему через RxRPC-соединение
  • Наличие RxRPC-подключений, которые закрепляют старые peers до освобождения объекта
  • Высокая сложность атаки (AC:H), что означает необходимость точного синхронизированного взаимодействия с внутренними состояниями ядра

Возможный сценарий атаки​


Сценарий начинается с системы, где модуль AFS подключён к серверу. При обновлении списка адресов происходит замена старого списка на новый.

CPU 0 выполняет замену списка и удаляет старый peer Pold. Данные app_data у Pold не очищаются. Объект сервера S доходит до RCU callback и освобождается.

После освобождения CPU 1 обрабатывает входящий RxRPC-пакет. Соединение всё ещё закрепляет Pold, поэтому CPU 1 обращается к Pold->app_data и вызывает afs_use_server() на уже освобождённом объекте S.

В результате происходит чтение из освобождённой памяти slab и обращение к невалидным указателям. Это может привести к повреждению ядра или компрометации системной памяти.

Сценарий подтверждён отчётом KASAN как slab-use-after-free в функции afs_find_server().

Есть ли публичный эксплойт​


В предоставленных источниках нет информации о публичном эксплойте, PoC или подтверждённой эксплуатации CVE-2026-97583.

Отсутствуют данные о:

  • Публичных инструментах или скриптах для эксплуатации
  • Подтверждённых атаках в реальных системах
  • Специфичных индикаторах компрометации, привязанных к этой уязвимости
  • Командах для автоматической проверки эксплойта

Отсутствие сведений не означает отсутствие эксплойта. Это может означать, что данные ещё не опубликованы или не собраны в предоставленных источниках.

Признаки эксплуатации​


Специфичные IOC для CVE-2026-97583 не подтверждены в предоставленных источниках.

Неспецифичные точки контроля:

  • Аномальные ошибки ядра в логах, связанные с use-after-free или KASAN отчётами
  • Неожиданные сбои модуля AFS при обновлении списка адресов сервера
  • Высокая нагрузка на RxRPC и аномальные паттерны входящих пакетов
  • Повышенная активность задач ядра, связанных с RCU callback и освобождением памяти
  • Необычные изменения в файловой системе AFS или ошибки доступа к томам

Эти признаки не являются подтверждёнными IOC для данной уязвимости. Они могут указывать на другие проблемы с модулем AFS или ядром.

Как обнаружить атаку​


Для обнаружения потенциальной эксплуатации CVE-2026-97583 рекомендуется:

  • Мониторинг логов ядра на ошибки KASAN, use-after-free и slab-use-after-free
  • Анализ активности модуля AFS при обновлении списка адресов сервера
  • Контроль RxRPC-соединений на аномальные паттерны входящих пакетов
  • Проверка версий ядра на наличие исправления CVE-2026-97583
  • Анализ задач ядра, связанных с RCU callback и освобождением памяти

Команды для проверки версии ядра:

Код:
uname -r
uname -a
cat /proc/version

Для поиска ошибок KASAN в логах:

Код:
grep -i "kasan" /var/log/kern.log
grep -i "use-after-free" /var/log/kern.log
grep -i "slab-use-after-free" /var/log/kern.log

Для проверки активности модуля AFS:

Код:
dmesg | grep -i afs
dmesg | grep -i rxrpc
dmesg | grep -i rcu

Как проверить свою версию​


Проверка версии ядра Linux:

Код:
uname -r
uname -a
cat /proc/version

Проверка наличия модуля AFS:

Код:
lsmod | grep afs
dmesg | grep -i afs

Проверка активных подключений AFS:

Код:
netstat -an | grep -i afs
ss -tunap | grep -i afs

Проверка исправления в ядре (если доступно):

Код:
grep -r "CVE-2026-97583" /lib/modules/$(uname -r)/kernel/
grep -r "afs_fs_probe_fileserver" /lib/modules/$(uname -r)/kernel/

Проверка версий дистрибутивов и пакетов ядра:

Код:
dpkg -l | grep linux-kernel  # Debian/Ubuntu
rpm -qa | grep kernel        # RHEL/CentOS/Fedora
apt-cache policy linux-image-generic  # Debian/Ubuntu
yum list installed | grep kernel    # RHEL/CentOS/Fedora

Исправление​


Исправление CVE-2026-97583 доступно в стабильных ветках Linux kernel.

Коммит с исправлением:


Исправление включает:

  • Сохранение старого списка адресов в afs_fs_probe_fileserver()
  • Очистку данных app_data у удалённых peers до замены состояния endpoint
  • Продвижение указателей при сравнении старых и новых списков, если peer встречается в обоих

Рекомендации по исправлению:

  1. Обновить ядро Linux до версии, содержащей коммит ba0623fc19a424f4745394c499f9f28a8d88d397
  2. Проверить наличие исправления в дистрибутиве
  3. Перезагрузить систему после обновления ядра
  4. Проверить отсутствие ошибок KASAN после обновления

Для систем с дистрибутивами:

Код:
dpkg -l | grep linux-kernel  # Debian/Ubuntu
rpm -qa | grep kernel        # RHEL/CentOS/Fedora

Обновление через пакетный менеджер:

Код:
dpkg --configure -a && apt-get update && apt-get upgrade  # Debian/Ubuntu
yum update kernel  # RHEL/CentOS/Fedora

После обновления проверьте версию ядра и наличие исправления.

Временные меры защиты​


Временные меры защиты при отсутствии возможности немедленного обновления:

  • Отключить модуль AFS, если он не используется в критичных операциях
  • Ограничить доступ к AFS на уровне сети, разрешив только доверенным узлам
  • Мониторинг логов ядра на ошибки KASAN и use-after-free
  • Ограничение частоты обновлений списка адресов сервера AFS
  • Отключение RxRPC, если он не используется для других целей

Команды:

Код:
modprobe -r afs  # Отключить модуль AFS (если возможно)
modprobe -r rxrpc  # Отключить модуль RxRPC (если возможно)

Важно: отключение модулей может повлиять на работу систем, использующих AFS или RxRPC. Перед выполнением убедитесь, что это безопасно для вашей инфраструктуры.

Для ограничения доступа к AFS:

Код:
iptables -A INPUT -p tcp --dport 2049 -j DROP  # Блокировать доступ к порт AFS (если используется)

Эти меры не устраняют уязвимость, но могут снизить вероятность её эксплуатации.

Как проверить устранение уязвимости​


После применения исправления выполните:

  1. Проверка версии ядра

Код:
uname -r
uname -a
cat /proc/version

  • Проверка наличия исправления в исходниках ядра

Код:
grep -r "old_alist = old->addresses" /lib/modules/$(uname -r)/kernel/
grep -r "n++" /lib/modules/$(uname -r)/kernel/fs/afs/addr_list.c

  • Проверка активности модуля AFS

Код:
dmesg | grep -i afs
dmesg | grep -i rxrpc
dmesg | grep -i kasan

  • Тестирование обновления списка адресов

  • Выполните обновление списка адресов сервера AFS
  • Проверьте логи на ошибки KASAN или use-after-free
  • Убедитесь, что модуль AFS работает стабильно

  • Проверка через dmesg

Код:
dmesg -T | grep -i "kasan"
dmesg -T | grep -i "use-after-free"
dmesg -T | grep -i "slab-use-after-free"

Если ошибок нет и версия ядра содержит исправление, уязвимость считается устранённой.

Вывод​


CVE-2026-97583 — это use-after-free в модуле AFS Linux kernel, вызванный неочисткой данных peer при обновлении списка адресов сервера. Ошибка подтверждена отчётом KASAN и может привести к повреждению ядра или компрометации системной памяти.

Исправление доступно в стабильных ветках Linux kernel через коммит ba0623fc19a424f4745394c499f9f28a8d88d397. Рекомендуется обновить ядро до версии, содержащей этот коммит, и проверить отсутствие ошибок KASAN после обновления.

При отсутствии возможности немедленного обновления рассмотрите временные меры: отключение модуля AFS, ограничение доступа к RxRPC и мониторинг логов ядра. Эти меры не устраняют уязвимость, но могут снизить вероятность её эксплуатации.

Официальные источники​


  1. NVD — CVE-2026-97583
  2. FIRST EPSS — CVE-2026-97583
  3. afs: Clear stale peer app data after address list changes - kernel/git/stable/linux.git - Linux kernel stable tree
  4. afs: Clear stale peer app data after address list changes - kernel/git/stable/linux.git - Linux kernel stable tree
  5. afs: Clear stale peer app data after address list changes - kernel/git/stable/linux.git - Linux kernel stable tree
  6. afs: Clear stale peer app data after address list changes - kernel/git/stable/linux.git - Linux kernel stable tree
  7. CVEs — The Linux Kernel documentation

История обновлений статьи​


  • 30.09.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ