В ядре Linux устранена следующая уязвимость:
bpf: tcp: исправлено двойное освобождение носков при пакетном перераспределении
bpf_iter_tcp_batch() выпускает текущий пакет через
bpf_iter_tcp_put_batch(), который удаляет ссылки на сокеты и перезаписывает их.
каждый слот с файлом cookie сокета, а затем увеличивает пакет. cur_sk/end_sk
сохраняются для bpf_iter_tcp_resume(), но в случае сбоя перераспределения функция
возвращает ERR_PTR() перед запуском возобновления, оставляя cur_sk < end_sk
слоты, которые теперь содержат файлы cookie, а не указатели носков.
bpf_iter_tcp_seq_stop() затем снова вызывает bpf_iter_tcp_put_batch() и
разыменовывает файл cookie как структуру sock. Очистите пакет на пути сбоя, чтобы функция stop() не освобождала его.
снова. Розетки уже освободились первыми
bpf_iter_tcp_put_batch(), чтобы ничего не утекло, а более поздний read() повторно сканирует
ведро с самого начала, а не пропускать его.
Брат и сестра
Путь сбоя GFP_NOWAIT по-прежнему содержит реальные ссылки на сокеты и остается
для остановки() для освобождения. ОШИБКА: KASAN: null-ptr-deref в __sock_gen_cookie
Чтение размера 8 по адресу 0000000000000059 с помощью эксплойта задачи
...
__sock_gen_cookie (net/core/sock_diag.c:28)
bpf_iter_tcp_put_batch (net/ipv4/tcp_ipv4.c:2918)
bpf_iter_tcp_seq_stop (net/ipv4/tcp_ipv4.c:3270)
bpf_seq_read (ядро/bpf/bpf_iter.c:205)
vfs_read (fs/read_write.c:572)
ksys_read (fs/read_write.c:716)
do_syscall_64
запись_SYSCALL_64_after_hwframe
Паника ядра – не синхронизируется: фатальное исключение
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: bpf: tcp: fix double sock release on batch realloc bpf_iter_tcp_batch() releases the current batch via bpf_iter_tcp_put_batch(), which drops the socket refs and rewrites each slot with the socket cookie, then grows the batch. cur_sk/end_sk are kept for bpf_iter_tcp_resume(), but on realloc failure the function returns ERR_PTR() before resume runs, leaving cur_sk < end_sk over slots that now hold cookies rather than sock pointers. bpf_iter_tcp_seq_stop() then calls bpf_iter_tcp_put_batch() again and dereferences a cookie as a struct sock. Empty the batch on the failure path so stop() does not release it again. The sockets were already freed by the first bpf_iter_tcp_put_batch(), so nothing leaks, and a later read() rescans the bucket from the start instead of skipping it. The sibling GFP_NOWAIT failure path still holds real socket references and is left for stop() to release. BUG: KASAN: null-ptr-deref in __sock_gen_cookie Read of size 8 at addr 0000000000000059 by task exploit ... __sock_gen_cookie (net/core/sock_diag.c:28) bpf_iter_tcp_put_batch (net/ipv4/tcp_ipv4.c:2918) bpf_iter_tcp_seq_stop (net/ipv4/tcp_ipv4.c:3270) bpf_seq_read (kernel/bpf/bpf_iter.c:205) vfs_read (fs/read_write.c:572) ksys_read (fs/read_write.c:716) do_syscall_64 entry_SYSCALL_64_after_hwframe Kernel panic - not syncing: Fatal exception
Характеристики атаки
Последствия
Строка CVSS v3.1
Уязвимые продукты 3
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
6.17
|
6.18.42
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
6.17
|
7.1.6
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
6.17
|
7.2-rc5
|