🇰🇷 한글 설명
Linux 커널의 BPF 검증기에서 JMP32 포인터와 0 사이의 비교를 처리할 때 발생하는 취약점입니다. 검증기가 BPF_JMP와 BPF_JMP32 비교를 구분하지 못해 점프 여부를 잘못 예측함으로써 발생합니다.
💡 쉬운 설명
컴퓨터 프로그램이 특정 조건에서 어디로 이동할지 결정할 때, 검증기가 계산을 잘못하여 잘못된 경로로 안내하는 문제입니다. 이로 인해 보안 규칙을 우회하여 시스템의 민감한 메모리에 접근할 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bpf: Don't predict JMP32 pointer vs zero comparisons
Consider the following program:
r1 = map_value; /* low 32 bits are zero at runtime */
r6 = 0xdead000000000000;
if w1 != 0 goto l1;
l0: r1 += r6;
r2 = *(u64 *)(r1 + 0);
exit;
l1: r6 = 0;
goto l0;
At the moment is_branch_taken() reports the jump as always taken,
because it does not distinguish between BPF_JMP and BPF_JMP32
comparisons when processing 'if w1 != 0 ...'.
📍 영향받는 시스템
Linux kernel (BPF 기능이 활성화된 버전)
⚔️ 공격 벡터
조작된 BPF 프로그램을 로드하여 커널 검증기의 논리적 오류를 유도하고 메모리 접근 권한을 획득
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 최신 패치 버전인지 확인