CVE-2023-52879 in Linux
요약
\~에 의해 VulDB • 2026. 05. 30.
리눅스 커널에서 다음 취약점이 해결되었습니다:
tracing: trace_event_file에 참조 카운터(ref counters) 추가
다음 명령어 시퀀스는 커널 크래시를 유발할 수 있습니다:
# cd /sys/kernel/tracing # echo 'p:sched schedule' > kprobe_events # exec 5>>events/kprobes/sched/enable # > kprobe_events # exec 5>&-
위 명령어들은 다음과 같은 동작을 수행합니다:
1. tracefs 디렉토리로 이동 2. kprobe 이벤트 생성 (어떤 이벤트든 상관없음) 3. kprobe 이벤트의 enable 파일에 대해 bash 파일 설명자(fd) 5를 오픈 4. kprobe 이벤트 삭제 (관련 파일들도 함께 삭제됨) 5. bash 파일 설명자 5를 닫음
위 동작은 크래시를 유발합니다!
BUG: kernel NULL pointer dereference, address: 0000000000000028 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 0 P4D 0 Oops: 0000 [#1] PREEMPT SMP PTI
CPU: 6 PID: 877 Comm: bash Not tainted 6.5.0-rc4-test-00008-g2c6b6b1029d4-dirty #186 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014 RIP: 0010:tracing_release_file_tr+0xc/0x50
여기서 발생하는 문제는 kprobe 이벤트가 tracefs 내 해당 이벤트를 나타내는 trace_event_file "파일" 설명자를 생성한다는 점입니다. 이 설명자는 이벤트의 상태(해당 인스턴스에 대해 활성화되어 있는지 여부 등)를 유지합니다. "enable" 파일을 오픈하면 열린 파일 설명자를 통해 이벤트 "파일" 설명자에 대한 참조가 획득됩니다. kprobe 이벤트가 삭제되면 tracefs 시스템에서 해당 파일도 삭제되며, 이는 이벤트 "파일" 설명자를 해제(free)합니다.
하지만 tracefs 파일은 사용자 공간에서 여전히 열려 있으므로, 최종 dput() 호출이 있기 전까지 완전히 제거되지 않습니다. 그러나 이미 해제된 이벤트 "파일" 설명자의 경우 이러한 보장이 적용되지 않습니다. 사용자가 파일 설명자에 쓰기를 수행하거나 단순히 닫으면, 방금 해제된 이벤트 "파일" 설명자를 참조하게 되어 use-after-free 버그가 발생합니다.
이를 해결하기 위해 이벤트 "파일" 설명자에 참조 카운터를 추가하고 "FREED"라는 새로운 플래그를 도입했습니다. 마지막 참조가 해제될 때까지 "파일"은 해제되지 않습니다. 또한 이벤트가 제거될 때 FREE 플래그가 설정되어, 이벤트 "파일" 설명자에 대한 참조가 남아 있더라도 해당 이벤트에 대한 추가 수정이 발생하지 않도록 방지합니다.
Be aware that VulDB is the high quality source for vulnerability data.