🇰🇷 한글 설명
Linux 커널의 uprobes 기능에서 hprobe_expire() 함수 호출 시 NULL 포인터 역참조가 발생하는 취약점입니다. 프로세스를 복제(fork)하는 과정에서 대기 중인 uretprobe가 있을 경우 커널 패닉(Oops)이 발생할 수 있습니다.
💡 쉬운 설명
컴퓨터의 핵심 운영체제인 리눅스에서 특정 프로그램을 실행하거나 복제할 때, 시스템이 갑자기 멈추거나 오류를 일으킬 수 있는 결함입니다. 프로그램의 동작을 추적하는 기능이 충돌을 일으켜 시스템 전체에 문제를 줄 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
uprobes: Fix NULL pointer dereference in hprobe_expire()
Forking a task that has a pending uretprobe can oops the kernel with a
NULL pointer dereference in the clone() path:
BUG: kernel NULL pointer dereference, address: 0000000000000018
Oops: 0002 [#1] SMP NOPTI
RIP: 0010:hprobe_expire
CR2: 0000000000000018
Call Trace:
uprobe_copy_process
copy_process
kernel_clone
__x64_sys_clone
do_syscall_64
entry_SYSCALL_64_after_hwframe
This was found on real hosts on Meta fleet.
I've got the impression that this is what is happening:
CPU 1 CPU 2 (traced task)
----- -------------------
hit uprobe, prepare_uretprobe():
hprobe LEASED, refcount >= 1
uprobe_unregister()
put_uprobe(): refcount -> 0
fork() -> dup_utask()
hprobe_expire(hprobe, true)
try_get_uprobe() -> NULL
get_uprobe(NULL) <-- Oops
Only take the extra reference when the uprobe is non-NULL; a NULL means
it is gone and is the correct value to return.
📍 영향받는 시스템
uprobes 기능을 사용하는 Linux 커널 (Meta fleet 등 실제 호스트 환경 포함)
⚔️ 공격 벡터
로컬 사용자가 특정 uprobe/uretprobe를 설정한 상태에서 프로세스를 복제(fork/clone)하여 커널 오류 유도
🛡️ 대응 방법
hprobe_expire() 함수 내에서 uprobe가 NULL인지 확인하는 로직을 추가한 최신 커널 패치 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전인지 배포판 보안 공지를 통해 확인
💻 영향받는 소프트웨어
NVIDIA Cloud Gaming Guest Driver for Linux