CVE-2026-23192

HIGH CVSS 3.1: 7,8 EPSS 0.02%
Обновлено 3 апреля 2026
Linux
Параметр Значение
CVSS 7,8 (HIGH)
Уязвимые версии 6.15.1 — 6.18.10
Устранено в версии 6.18.10
Тип уязвимости CWE-416 (Использование памяти после освобождения)
Поставщик Linux
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: linkwatch: используйте __dev_put() в вызывающих объектах, чтобы предотвратить UAF После того, как linkwatch_do_dev() вызывает __dev_put(), чтобы освободить linkwatch. ссылка, счетчик ссылок устройства может упасть до 1. На этом этапе netdev_run_todo() может продолжить работу (поскольку linkwatch_sync_dev() видит пустой список и возвращается без блокировки), дождитесь, пока счетчик ссылок достигнет станьте 1 с помощью netdev_wait_allrefs_any(), а затем освободите устройство через kobject_put(). Это создает использование после освобождения, когда __linkwatch_run_queue() пытается вызовите netdev_unlock_ops() на уже освобожденном устройстве.

Обратите внимание, что добавление пары netdev_lock_ops()/netdev_unlock_ops() в netdev_run_todo() перед kobject_put() не будет работать, потому что netdev_lock_ops() является условным — он блокируется только тогда, когда netdev_need_ops_lock() возвращает true. Если устройство не требует ops_lock, linkwatch не будет удерживать блокировки и netdev_run_todo() получение блокировки не обеспечит синхронизацию. Исправьте это, переместив __dev_put() из linkwatch_do_dev() в его звонящие.

Ссылка на устройство логически сочетается с исключением из списка устройство, поэтому для звонящего, который удалил его из списка, разумно чтобы освободить его. Это позволяет разместить __dev_put() после всех устройств. доступы завершены, предотвращая UAF. Ошибку можно воспроизвести, добавив mdelay(2000) после linkwatch_do_dev() в __linkwatch_run_queue(), затем выполняется: ip tuntap добавить режим имя канала tun_test IP-ссылка настроена Tun_test вверх IP-ссылка отключила оператор связи tun_test IP-ссылка включает оператора связи tun_test спать 0,5 ip tuntap del mode имя канала tun_test Отчет КАСАН: ============================================================== ОШИБКА: KASAN: использование после освобождения в netdev_need_ops_lock include/net/netdev_lock.h:33 [inline] ОШИБКА: KASAN: использование после освобождения в netdev_unlock_ops include/net/netdev_lock.h:47 [inline] ОШИБКА: KASAN: использование после освобождения в __linkwatch_run_queue+0x865/0x8a0 net/core/link_watch.c:245 Чтение размера 8 по адресу ffff88804de5c008 с помощью задачи kworker/u32:10/8123.

ЦП: 0 UID: 0 PID: 8123 Связь: kworker/u32:10 Не испорченный syzkaller #0 PREEMPT(полный) Название оборудования: QEMU Standard PC (Q35+ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 01.04.2014 Рабочая очередь: event_unbound linkwatch_event Отслеживание вызова: <ЗАДАЧА> __dump_stack lib/dump_stack.c:94 [встроенный] dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120 print_address_description mm/kasan/report.c:378 [встроенный] print_report+0x156/0x4c9 мм/kasan/report.c:482 kasan_report+0xdf/0x1a0 мм/kasan/report.c:595 netdev_need_ops_lock include/net/netdev_lock.h:33 [встроенный] netdev_unlock_ops include/net/netdev_lock.h:47 [встроенный] __linkwatch_run_queue+0x865/0x8a0 net/core/link_watch.c:245 linkwatch_event+0x8f/0xc0 net/core/link_watch.c:304 process_one_work+0x9c2/0x1840 ядро/workqueue.c:3257 process_scheduled_works ядро/workqueue.c:3340 [встроенный] worker_thread+0x5da/0xe40 ядро/workqueue.c:3421 kthread+0x3b3/0x730 ядро/kthread.c:463 ret_from_fork+0x754/0xaf0 Arch/x86/kernel/process.c:158 ret_from_fork_asm+0x1a/0x30 Arch/x86/entry/entry_64.S:246 </TASK> ==============================================================

Показать оригинальное описание (EN)

