🔍 CVE-2023-54019

7.8
CVSS Score
HIGH
2025-12-24
2026-10-15 22:17
✅ 완료

🇰🇷 한글 설명

Linux 커널의 sched/psi 구성 요소에서 cgroup 제거 시 PSI 트리거의 생명주기 관리 문제로 인해 Use-After-Free(UAF) 취약점이 발생합니다. 폴링 프로세스가 실행 중인 상태에서 cgroup이 삭제되면, 이미 해제된 메모리 영역의 waitqueue head에 접근하게 되어 시스템 불안정이나 권한 상승을 초래할 수 있습니다.

💡 쉬운 설명

컴퓨터의 자원 관리 기능이 작동하는 도중에 해당 자원이 갑자기 삭제되어, 시스템이 이미 사라진 정보를 참조하려고 시도하다가 오류가 발생하는 문제입니다. 이로 인해 시스템이 멈추거나 해커가 시스템 제어권을 얻을 위험이 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: sched/psi: use kernfs polling functions for PSI trigger polling Destroying psi trigger in cgroup_file_release causes UAF issues when a cgroup is removed from under a polling process. This is happening because cgroup removal causes a call to cgroup_file_release while the actual file is still alive. Destroying the trigger at this point would also destroy its waitqueue head and if there is still a polling process on that file accessing the waitqueue, it will step on the freed pointer: do_select vfs_poll do_rmdir cgroup_rmdir kernfs_drain_open_files cgroup_file_release cgroup_pressure_release psi_trigger_destroy wake_up_pollfree(&t->event_wait) // vfs_poll is unblocked synchronize_rcu kfree(t) poll_freewait -> UAF access to the trigger's waitqueue head Patch [1] fixed this issue for epoll() case using wake_up_pollfree(), however the same issue exists for synchronous poll() case. The root cause of this issue is that the lifecycles of the psi trigger's waitqueue and of the file associated with the trigger are different. Fix this by using kernfs_generic_poll function when polling on cgroup-specific psi triggers. It internally uses kernfs_open_node->poll waitqueue head with its lifecycle tied to the file's lifecycle. This also renders the fix in [1] obsolete, so revert it. [1] commit c2dbe32d5db5 ("sched/psi: Fix use-after-free in ep_remove_wait_queue()")

📍 영향받는 시스템

Linux Kernel (PSI 기능이 활성화된 버전)

⚔️ 공격 벡터

특정 cgroup을 제거하여 폴링 중인 PSI 트리거의 메모리 해제를 유도하는 로컬 공격

🛡️ 대응 방법

Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 kernfs_generic_poll를 사용하도록 수정합니다.

🔧 검증 코드

출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인합니다.

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

Linux Kernel