🇰🇷 한글 설명
Linux 커널의 tracing/user_events 구성 요소에서 발생하는 Use-After-Free(UAF) 취약점입니다. 프로세스 복제(fork) 시 부모의 tracing 상태를 복사하는 과정에서 참조 카운트 관리가 제대로 이루어지지 않아, 자식 프로세스 종료 시 메모리가 해제된 후에도 부모 프로세스가 잘못된 포인터를 참조하게 됩니다.
💡 쉬운 설명
컴퓨터가 새로운 작업을 만들 때 기존 작업의 정보를 복사하는데, 이 과정에서 메모리 관리 실수로 이미 삭제된 정보를 다시 사용하려고 시도하는 문제입니다. 이로 인해 시스템이 충돌하거나 보안 문제가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
tracing/user_events: Clear copied tracing state before fork duplication
dup_task_struct() copies user_event_mm from the parent into the child,
without grabbing a reference to it. user_event_mm_dup() should
replace it, but it leaves that copied pointer unmodified if
user_event_mm_alloc() fails.
When the child exits, user_event_mm_remove() decrements a reference
the child never owned, which ultimately frees user_event_mm, while
the parent still as a stale pointer to it. This creates a UAF, which
KASAN reports as:
BUG: KASAN: slab-use-after-free in
current_user_event_mm+0x51/0x1d0 Write of size 4 at addr
ffff888005010d30 by task init/44
Call Trace:
<TASK>
kasan_report+0xce/0x100
kasan_check_range+0x10f/0x1e0
current_user_event_mm+0x51/0x1d0
user_events_ioctl+0x82e/0x15c0
__x64_sys_ioctl+0x139/0x1c0
do_syscall_64+0xce/0x450
entry_SYSCALL_64_after_hwframe+0x77/0x7f
Allocated by task 44:
__kasan_kmalloc+0x8f/0xa0
__kmalloc_cache_noprof+0x180/0x3a0
user_event_mm_alloc+0x3c/0x1f0
current_user_event_mm+0x88/0x1d0
Freed by task 42:
__kasan_slab_free+0x43/0x70
kfree+0x13a/0x390
process_one_work+0x696/0xf90
worker_thread+0x420/0xba0
The fix simply clears the copied pointer before any possible failure.
In case of failure, the child then has nothing to free.
📍 영향받는 시스템
Linux Kernel (tracing/user_events 모듈을 사용하는 버전)
⚔️ 공격 벡터
로컬 사용자가 악의적으로 fork를 반복하여 메모리 오류를 유도함으로써 커널 메모리 오염 또는 권한 상승 시도 가능
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 dup_task_struct() 내 포인터 초기화 로직을 적용해야 함
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.