🇰🇷 한글 설명
Linux 커널의 BPF 검증기(verifier)가 버퍼 포인터에 대한 음수 상수 오프셋을 적절히 거부하지 못하는 취약점입니다. 이로 인해 포인터 연산을 통한 잘못된 메모리 접근이 허용되어 보안 경계를 우회할 수 있습니다.
💡 쉬운 설명
컴퓨터 메모리 주소를 계산할 때 실수로 '마이너스' 값을 사용하여 허용되지 않은 영역을 건드리는 것을 막지 못하는 오류입니다. 공격자가 이 허점을 이용해 시스템의 중요한 정보를 몰래 읽거나 수정할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bpf: Reject negative const offsets for buffer pointers
The verifier rejects variable offsets for PTR_TO_TP_BUFFER and PTR_TO_BUF
accesses, but it currently accepts a constant negative offset produced by
pointer arithmetic.
Commit 022ac0750883 ("bpf: use reg->var_off instead of reg->off for
pointers") moved constant pointer offsets from reg->off to reg->var_off.
However, __check_buffer_access() continued to check only the instruction
offset. An access with reg->var_off equal to -8 and an instruction offset
of zero therefore passes verification.
For writable raw tracepoints, the access end is also calculated from the
unsigned reg->var_off.value. An eight-byte access starting at -8 wraps
the calculated end to zero, allowing the program to load and attach
without increasing max_tp_access.
After ensuring that reg->var_off is constant, calculate the effective
access start using signed arithmetic and reject it when it is negative.
Use the validated start to calculate the access end for both
PTR_TO_TP_BUFFER and PTR_TO_BUF.
📍 영향받는 시스템
Linux Kernel (BPF 기능이 활성화된 버전)
⚔️ 공격 벡터
조작된 BPF 프로그램을 로드하여 음수 오프셋을 이용한 메모리 경계 외 접근 시도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인