🇰🇷 한글 설명
Linux 커널의 BPF 검증기에서 콜백 함수 내의 레거시 패킷 로드 명령어를 처리할 때 발생하는 오류입니다. 검증기가 잘못된 레지스터 상태를 추적하여 예기치 않은 경고를 발생시키고 프로그램 로드를 실패하게 만듭니다. 이를 해결하기 위해 콜백 내의 레거시 로드 명령어를 거부하도록 수정되었습니다.
💡 쉬운 설명
리눅스 시스템의 특정 보안 검사 도구가 오래된 방식의 명령어를 처리하다가 오류를 일으켜 프로그램 실행을 막는 문제입니다. 공격자가 시스템을 파괴하기보다는, 권한이 있는 사용자가 프로그램을 올릴 때 오류가 발생하여 정상적인 동작을 방해할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bpf: Reject legacy packet loads from callbacks
check_ld_abs() models a failed BPF_LD_ABS or BPF_LD_IND in a
subprogram as an implicit return with R0 set to zero. It calls
prepare_func_exit() to explore this synthesized path.
When the load is reached directly from a synchronous callback,
prepare_func_exit() enforces the callback return contract and marks R0
precise. R0 is not derived from a real instruction on this path, so
precision backtracking reaches the callback call with R0 still requested
and triggers the "callback unexpected regs" verifier bug. A privileged
program loader can therefore cause a verifier warning and an -EFAULT
BPF_PROG_LOAD.
These legacy packet-load instructions are deprecated. Reject them from
callbacks rather than complicating their implicit-return model. Check all
active frames before constructing the implicit return so nested static
subprograms cannot hide the callback context.
Global functions are verified independently with a fresh frame zero, so
an active-frame check cannot identify a global function called from a
callback. Also check the complete subprogram call graph during stack-depth
validation and reject a function containing a legacy load when any caller
is a callback. This covers global and static descendants without making
has_ld_abs transitive, preserving its per-function BTF return-type check.
Ordinary uses outside callbacks remain supported.
📍 영향받는 시스템
Linux Kernel (BPF 기능을 사용하는 모든 버전)
⚔️ 공격 벡터
권한이 있는 사용자가 특수하게 조작된 BPF 프로그램을 로드하여 검증기 오류를 유도
🛡️ 대응 방법
해당 취약점이 해결된 최신 버전의 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 패치가 적용된 최신 보안 업데이트 버전인지 확인