🔍 CVE-2026-31787

7.8
CVSS Score
HIGH
2026-04-30
2026-11-06 16:18
✅ 완료

🇰🇷 한글 설명

Linux 커널의 Xen privcmd 드라이버에서 privcmd 매핑 VMA를 부분 munmap()으로 분할할 때 pages 배열이 두 VMA에 공유되어, 이후 해제 과정에서 이중 해제(double free)가 발생합니다. 수정은 VMA 분할을 거부하는 .may_split 콜백을 추가하는 것입니다.

💡 쉬운 설명

Xen 가상화 환경의 리눅스 커널에서 메모리 영역을 잘라내면 같은 메모리를 두 번 해제하는 문제가 생깁니다. 이로 인해 시스템이 불안정해지거나 권한 상승 등 악용될 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: xen/privcmd: fix double free via VMA splitting privcmd_vm_ops defines .close (privcmd_close), but neither .may_split nor .open. When userspace does a partial munmap() on a privcmd mapping, the kernel splits the VMA via __split_vma(). Since may_split is NULL, the split is allowed. vm_area_dup() copies vm_private_data (a pages array allocated in alloc_empty_pages()) into the new VMA without any fixup, because there is no .open callback. Both VMAs now point to the same pages array. When the unmapped portion is closed, privcmd_close() calls: - xen_unmap_domain_gfn_range() - xen_free_unpopulated_pages() - kvfree(pages) The surviving VMA still holds the dangling pointer. When it is later destroyed, the same sequence runs again, which leads to a double free. Fix this issue by adding a .may_split callback denying the VMA split. This is XSA-487 / CVE-2026-31787

📍 영향받는 시스템

Xen 기능을 사용하는 Linux 커널 (수정이 적용된 패치 이전 버전, Xen privcmd 드라이버 포함 배포판)

⚔️ 공격 벡터

로컬 사용자가 privcmd 디바이스로 매핑한 메모리에 대해 부분 munmap()을 호출하여 VMA 분할을 유도함으로써 이중 해제를 일으킵니다.

🛡️ 대응 방법

배포판 벤더가 제공하는 XSA-487 관련 커널 보안 업데이트를 적용하고 재부팅합니다.

🔧 검증 코드

출력된 커널 버전을 배포판 보안 공지에서 XSA-487(CVE-2026-31787) 수정이 포함된 빌드와 비교하고, 수정 이전 버전이면 업데이트가 필요합니다.

Shell / Script
uname -r && (dpkg -l 'linux-image*' 2>/dev/null | grep '^ii' | head -5 || rpm -qa 'kernel*' 2>/dev/null | head -5)

📊 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