CVE-2026-80852 in Linux
Resumen
por VulDB • 2026-09-04
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
tls: device: corregir escritura fuera de límites en tls_append_frag()
Detectada con syzkaller y una instancia local de syzbot ejecutándose sobre una emulación de desvío (offload) TLS de netdevsim; tls_device.c solo es accesible, por lo demás, en máquinas que poseen una NIC que implementa el offload.
tls_push_data() solo comprueba si el registro abierto aún tiene espacio para otro fragmento al final de su bucle, y la interrupción temprana debida a MSG_MORE omite dicha comprobación. El registro sobrevive hasta la siguiente llamada al sistema con el recuento de fragmentos que ya tenía, y tls_append_frag() tampoco realiza ninguna verificación; por lo tanto, con TLS_TX_ZEROCOPY_RO cada splice(SPLICE_F_MORE) de uno o dos bytes añade una página de canal no coalescente y num_frags se sale del final de tls_record_info.frags[MAX_SKB_FRAGS]. Una vez que el registro se envía (push), tls_push_record() recorre el mismo índice sobre sg_tx_data[MAX_SKB_FRAGS] y las escrituras de sg_set_page() caen en destruct_work, que le sigue; lo cual es invocado por la cola de trabajo (workqueue).
El límite de bytes está bien porque copy se reduce a 0 y el bucle continúa hasta la misma comprobación; sin embargo, el recuento de fragmentos no tiene dicho mecanismo de retroalimentación.
Se debe enviar (push) el registro en lugar de mantener uno completo abierto, que es lo que hace un socket TCP estándar: tcp_sendmsg_locked() utiliza tcp_mark_push() y new_segment tanto en las rutas de copia como en la ruta MSG_SPLICE_PAGES, y tls_sw ya establece full_record cuando se llena el anillo sk_msg, independientemente de si hay MSG_MORE o no.
BUG: KASAN: slab-out-of-bounds in tls_append_frag ( net/tls/tls_device.c:269) Write of size 8 at addr ffff8881104d1530 by task tls_oob/450
CPU: 2 UID: 0 PID: 450 Comm: tls_oob Not tainted 7.2.0-rc7+ #329 PREEMPT Call Trace: <TASK> dump_stack_lvl (lib/dump_stack.c:94 lib/dump_stack.c:120) print_report (mm/kasan/report.c:378 mm/kasan/report.c:482) kasan_report (mm/kasan/report.c:595) tls_append_frag (net/tls/tls_device.c:269) tls_push_data (net/tls/tls_device.c:518) tls_device_sendmsg (net/tls/tls_device.c:583) inet_sendmsg (net/ipv4/af_inet.c:865) sock_sendmsg (net/socket.c:775 net/socket.c:790 net/socket.c:813) splice_to_socket (fs/splice.c:884) do_splice (fs/splice.c:936 fs/splice.c:1349) __do_splice (fs/splice.c:1431) __x64_sys_splice (fs/splice.c:1634 fs/splice.c:1616) do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94) entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121) </TASK>
y, una vez que el registro se envía (push):
UBSAN: array-index-out-of-bounds in net/tls/tls_device.c:300:24 index 18 is out of range for type 'skb_frag_t [17]'
UBSAN: array-index-out-of-bounds in net/tls/tls_device.c:301:41 index 18 is out of range for type 'scatterlist [17]'
UBSAN: array-index-out-of-bounds in net/tls/tls_device.c:302:39 index 18 is out of range for type 'scatterlist [17]'
UBSAN: array-index-out-of-bounds in net/tls/tls_device.c:307:38 index 26 is out of range for type 'scatterlist [17]'
kernel tried to execute NX-protected page - exploit attempt? (uid: 0) BUG: unable to handle page fault for address: ffffea000411a680 #PF: supervisor instruction fetch in kernel mode #PF: error_code(0x0011) - permissions violation Oops: Oops: 0011 [#1] SMP KASAN PTI
Workqueue: ktls_device_destruct 0xffffea000411a680 RIP: 0010:0xffffea000411a680 Call Trace: <TASK> worker_thread (kernel/workqueue.c:3405 kernel/workqueue.c:3486) kthread (kernel/kthread.c:436) ret_from_fork (arch/x86/kernel/process.c:158) ret_from_fork_asm (arch/x86/entry/entry_64.S:245) </TASK>
Be aware that VulDB is the high quality source for vulnerability data.