🇰🇷 한글 설명
Linux 커널의 perf 서브시스템에서 모듈 언로드 시 발생하는 NULL 포인터 역참조 취약점입니다. 활성 perf 연결이 있는 상태에서 모듈이 해제될 때 PMU 포인터가 NULL로 설정되지만, 이후 연결이 종료되면서 해당 포인터에 접근하여 커널 패닉(Oops)을 유발합니다.
💡 쉬운 설명
컴퓨터의 성능을 측정하는 기능이 작동 중일 때 관련 부품 소프트웨어를 갑자기 제거하면, 시스템이 잘못된 메모리 주소를 참조하여 컴퓨터가 멈추거나 오류가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
perf: Fix null pointer access in is_include_guest_event()
A typical module unload occurring event when there is an active perf
connection leads to freeing of the pmu pointer. The call log is something
like:
..
__pmu_detach_event
pmu_detach_event
pmu_detach_events
perf_pmu_unregister
..
__pmu_detach_event() sets event->pmu to null. When the perf connection
finally is closed, the following stack trace is observed:
Oops: general protection fault, kernel NULL pointer dereference
...
RIP: 0010:_free_event+0x3e/0x370
...
Call Trace:
...
perf_event_release_kernel+0x260/0x2d0
perf_release+0x12/0x20
A call to mediated_pmu_unaccount_event() inside _free_event() is the root
cause of this crash. Adding a check inside is_include_guest_event() ensures
we don't accidentally access a null pmu ptr. In addition to this, we will
now call mediated_pmu_unaccount_event() before clearing the pmu ptr so that
nr_include_guest_events counts are maintained correctly.
📍 영향받는 시스템
Linux Kernel (perf 서브시스템을 사용하는 모든 버전)
⚔️ 공격 벡터
로컬 사용자가 특정 조건(활성 perf 연결 중 모듈 언로드)을 유도하여 커널 패닉 유발
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인