🇰🇷 한글 설명
Linux 커널의 posix-cpu-timers에서 발생하는 레이스 컨디션 취약점으로, 타이머 삭제 과정에서 만료 리스트에 남아있는 타이머를 잘못 해제하여 Use-After-Free(UAF)가 발생할 수 있습니다. 기존의 firing 상태 플래그가 타이머의 소유권 상태를 정확히 구분하지 못해 발생하는 문제입니다.
💡 쉬운 설명
컴퓨터가 타이머를 삭제하는 도중에 타이머가 작동하려고 시도하면서, 이미 삭제된 메모리 영역을 다시 사용하게 되어 시스템 오류나 보안 문제가 생길 수 있는 결함입니다. 타이머가 리스트에 남아있는지 확인하는 절차가 부족하여 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
posix-cpu-timers: Prevent freeing a timer which is queued on the expiry list
Kijo analyzed another race in the POSIX CPU timer code:
Commit bf635681c906 converted cpu_timer::firing from a tristate value to a
boolean. This lost the distinction between "not owned by the firing list"
and "still owned, but delivery was canceled". The resulting race is:
expiry handler timer_settime() timer_delete()
-------------- --------------- --------------
collect timer onto
private firing list
firing = true
observes firing = true
firing = false
return TIMER_RETRY
wait for handler
observes firing = false
finish deletion
unhash and free timer
resume list traversal
read freed elist.next
-> UAF
The firing bit is clearly the wrong indicator since that commit.
Check whether the timer is queued on the expiry list or not instead. If it
is queued clear the firing bit to prevent signal delivery as before and
return TIMER_RETRY so the caller unlocks the timer which allows the expiry
code to make progress and remove it from the list.
📍 영향받는 시스템
Linux kernel (posix-cpu-timers 관련 모듈을 사용하는 모든 버전)
⚔️ 공격 벡터
특정 타이머 설정(timer_settime)과 삭제(timer_delete)를 동시에 수행하는 정밀한 레이스 컨디션 공격
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 타이머 만료 리스트 확인 로직을 적용해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인합니다.
📊 CVSS Vector String
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
💻 영향받는 소프트웨어
NVIDIA Cloud Gaming Guest Driver for Linux