🇰🇷 한글 설명
Linux 커널의 arm64 아키텍처에서 tag-based KASAN이 활성화된 경우, BPF 트램펄린 이미지 주소 생성 과정에서 크기 계산과 실제 코드 생성 간의 불일치가 발생합니다. 이로 인해 힙 버퍼 오버플로우가 발생할 수 있으며, 이를 방지하기 위해 주소 방출 시 최악의 경우를 가정하여 크기를 계산하도록 수정되었습니다.
💡 쉬운 설명
컴퓨터의 메모리를 관리하는 과정에서 계산 오류로 인해 허용된 범위를 넘어서는 데이터가 써질 수 있는 취약점입니다. 이 오류를 이용하면 시스템의 보안을 무너뜨릴 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bpf, arm64: Fix address emission with tag-based KASAN enabled
When BPF_TRAMP_F_CALL_ORIG is enabled, the address of a bpf_tramp_image
struct on the stack is passed during the size calculation pass and
an address on the heap is passed during code generation. This may
cause a heap buffer overflow if the heap address is tagged because
emit_a64_mov_i64() will emit longer code than it did during the size
calculation pass. The same problem could occur without tag-based
KASAN if one of the 16-bit words of the stack address happened to
be all-ones during the size calculation pass. Fix the problem by
assuming the worst case (4 instructions) when calculating the size
of the bpf_tramp_image address emission.
📍 영향받는 시스템
tag-based KASAN이 활성화된 arm64 아키텍처 기반 Linux 커널
⚔️ 공격 벡터
BPF_TRAMP_F_CALL_ORIG 옵션이 활성화된 환경에서 특수하게 조작된 BPF 프로그램을 실행하여 힙 버퍼 오버플로우 유도
🛡️ 대응 방법
tag-based KASAN 환경에서 bpf_tramp_image 주소 방출 시 크기 계산 로직이 수정된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력 결과에 KASAN_TAG 설정이 활성화되어 있는지 확인하고, 커널 버전을 최신 보안 패치 버전과 비교합니다.
uname -a && grep -E 'CONFIG_KASAN_TAG=y' /boot/config-$(uname -r) 2>/dev/null