CVE-2026-53360
KVM: SEV: GHCB v2+ 사용 시 in-GHCB 스크래치 영역 필요
- 게시됨
- 2026. 7. 4.
- 업데이트됨
- 2026. 8. 5.
- CNA 할당 중
- Linux
- 증거 관찰됨
- 2026. 8. 8.
기본 CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H낮음 · 다음 30일
- 백분위수
- 15.8%
- 모델 날짜
- 2026. 9. 21.
EPSS는 통계적 추정치이지 확실성이나 영향의 척도가 아닙니다. 이를 CVSS, KEV 상태, 노출 및 환경과 결합하세요.
요약
Linux 커널에서 다음 취약점이 해결되었습니다: KVM: SEV: GHCB v2+ 사용 시 in-GHCB 스크래치 영역 요구 GHCB 사양에 따라, GHCB v2+를 사용할 때 소프트웨어 스크래치 영역이 GHCB의 공유 버퍼에 위치해야 한다. 참고로, 페이지 상태 변경(PSC) 요청 같은 것들은 이 동작에 _의존한다_. 게스트는 요청 시 길이를 제공할 수 없으며, 즉 게스트 페이로드의 크기는 공유 버퍼의 크기로 제한된다. GHCB 사용을 강제하지 못하면, 여러 다른 결함들과 함께, 악의적인 SNP 게스트가 호스트 커널 힙 메모리를 손상시키고 호스트 힙 레이아웃 정보를 유출할 수 있다. setup_vmgexit_scratch()는 kvzalloc(exit_info_2)를 통해 버퍼를 할당하는데, exit_info_2는 게스트가 제어한다. exit_info_2=24인 경우, kmalloc-cg-32(32바이트 slab 객체)에 24바이트 할당이 발생한다. 이 버퍼는 8바이트 psc_hdr와 그 뒤를 따르는 8바이트 psc_entry 구조체들로 구성되므로 entries[0]과 entries[1]만 경계 내에 있다. snp_begin_psc()는 end_entry를 VMGEXIT_PSC_MAX_COUNT(253)와 비교하여 검증하지만, 실제 버퍼 크기에 대해서는 검증하지 않는다: idx_end = hdr->end_entry; if (idx_end >= VMGEXIT_PSC_MAX_COUNT) { // checks 253, not buffer snp_complete_psc(svm, ...); return 1; } for (idx = idx_start; idx <= idx_end; idx++) { entry_start = entries[idx]; // OOB when idx >= 2 게스트가 end_entry=10+을 설정하면 호스트는 entries[2+]를 반복하게 되며, 이는 인접한 slab 객체로의 OOB(경계를 벗어난 접근)가 된다. 각 OOB 항목에 대해: - 호스트는 8바이트를 읽는다 (OOB READ / 정보 유출 오라클) - 데이터가 PSC 검증을 통과하면, __snp_complete_one_psc()가 항목에 cur_page = 1 또는 512를 쓴다 (OOB WRITE, sev.c:3806) - 검증이 실패하면, 오류 응답을 통해 인접 메모리가 0인지 아닌지가 게스트에게 드러난다 (정보 공개) 게스트는 할당 크기(exit_info_2)와 항목 범위(cur_entry/end_entry)를 제어하며, 무제한의 VMGEXIT를 발생시켜 서로 다른 slab 위치를 반복적으로 공격할 수 있다. 이 다양한 결함들을 악용하면, 악의적인 SEV-SNP 게스트는 다음을 할 수 있다: - 인접한 kmalloc-cg-32 객체를 OOB 읽기 (힙 레이아웃 노출) - 인접한 객체에 cur_page 비트를 OOB 쓰기 (힙 손상) - VMGEXIT를 걸쳐 use-after-free 조건 유발 예를 들어, KASAN을 활성화한 상태에서 PoC 게스트 모듈을 한 번 insmod하면 73개의 KASAN 리포트가 생성된다: BUG: KASAN: slab-out-of-bounds in snp_begin_psc+0x126/0x890 Read of size 8 at addr ffff888219ffb5e0 by task qemu-system-x86/2199 BUG: KASAN: slab-out-of-bounds in snp_begin_psc+0x468/0x890 Write of size 8 at addr ffff888351566648 by task qemu-system-x86/2199 The buggy address belongs to the object at ffff888XXXXXXXXX which belongs to the cache kmalloc-cg-32 of size 32 The buggy address is located N bytes to the right of allocated 32-byte region [ffff888XXXXXXXXX, ffff888XXXXXXXXX) 세부 내역: 62 slab-out-of-bounds (할당 범위를 벗어난 읽기 + 쓰기) 7 slab-use-after-free 4 use-after-free 훌륭한 설명과 재현 코드를 제공한 Stan에게 모든 공을 돌립니다! [sean: 변경 로그 작성]
소스
1책임 있는 사용
귀하가 소유하고 있거나 테스트할 권한이 있는 시스템에 대해서만 취약점 정보를 사용하십시오. Kitploit은 공개 연구 메타데이터에 연결되며 익스플로잇 코드나 악성 페이로드를 저장하지 않습니다.