🇰🇷 한글 설명
Linux 커널의 BPF 서브시스템에서 percpu 배열 맵을 내부 맵(inner map)으로 교체할 때, 기본 메타 비교 함수가 max_entries를 검사하지 않아 크기가 다른 맵으로의 교체가 허용됩니다. 이로 인해 JIT로 인라인된 인덱스 마스크를 기반으로 한 조회가 pptrs[] 배열 범위를 벗어나 메모리 접근이 발생할 수 있습니다. 수정은 array_map_meta_equal()을 사용하도록 변경하여 max_entries 동일성 검사를 강제하는 것입니다.
💡 쉬운 설명
BPF라는 커널 기능에서 배열 크기를 검사하지 않고 맵을 바꿔 치기할 수 있는 결함입니다. 공격자가 이를 악용하면 할당되지 않은 메모리를 읽거나 쓸 수 있어 권한 상승으로 이어질 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bpf: Use array_map_meta_equal for percpu array inner map replacement
percpu_array_map_ops.map_meta_equal points to the generic
bpf_map_meta_equal(), which does not compare max_entries. When a
percpu array serves as an inner map, replacing it with one that has
fewer max_entries bypasses the check. Since percpu_array_map_gen_lookup()
inlines the original template's index_mask as a JIT immediate, a lookup
on the replacement map can access pptrs[] out of bounds.
Point percpu_array_map_ops.map_meta_equal to array_map_meta_equal(),
which already enforces the max_entries equality check.
Add a selftest to verify that replacing a percpu array inner map with
a differently-sized one is rejected.
📍 영향받는 시스템
패치가 적용되지 않은 BPF percpu 배열 맵을 사용하는 Linux 커널 버전 (정확한 영향 범위는 해당 배포판 보안 공지 확인 필요)
⚔️ 공격 벡터
로컬 사용자가 BPF 시스콜로 내부 맵을 크기가 다른 percpu 배열 맵으로 교체하여 범위를 벗어난 메모리 접근을 유발
🛡️ 대응 방법
배포판 제공 최신 커널 업데이트 적용 또는 해당 수정 커밋이 포함된 커널로 재부팅
🔧 검증 코드
출력된 커널 버전을 배포판 보안 공지의 패치 버전과 비교하여 수정 포함 여부를 확인하고, 낮은 버전이면 업데이트가 필요합니다.
📊 CVSS Vector String
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
💻 영향받는 소프트웨어
IBM Security Verify Access