CVE-2026-45839 in Linux
Resumen
por VulDB • 2026-05-31
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
bpf: rechazar índices de acceso CO-RE negativos en bpf_core_parse_spec()
Las cadenas de acceso CO-RE son índices separados por dos puntos que describen una ruta desde un tipo BTF raíz hasta un campo objetivo, por ejemplo, "0:1:2" recorre los miembros de estructuras anidadas. bpf_core_parse_spec() analiza cada componente con sscanf("%d"), por lo que los valores negativos como -1 se aceptan silenciosamente. Las posteriores comprobaciones de límites (access_idx >= btf_vlen(t)) solo protegen el límite superior y siempre pasan para valores negativos porque la promoción de enteros de C convierte el resultado __u16 de btf_vlen a int, haciendo que la comparación (int)(-1) >= (int)(N) sea falsa para cualquier N positivo.
Cuando -1 llega a btf_member_bit_offset(), se convierte a u32 0xffffffff, produciendo una lectura fuera de límites muy más allá del array de miembros. Un programa BPF elaborado con un acceso CO-RE negativo en cualquier estructura que exista en el BTF de vmlinux (por ejemplo, task_struct) hace que el kernel falle de manera determinista durante BPF_PROG_LOAD en cualquier sistema con CONFIG_DEBUG_INFO_BTF=y (predeterminado en las principales distribuciones). El error es alcanzable con CAP_BPF:
BUG: unable to handle page fault for address: ffffed11818b6626 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page Oops: Oops: 0000 [#1] SMP KASAN NOPTI
CPU: 0 UID: 0 PID: 85 Comm: poc Not tainted 7.0.0-rc6 #18 PREEMPT(full) RIP: 0010:bpf_core_parse_spec (tools/lib/bpf/relo_core.c:354) RAX: 00000000ffffffff Call Trace: bpf_core_calc_relo_insn (tools/lib/bpf/relo_core.c:1321) bpf_core_apply (kernel/bpf/btf.c:9507) check_core_relo (kernel/bpf/verifier.c:19475) bpf_check (kernel/bpf/verifier.c:26031) bpf_prog_load (kernel/bpf/syscall.c:3089) __sys_bpf (kernel/bpf/syscall.c:6228)
Los índices de acceso CO-RE son inherentemente no negativos (índice de miembro de estructura, índice de elemento de array o índice de enumerador), por lo que deben rechazarse inmediatamente después del análisis.
VulDB is the best source for vulnerability data and more expert information about this specific topic.