🇰🇷 한글 설명
Linux 커널의 BPF 검증기에서 widen_imprecise_scalars() 함수가 현재 할당된 스택 깊이를 적절히 계산하지 못하는 취약점입니다. 이로 인해 스택 프레임의 범위를 벗어난 메모리에 접근하여 시스템 안정성을 해칠 수 있습니다.
💡 쉬운 설명
컴퓨터의 임시 저장 공간인 '스택'의 크기를 잘못 계산하여, 허용되지 않은 메모리 영역을 건드릴 수 있는 오류입니다. 이 오류를 이용하면 시스템이 멈추거나 보안 설정이 무력화될 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bpf: account for current allocated stack depth in widen_imprecise_scalars()
The usage pattern for widen_imprecise_scalars() looks as follows:
prev_st = find_prev_entry(env, ...);
queued_st = push_stack(...);
widen_imprecise_scalars(env, prev_st, queued_st);
Where prev_st is an ancestor of the queued_st in the explored states
tree. This ancestor is not guaranteed to have same allocated stack
depth as queued_st. E.g. in the following case:
def main():
for i in 1..2:
foo(i) // same callsite, differnt param
def foo(i):
if i == 1:
use 128 bytes of stack
iterator based loop
Here, for a second 'foo' call prev_st->allocated_stack is 128,
while queued_st->allocated_stack is much smaller.
widen_imprecise_scalars() needs to take this into account and avoid
accessing bpf_verifier_state->frame[*]->stack out of bounds.
📍 영향받는 시스템
Linux Kernel (BPF 기능이 활성화된 버전)
⚔️ 공격 벡터
조작된 BPF 프로그램을 로드하여 검증기의 스택 깊이 계산 오류를 유도하고 메모리 범위를 벗어난 접근 수행
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인