🇰🇷 한글 설명
Linux 커널의 BPF 구현에서 spin lock 해제 후 RCU 포인터를 적절히 무효화하지 않아 발생하는 취약점입니다. 이로 인해 sleepable BPF 프로그램에서 kptr에 대한 보호가 종료된 후에도 검증기가 포인터를 유효한 것으로 간주하여, 다른 CPU가 객체를 해제하기 전에 해당 포인터를 사용하게 되는 Use-After-Free(UAF) 문제가 발생할 수 있습니다.
💡 쉬운 설명
프로그램이 사용 중인 데이터를 보호하는 잠금 장치가 풀렸음에도 불구하고, 시스템이 해당 데이터가 여전히 안전하다고 착각하여 발생하는 오류입니다. 이로 인해 이미 삭제된 메모리에 접근하게 되어 시스템이 충돌하거나 보안 문제가 생길 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bpf: Invalidate RCU pointers after final spin unlock
In a sleepable BPF program, a spin lock can provide the only RCU protection
for a kptr. The final bpf_spin_unlock() ends that protection, but the
verifier leaves the pointer valid. Another CPU can then free the object
before the pointer is used. A capability-limited runtime PoC triggered a
task_struct use-after-free in __bpf_get_task_stack().
Record whether the program is in an RCU-protected context before releasing
the lock. Invalidate RCU-protected pointers only when the unlock leaves the
final such context. This preserves valid pointers in non-sleepable programs
and inside an explicit RCU read-side section.
📍 영향받는 시스템
Linux Kernel (BPF 기능이 활성화된 버전)
⚔️ 공격 벡터
권한이 제한된 사용자가 특수하게 제작된 BPF 프로그램을 실행하여 task_struct의 Use-After-Free 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인