CVE-2026-74677 in LinuxИнформация

Сводка

по VulDB • 22.08.2026

В ядре Linux была устранена следующая уязвимость:

net: usb: ipheth: исправление Use-After-Free (UAF) в carrier_work при отключении

Функция ipheth_sndbulk_callback() повторно планирует работу проверки носителя (carrier-check work) для любого ненулевого статуса URB:

else schedule_delayed_work(&dev->carrier_work, 0);

Ничто не привязывает это к состоянию интерфейса как «активного», поэтому работа может быть запланирована снова после того, как ipheth_close() уже очистил её очередь, и оставаться в состоянии ожидания до тех пор, пока netdev, чья область данных содержит эту структуру, не будет освобождена.

При отключении устройства с находящимся в процессе выполнения TX URB, функция ipheth_disconnect() очищает очередь работы через unregister_netdev() -> ipheth_close() -> cancel_delayed_work_sync(), и только затем вызывает ipheth_kill_urbs(). usb_kill_urb() завершает выполняющийся TX URB со статусом -ENOENT, поэтому ipheth_sndbulk_callback() выполняется после очистки очереди и повторно планирует carrier_work.

То же самое завершение (completion) также приводит к повторному планированию работы, если интерфейс был просто отключен во время выполнения TX URB, и ipheth_carrier_check_work() продолжает перезапускать себя каждую секунду. unregister_netdev() не вызывает ipheth_close() для уже отключенного интерфейса, поэтому при последующем физическом отключении устройства ничего также не очищает очередь работы.

В обоих случаях free_netdev() освобождает структуру netdev, пока carrier_work всё ещё находится в состоянии ожидания (pending), и ipheth_carrier_check_work() обращается к уже освобожденной памяти (dereferences freed memory).

Привязка работы к состоянию интерфейса вместо отслеживания завершения операции: отключение её в ipheth_close() и включение в ipheth_open(), чтобы вызов schedule_delayed_work() из callback-обработчика URB становился пустой операцией (no-op), когда интерфейс не активен. disable_delayed_work_sync() также ожидает выполнения запущенного экземпляра, поэтому она полностью заменяет cancel_delayed_work_sync(), которую она замещает. Работа изначально отключена в ipheth_probe(), чтобы счетчики включения/отключения были сбалансированы начиная с первого открытия интерфейса.

Воспроизведено под KASAN на linux-next (next-20260731) с использованием dummy_hcd и raw-gadget вместо реального устройства, что позволило воспроизвести второй описанный путь (интерфейс уже отключен, поэтому unregister_netdev() не вызывает ipheth_close()): 15 из 15 загрузок без патча сообщают об ошибке slab-use-after-free в __run_timers(), освобожденной через ipheth_disconnect() и повторно запланированной из ipheth_sndbulk_callback() посредством queue_delayed_work_on(). Тот же триггер на ядре, отличающемся только этим патчем, показывает 0 ошибок из 15 загрузок, при этом проверка носителя (carrier check) продолжает функционировать в циклах open/close.

Для воспроизведения требуется подключенное USB-устройство, которое прекращает очистку очереди bulk OUT, а также перевод интерфейса в состояние «down» и физическое отключение устройства; все действия выполняются с правами root. Это не является нарушением границ привилегий (privilege boundary crossing), и примитив для эксплуатации (exploit primitive) не разрабатывался.

Обнаружено командой 0sec (https://0sec.ai).

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Ответственный

Linux

Резервировать

15.08.2026

Раскрытие

22.08.2026

Модерация

принято

Вход

VDB-394445

EPSS

0.00000

KEV

Нет

Деятельности

Очень низкий

Источники