В ядре Linux устранена следующая уязвимость: bpf: отрицательные индексы аксессуаров CO-RE в bpf_core_parse_spec() Стрелки аксессуаров CO-RE…
В ядре Linux устранена следующая уязвимость: bpf: отрицательные индексы аксессуаров CO-RE в bpf_core_parse_spec() Стрелки аксессуаров CO-RE - это индексы, разделенные на толстую кишку, которые описывают путь от корневого типа BTF к целевому полю, например. "0:1:2" проходит через вложенные члены структуры. bpf_core_parse_spec() анализирует каждый компонент с sscanf("%d"), поэтому отрицательные значения, такие как -1, молча принимаются. последующие проверки границ (access_idx >= btf_vlen(t)) только охраняют верхняя граница и всегда распространяется на отрицательные значения, потому что целое C продвижение преобразует результат __u16 btf_vlen в int, делая сравнение (int)(-1) >= (int)(N) ложно для любого положительного N. Когда -1 достигает btf_member_bit_offset() он получает бросок до u32 0xffffffffff, создание внеграничного чтения далеко за пределами массива участников. Созданный Программа BPF с отрицательным CO-RE-аксессуаром на любой структуре, которая существует в vmlinux BTF (например, task_struct) детерминировано разбивает ядро во время BPF_PROG_LOAD на любой системе с CONFIG_DEBUG_INFO_BTF=y (по умолчанию на основных дистрибутивах). Ошибка доступна с помощью CAP_BPF: BUG: неспособность справиться с ошибкой страницы для адреса: offffed11818b6626 #PF: супервайзер читает доступ в режиме ядра #PF: error_code(0x0000) - не-представленная страница Упс: Упс: 0000 [#1] SMP KASAN NOPTI CPU: 0 UID: 0 PID: 85 Comm: poc Не испорчен 7.0.0-rc6 #18 ПРЕМПТ (полный) RIP: 0010:bpf_core_parse_spec (инструменты/lib/bpf/relo_core.c:354) RAX: 00000000ffffffff Трейс по вызову: <TASK> bpf_core_calc_relo_insn (инструмы/lib/bpf/relo_core.c:1321) bpf_core_apply (ядро/bpf/btf.9507) check_core_relo (ядро/bpf/verifier.c:19475) bpf_check (ядро/bpf/verifier.c:26031) bpf_prog_load (kernel/bpf/syscal.c:3089) __sys_bpf (ядро/bpf/syscall.c:6228) </TASK> Индексы аксессуаров CO-RE по своей сути неотрицательны (индекс члена структур, индекс элемента массива, или индекс счетчика), поэтому немедленно отклоните их После разлуки.
| Продукт | Вендор | Статус |
|---|---|---|
| linux | Отслеживается | |
| kernel-doc-6.12 | Отслеживается | |
| kernel-doc-6.12 | Отслеживается | |
| kernel-doc-6.12 | Отслеживается | |
| kernel-doc-6.18 | Отслеживается | |
| kernel-doc-6.18 | Отслеживается | |
| kernel-doc-7.0 | Отслеживается | |
| kernel-doc-un | Отслеживается | |
| kernel-headers-6.12 | Отслеживается | |
| kernel-headers-6.12 | Отслеживается | |
| kernel-headers-6.12 | Отслеживается | |
| kernel-headers-6.18 | Отслеживается | |
| kernel-headers-6.18 | Отслеживается | |
| kernel-headers-7.0 | Отслеживается | |
| kernel-headers-modules-6.12 | Отслеживается | |
| kernel-headers-modules-6.12 | Отслеживается | |
| kernel-headers-modules-6.12 | Отслеживается | |
| kernel-headers-modules-6.18 | Отслеживается | |
| kernel-headers-modules-6.18 | Отслеживается | |
| kernel-headers-modules-7.0 | Отслеживается |