🇰🇷 한글 설명
Linux 커널의 BPF 구성 요소에서 void BTF 타입을 표시할 때 NULL 포인터 역참조가 발생하는 취약점입니다. btf_modifier_show() 함수가 void 타입에 대한 show 연산자가 없음에도 불구하고 이를 호출하여 커널 패닉을 유발할 수 있습니다.
💡 쉬운 설명
리눅스 운영체제의 특정 기능을 사용할 때, 정의되지 않은 데이터 형식을 처리하려다 시스템이 갑자기 멈추거나 오류가 발생하는 문제입니다. 공격자가 특수하게 조작된 데이터를 보내면 시스템을 강제로 종료시킬 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bpf: Fix NULL-ptr-deref when showing a void BTF type
btf_modifier_show() resolves the modifier and then calls
btf_type_ops(t)->show() unconditionally. For the void type (type_id 0,
BTF_KIND_UNKN) kind_ops[] has no entry, so ->show is NULL.
A "const void" (a modifier resolving to void) cannot be a map key or
value - map_check_btf() rejects it because void has no size - so the map
dump path does not reach it. But bpf_snprintf_btf() takes a type_id
straight from the BPF program, and passing such a "const void" from the
vmlinux BTF NULL-derefs:
KASAN: null-ptr-deref in range [0x0000000000000028-0x000000000000002f]
RIP: 0010:btf_modifier_show (kernel/bpf/btf.c:2914)
Call Trace:
<TASK>
btf_type_show (kernel/bpf/btf.c:8251)
btf_type_snprintf_show (kernel/bpf/btf.c:8321)
bpf_snprintf_btf (kernel/trace/bpf_trace.c:1047)
bpf_prog_test_run_raw_tp (net/bpf/test_run.c:829)
__sys_bpf (kernel/bpf/syscall.c:4804)
do_syscall_64 (arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121)
</TASK>
Fall back to btf_df_show() when the resolved type has no show op; it
emits the "<unsupported kind:N>" placeholder already used for kinds like
FWD and FUNC. bpf_snprintf_btf() then returns the length as usual.
📍 영향받는 시스템
Linux kernel (BPF subsystem)
⚔️ 공격 벡터
조작된 BTF(BPF Type Format) 타입을 포함한 BPF 프로그램을 실행하여 커널의 NULL 포인터 역참조 유도
🛡️ 대응 방법
해당 취약점이 수정된 최신 버전의 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 배포판의 보안 업데이트 버전인지 확인