Linux 커널에서는 다음 취약점이 해결되었습니다. KVM: SEV: GHCB v2+를 사용 중인 경우 GHCB 내 스크래치 영역이 필요합니다. GHCB 사양에 따라 GHCB v2+를 사용하는 경우 소프트웨어 스크래치 영역이 필요합니다. GHCB의 공유 버퍼에 상주합니다. 참고로 페이지 상태 변경과 같은 것 (PSC)는 게스트가 길이를 제공할 수 없기 때문에 이 동작에 _의존_합니다. 요청 시, 즉 게스트 페이로드의 크기는 다음과 같이 제한됩니다. 공유 버퍼의 크기. GHCB 사용을 강제하지 않은 경우,
Linux 커널에서는 다음 취약점이 해결되었습니다.
KVM: SEV: GHCB v2+를 사용 중인 경우 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바이트 슬랩 객체)의 24바이트 할당. 버퍼 8바이트 psc_hdr 뒤에 8바이트 psc_entry 구조체가 있으므로 항목[0]과 항목[1]은 인바운드입니다.
snp_begin_psc()는 VMGEXIT_PSC_MAX_COUNT(253)에 대해 end_entry의 유효성을 검사합니다. 그러나 실제 버퍼 크기에는 반대되지 않습니다.
idx_end = hdr->end_entry;
if (idx_end >= VMGEXIT_PSC_MAX_COUNT) { // 버퍼가 아닌 253을 확인합니다.
snp_complete_psc(svm, ...);
1을 반환합니다.
}
for (idx = idx_start; idx <= idx_end; idx++) {
Entry_start = 항목[idx]; // idx >= 2인 경우 OOB
게스트는 end_entry=10+를 설정하여 호스트가 항목[2+]을 반복하게 합니다. 인접한 슬래브 객체에 대한 OOB입니다. 각 OOB 항목에 대해 다음을 수행합니다.
게스트는 할당 크기(exit_info_2), 항목 범위를 제어합니다. (cur_entry/end_entry) 무제한 VMGEXIT를 반복적으로 실행할 수 있습니다. 다른 슬래브 위치를 쳤습니다.
다양한 버그를 악용하여 악의적인 SEV-SNP 게스트는 다음을 수행할 수 있습니다. - OOB는 인접한 kmalloc-cg-32 객체를 읽습니다(힙 레이아웃 공개). - OOB는 인접한 객체에 cur_page 비트를 씁니다(힙 손상). - VMGEXIT 전반에 걸쳐 use-after-free 조건을 트리거합니다.
예: KASAN이 활성화된 경우 PoC 게스트 모듈의 단일 insmod 73개의 KASAN 보고서를 생성합니다.
버그: KASAN: snp_begin_psc+0x126/0x890의 슬래브가 경계를 벗어났습니다.
qemu-system-x86/2199 작업으로 addr ffff888219ffb5e0에서 크기 8을 읽습니다.
버그: KASAN: snp_begin_psc+0x468/0x890의 슬래브가 경계를 벗어났습니다.
qemu-system-x86/2199 작업을 통해 addr ffff888351566648에 크기 8 쓰기
버기 주소는 ffff888XXXXXXXXX의 개체에 속합니다.
이는 크기 32의 캐시 kmalloc-cg-32에 속합니다.
버기 주소는 N 바이트 오른쪽에 위치합니다.
32바이트 영역 할당 [ffff888XXXXXXXXX, ffff888XXXXXXXXX)
분석: 62개의 슬랩 범위 밖(할당 이후 읽기 + 쓰기) 7 슬래브 사용 후 무료 4 사용 후 무료
훌륭한 설명과 재생산에 대해 Stan에게 모든 공로를 인정합니다!
[sean: 변경 로그 작성]
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 88.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 88.00 |
VPI 공식 vpi-v1 기준