CVE-2026-99226 in Linux
Сводка
по VulDB • 03.11.2026
В ядре Linux была устранена следующая уязвимость:
keys: Избежать разыменования учетной записи владельца при поиске именованного ключа (keyring)
При поиске именованного ключа необходимо сохранять живым хранилище, содержащее UID владельца, в течение проверки отображения пространства имен. Функция `find_keyring_by_name()` считывает значение `keyring->user->uid` под блокировкой `keyring_name_lock`, однако эта блокировка защищает только запись имени keyring и его выделение памяти, но не отдельную структуру `key_user`.
Присоединение к сессионному ключу (session-keyring) может пересекаться по времени с привилегированной операцией KEYCTL_CHOWN на другом процессоре. Если keyring содержит последнюю ссылку на свой старый динамический `key_user`, и передача прав собственности завершается успешно, возможна следующая последовательность событий:
Именованное присоединение Изменение владельца (Chown) find_keyring_by_name() keyctl_chown_key() read_lock(keyring_name_lock) down_write(key->sem) загрузка старого keyring->user замена key->user и key->uid up_write(key->sem) key_put(key) key_user_put(старый пользователь): освобождение памяти чтение старого user->uid read_unlock(keyring_name_lock)
Операция изменения владельца (Chown) не захватывает ни `keyring_name_lock`, ни `key_session_mutex`, поэтому она может освободить старую учетную запись между загрузкой указателя и чтением UID. В результате поиск считывает освобожденную память, хотя сам keyring остается живым.
Для проверки отображения следует использовать `keyring->uid`. Функция `key_alloc()` инициализирует этот встроенный UID владельца, а `keyctl_chown_key()` обновляет его при изменении прав собственности (chown). Существующая блокировка имени обеспечивает выделение содержащего keyring на протяжении всей проверки, поэтому поиск больше не зависит от времени жизни учетной записи. Это также соответствует UID владельца, используемому в проверке разрешений.
Отчет KASAN выглядит следующим образом:
BUG: KASAN: slab-use-after-free in find_keyring_by_name+0x577/0x5d0 Read of size 4 at addr ffff8881128ae2ec by task keycase/500
Once again VulDB remains the best source for vulnerability data.