CVE-2026-53264
net/sched: act_api: использование RCU с отложенным освобождением для жизненного цикла действий
- Опубликовано
- 25 июн. 2026 г.
- Обновлено
- 5 авг. 2026 г.
- Назначение CNA
- Linux
- Наблюдены доказательства
- 7 авг. 2026 г.
Первичный CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HНизкий · следующие 30 дней
- Процентиль
- 15,6 %
- Дата модели
- 21 сент. 2026 г.
EPSS – это статистическая оценка, а не достоверность или мера воздействия. Объедините это с CVSS, статусом KEV, воздействием и вашей средой.
Резюме
В ядре Linux устранена следующая уязвимость: net/sched: act_api: используйте RCU с отложенным освобождением для жизненного цикла действий Когда NEWTFILTER и DELFILTER выполняются одновременно, возможно возникновение гонки со связанным действием. Проиллюстрируем это на примере CPU0, выполняющего NEWTFILTER, и CPU1, выполняющего DELFILTER: 0: mutex_lock() <-- удерживает блокировку idr 0: rcu_read_lock() 0: p = idr_find(idr, index) <-- действие p допустимо (RCU защищает IDR) 0: mutex_unlock() <-- освобождает блокировку idr 1: refcount_dec_and_mutex_lock() <-- refcnt 1->0, мьютекс удерживается 1: idr_remove(idr, index) <-- действие удалено из IDR 1: mutex_unlock() <-- мьютекс освобождён, что позволяет удалить действие 1: tcf_action_cleanup(p); kfree(p) <-- немедленно освобождает p, без отложенного освобождения 0: refcount_inc_not_zero(&p->tcfa_refcnt) <-- ой, UAF: p указывает на освобождённую память Этот патч исправляет состояние гонки между NEWTFILTER и DELFILTER, добавляя struct rcu_head в tc_action для отложенного освобождения и внедряя call_rcu() в путь удаления для отложенного вызова kfree(). Примечание: это откат коммита d7fb60b9cafb ("net_sched: get rid of tcfa_rcu"), а также модернизация/упрощение для прямого использования kfree_rcu(). Проиллюстрируем новый восстановленный путь выполнения кода: 0: rcu_read_lock() 1: refcount_dec_and_mutex_lock() <-- refcnt 1->0, мьютекс удерживается 1: idr_remove(idr, index) 1: mutex_unlock() 1: call_rcu(&p->tcfa_rcu, tcf_action_rcu_free) <-- отложить kfree до окончания периода ожидания 0: p = idr_find(idr, index) 0: refcount_inc_not_zero(&p->tcfa_refcnt) <-- не срабатывает, refcnt уже 0 1: rcu_read_unlock() <-- освобождение, чтобы освобождение памяти могло выполниться после периода ожидания После вызова CPU1 функции idr_remove() объект больше не доступен через IDR. Последующий вызов idr_find() на CPU0 вернёт NULL, и даже если бы он всё ещё содержал устаревший указатель, немедленный вызов kfree() теперь отложен до окончания периода ожидания RCU, поэтому UAF возникнуть не может.
Источники
2Ответственное использование
Используйте информацию об уязвимостях только в тех системах, которыми вы владеете или имеете право тестировать. Kitploit ссылается на метаданные общедоступных исследований и не хранит код эксплойта или вредоносные полезные данные.