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: Clear stale peer app data after address list changes
- afs: Clear stale peer app data after address list changes
- afs: Clear stale peer app data after address list changes
- afs: Clear stale peer app data after address list changes
Исправление включает:
- Сохранение старого списка адресов в
afs_fs_probe_fileserver()
- Очистку данных
app_dataу удалённых peers до замены состояния endpoint
- Продвижение указателей при сравнении старых и новых списков, если peer встречается в обоих
Рекомендации по исправлению:
- Обновить ядро Linux до версии, содержащей коммит
ba0623fc19a424f4745394c499f9f28a8d88d397
- Проверить наличие исправления в дистрибутиве
- Перезагрузить систему после обновления ядра
- Проверить отсутствие ошибок 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 (если используется)
Эти меры не устраняют уязвимость, но могут снизить вероятность её эксплуатации.
Как проверить устранение уязвимости
После применения исправления выполните:
- Проверка версии ядра
Код:
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 и мониторинг логов ядра. Эти меры не устраняют уязвимость, но могут снизить вероятность её эксплуатации.
Официальные источники
- NVD — CVE-2026-97583
- FIRST EPSS — CVE-2026-97583
- afs: Clear stale peer app data after address list changes - kernel/git/stable/linux.git - Linux kernel stable tree
- afs: Clear stale peer app data after address list changes - kernel/git/stable/linux.git - Linux kernel stable tree
- afs: Clear stale peer app data after address list changes - kernel/git/stable/linux.git - Linux kernel stable tree
- afs: Clear stale peer app data after address list changes - kernel/git/stable/linux.git - Linux kernel stable tree
- CVEs — The Linux Kernel documentation
История обновлений статьи
- 30.09.2026 — Опубликована первая версия материала.
