🇰🇷 한글 설명
Linux 커널의 BPF 구현에서 percpu kptr 저장 시 MEM_PERCPU 플래그 검증이 누락된 취약점입니다. 이로 인해 일반 할당된 메모리가 percpu 맵 필드에 저장될 수 있으며, 이는 임의의 커널 읽기/쓰기 또는 잘못된 주소 재배치로 이어질 수 있습니다.
💡 쉬운 설명
커널의 특정 메모리 관리 규칙을 어기고 잘못된 데이터를 저장할 수 있는 보안 허점이 발견되었습니다. 공격자가 이를 악용하면 컴퓨터의 핵심 권한을 탈취하거나 시스템을 망가뜨릴 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bpf: Require MEM_PERCPU for percpu kptr stores
map_kptr_match_type() treats perm_flags as the set of register type flags
that a kptr field permits. Adding MEM_PERCPU to that set for
BPF_KPTR_PERCPU does not require the source register to carry it, however.
The subset test consequently accepts both a plain bpf_obj_new() allocation
and a referenced kernel pointer into a __percpu_kptr map field.
Loads from the field are always marked MEM_PERCPU. Consumers then treat the
stored value as the cookie returned by bpf_percpu_obj_new(): per-CPU pointer
helpers relocate it, and map teardown selects the per-CPU free path. A plain
allocation can therefore provide an arbitrary kernel read/write, while a
kernel pointer can be relocated into an invalid address or sent through a
missing destructor.
Require the source MEM_PERCPU flag to match the destination field kind.
This preserves valid bpf_percpu_obj_new() stores and rejects both the
program-BTF and kernel-BTF variants.
📍 영향받는 시스템
Linux kernel (BPF percpu kptr 관련 기능 사용 시)
⚔️ 공격 벡터
BPF 프로그램을 통해 MEM_PERCPU 플래그가 없는 일반 메모리 주소를 percpu kptr 맵에 저장하여 커널 메모리 조작
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.