In the Linux kernel, the following vulnerability has been resolved: linkwatch: use __dev_put() in callers to prevent UAF After linkwatch_do_dev() calls __dev_put() to release the linkwatch reference, the device refcount may drop to 1. At this point, netdev_run_todo() can proceed (since linkwatch_sync_dev() sees an empty list and returns without blocking), wait for the refcount to become 1 via netdev_wait_allrefs_any(), and then free the device via kobject_put(). This creates a use-after-free when __linkwatch_run_queue() tries to call netdev_unlock_ops() on the already-freed device. Note that adding netdev_lock_ops()/netdev_unlock_ops() pair in netdev_run_todo() before kobject_put() would not work, because netdev_lock_ops() is conditional - it only locks when netdev_need_ops_lock() returns true. If the device doesn't require ops_lock, linkwatch won't hold any lock, and netdev_run_todo() acquiring the lock won't provide synchronization. Fix this by moving __dev_put() from linkwatch_do_dev() to its callers. The device reference logically pairs with de-listing the device, so it's reasonable for the caller that did the de-listing to release it. This allows placing __dev_put() after all device accesses are complete, preventing UAF. The bug can be reproduced by adding mdelay(2000) after linkwatch_do_dev() in __linkwatch_run_queue(), then running: ip tuntap add mode tun name tun_test ip link set tun_test up ip link set tun_test carrier off ip link set tun_test carrier on sleep 0.5 ip tuntap del mode tun name tun_test KASAN report: ================================================================== BUG: KASAN: use-after-free in netdev_need_ops_lock include/net/netdev_lock.h:33 [inline] BUG: KASAN: use-after-free in netdev_unlock_ops include/net/netdev_lock.h:47 [inline] BUG: KASAN: use-after-free in __linkwatch_run_queue+0x865/0x8a0 net/core/link_watch.c:245 Read of size 8 at addr ffff88804de5c008 by task kworker/u32:10/8123 CPU: 0 UID: 0 PID: 8123 Comm: kworker/u32:10 Not tainted syzkaller #0 PREEMPT(full) Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014 Workqueue: events_unbound linkwatch_event Call Trace: <TASK> __dump_stack lib/dump_stack.c:94 [inline] dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120 print_address_description mm/kasan/report.c:378 [inline] print_report+0x156/0x4c9 mm/kasan/report.c:482 kasan_report+0xdf/0x1a0 mm/kasan/report.c:595 netdev_need_ops_lock include/net/netdev_lock.h:33 [inline] netdev_unlock_ops include/net/netdev_lock.h:47 [inline] __linkwatch_run_queue+0x865/0x8a0 net/core/link_watch.c:245 linkwatch_event+0x8f/0xc0 net/core/link_watch.c:304 process_one_work+0x9c2/0x1840 kernel/workqueue.c:3257 process_scheduled_works kernel/workqueue.c:3340 [inline] worker_thread+0x5da/0xe40 kernel/workqueue.c:3421 kthread+0x3b3/0x730 kernel/kthread.c:463 ret_from_fork+0x754/0xaf0 arch/x86/kernel/process.c:158 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246 </TASK> ==================================================================

Характеристики атаки

Способ атаки
Локальный
Нужен локальный доступ
Сложность
Низкая
Легко эксплуатировать
Нужны права
Низкие
Нужны базовые права
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Высокое
Полная утечка данных
Целостность
Высокое
Полная модификация данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1

Уязвимые продукты 16

Конфигурация От (включительно) До (исключительно)
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
6.15.1 6.18.10
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.15:-:*:*:*:*:*:*
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.15:rc2:*:*:*:*:*:*
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.15:rc3:*:*:*:*:*:*
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.15:rc4:*:*:*:*:*:*
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.15:rc5:*:*:*:*:*:*
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.15:rc6:*:*:*:*:*:*
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.15:rc7:*:*:*:*:*:*
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.19:rc1:*:*:*:*:*:*
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.19:rc2:*:*:*:*:*:*
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.19:rc3:*:*:*:*:*:*
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.19:rc4:*:*:*:*:*:*
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.19:rc5:*:*:*:*:*:*
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.19:rc6:*:*:*:*:*:*
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.19:rc7:*:*:*:*:*:*
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.19:rc8:*:*:*:*:*:*