🔍 CVE-2025-39881

7.8
CVSS Score
HIGH
2025-09-23
2026-10-19 21:10
✅ 완료

🇰🇷 한글 설명

리눅스 커널의 PSI(Pressure Stall Information) 모니터링 메커니즘에서 사용 후 해제(Use-After-Free) 취약점이 발견되었습니다. cgroup 압력 모니터링을 비활성화하여 파일이 해제된 상태에서 epoll을 통해 다시 접근할 때 발생하며, 이는 시스템 불안정성이나 권한 상승으로 이어질 수 있습니다.

💡 쉬운 설명

컴퓨터가 사용 중인 파일을 이미 삭제하거나 닫았는데, 프로그램이 실수로 그 파일을 다시 사용하려고 시도할 때 발생하는 오류입니다. 이 과정에서 시스템이 충돌하거나 해커가 시스템 제어권을 얻을 위험이 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: kernfs: Fix UAF in polling when open file is released A use-after-free (UAF) vulnerability was identified in the PSI (Pressure Stall Information) monitoring mechanism: BUG: KASAN: slab-use-after-free in psi_trigger_poll+0x3c/0x140 Read of size 8 at addr ffff3de3d50bd308 by task systemd/1 psi_trigger_poll+0x3c/0x140 cgroup_pressure_poll+0x70/0xa0 cgroup_file_poll+0x8c/0x100 kernfs_fop_poll+0x11c/0x1c0 ep_item_poll.isra.0+0x188/0x2c0 Allocated by task 1: cgroup_file_open+0x88/0x388 kernfs_fop_open+0x73c/0xaf0 do_dentry_open+0x5fc/0x1200 vfs_open+0xa0/0x3f0 do_open+0x7e8/0xd08 path_openat+0x2fc/0x6b0 do_filp_open+0x174/0x368 Freed by task 8462: cgroup_file_release+0x130/0x1f8 kernfs_drain_open_files+0x17c/0x440 kernfs_drain+0x2dc/0x360 kernfs_show+0x1b8/0x288 cgroup_file_show+0x150/0x268 cgroup_pressure_write+0x1dc/0x340 cgroup_file_write+0x274/0x548 Reproduction Steps: 1. Open test/cpu.pressure and establish epoll monitoring 2. Disable monitoring: echo 0 > test/cgroup.pressure 3. Re-enable monitoring: echo 1 > test/cgroup.pressure The race condition occurs because: 1. When cgroup.pressure is disabled (echo 0 > cgroup.pressure), it: - Releases PSI triggers via cgroup_file_release() - Frees of->priv through kernfs_drain_open_files() 2. While epoll still holds reference to the file and continues polling 3. Re-enabling (echo 1 > cgroup.pressure) accesses freed of->priv epolling disable/enable cgroup.pressure fd=open(cpu.pressure) while(1) ... epoll_wait kernfs_fop_poll kernfs_get_active = true echo 0 > cgroup.pressure ... cgroup_file_show kernfs_show // inactive kn kernfs_drain_open_files cft->release(of); kfree(ctx); ... kernfs_get_active = false echo 1 > cgroup.pressure kernfs_show kernfs_activate_one(kn); kernfs_fop_poll kernfs_get_active = true cgroup_file_poll psi_trigger_poll // UAF ... end: close(fd) To address this issue, introduce kernfs_get_active_of() for kernfs open files to obtain active references. This function will fail if the open file has been released. Replace kernfs_get_active() with kernfs_get_active_of() to prevent further operations on released file descriptors.

📍 영향받는 시스템

Linux Kernel (PSI 및 kernfs 관련 모듈을 사용하는 버전)

⚔️ 공격 벡터

특정 순서로 cgroup 압력 모니터링을 켜고 끄는 레이스 컨디션(Race Condition) 유도

🛡️ 대응 방법

커널 패치를 통해 kernfs_get_active_of() 함수를 도입하여 해제된 파일에 대한 접근을 차단해야 함

🔧 검증 코드

현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 최신 보안 패치 버전인지 확인합니다.

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