🔍 CVE-2025-38554

7.8
CVSS Score
HIGH
2025-08-19
2026-07-30 06:23
✅ 완료

🇰🇷 한글 설명

리눅스 커널의 메모리 관리(mm) 서브시스템에서 VMA(가상 메모리 영역) 재사용 시 발생하는 Use-After-Free(UAF) 취약점입니다. SLAB_TYPESAFE_BY_RCU를 통해 VMA가 재활용되는 과정에서 race condition이 발생하여, 이미 해제된 mm 구조체에 접근함으로써 시스템 불안정성이나 권한 상승을 초래할 수 있습니다.

💡 쉬운 설명

컴퓨터가 메모리를 정리하는 과정에서 이미 사용이 끝난 메모리 주소를 실수로 다시 사용하려고 시도할 때 발생하는 오류입니다. 이로 인해 시스템이 갑자기 멈추거나 해커가 시스템 제어권을 뺏을 위험이 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: mm: fix a UAF when vma->mm is freed after vma->vm_refcnt got dropped By inducing delays in the right places, Jann Horn created a reproducer for a hard to hit UAF issue that became possible after VMAs were allowed to be recycled by adding SLAB_TYPESAFE_BY_RCU to their cache. Race description is borrowed from Jann's discovery report: lock_vma_under_rcu() looks up a VMA locklessly with mas_walk() under rcu_read_lock(). At that point, the VMA may be concurrently freed, and it can be recycled by another process. vma_start_read() then increments the vma->vm_refcnt (if it is in an acceptable range), and if this succeeds, vma_start_read() can return a recycled VMA. In this scenario where the VMA has been recycled, lock_vma_under_rcu() will then detect the mismatching ->vm_mm pointer and drop the VMA through vma_end_read(), which calls vma_refcount_put(). vma_refcount_put() drops the refcount and then calls rcuwait_wake_up() using a copy of vma->vm_mm. This is wrong: It implicitly assumes that the caller is keeping the VMA's mm alive, but in this scenario the caller has no relation to the VMA's mm, so the rcuwait_wake_up() can cause UAF. The diagram depicting the race: T1 T2 T3 == == == lock_vma_under_rcu mas_walk <VMA gets removed from mm> mmap <the same VMA is reallocated> vma_start_read __refcount_inc_not_zero_limited_acquire munmap __vma_enter_locked refcount_add_not_zero vma_end_read vma_refcount_put __refcount_dec_and_test rcuwait_wait_event <finish operation> rcuwait_wake_up [UAF] Note that rcuwait_wait_event() in T3 does not block because refcount was already dropped by T1. At this point T3 can exit and free the mm causing UAF in T1. To avoid this we move vma->vm_mm verification into vma_start_read() and grab vma->vm_mm to stabilize it before vma_refcount_put() operation. [[email protected]: v3]

📍 영향받는 시스템

SLAB_TYPESAFE_BY_RCU가 적용된 VMA 재활용 기능을 사용하는 리눅스 커널 버전

⚔️ 공격 벡터

특정 타이밍에 메모리 할당과 해제를 반복하는 정밀한 레이스 컨디션(Race Condition) 유도

🛡️ 대응 방법

리눅스 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 vma->vm_mm 검증 로직을 수정해야 함

🔧 검증 코드

출력된 커널 버전이 해당 취약점이 패치된 최신 릴리스 버전인지 확인하십시오.

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