
VirtualBox 7.2.20 - 치명적 - 로컬 - 타입 혼동 / 임의 읽기·쓰기 - SAS1068 CONFIG SCSI-SPI 오버레이
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vbox-lsilogic-sas-config
분류: 타입 혼동 / 임의 읽기·쓰기 도달 범위: 로컬 (게스트)
Oracle VM VirtualBox OSS 7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
SAS1068 MPT CONFIG는 SCSI-SPI 포트 0을 12바이트 페이지로 취급합니다. SAS에서는 해당 페이지가 유니언의 다른 절반입니다: pManufacturingPage7과 cbManufacturingPage7. 게스트의 CONFIG READ는 힙 포인터를 DMA로 유출합니다. CONFIG WRITE는 포인터와 크기를 심어둡니다. 그런 다음 제조 페이지 7이 심어진 포인터를 통해 복사합니다.
연결된 SAS1068(PDM LsiLogicSas, PCI 1000:0054)에서 게스트 ring3는 VM 프로세스 내 임의 읽기/쓰기를 얻습니다. 이는 VirtualBoxVM / VBoxHeadless 힙이며, 호스트 커널 탈출은 아닙니다.
| ID | 아직 CVE 없음 |
| 분류 | 타입 혼동 / 임의 읽기·쓰기 |
| 도달 범위 | 로컬 (게스트) |
| CWE | CWE-843, CWE-822 |
| CVSS | 치명적: 8.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| 제품 | VirtualBox OSS |
| 영향 받는 버전 | 7.2.20 (f2792cf44) |
| 필요 조건 | 연결된 SAS1068 (PDM LsiLogicSas, PCI 1000:0054) |
| 라이선스 | GNU Affero GPL v3.0 |
| 실험 환경 | 루프백 소스 하네스 |
방법: 게스트 ring3는 MPT_MESSAGE_HDR_FUNCTION_CONFIG(0x04), 페이지 타입 SCSI-SPI 포트 0(0x03)으로 SAS1068 MMIO 도어벨 또는 요청 FIFO를 프로그래밍합니다. 디스패치는 항상 SPI getter를 호출합니다. EXTENDED만 SAS로 제한됩니다. 페이지 속성 getter는 주석 처리되어 있어, Readonly 포트 0 페이지도 여전히 쓰기가 가능합니다. SPI 포트 0은 12바이트로 패킹되어 SasPages.pManufacturingPage7(8)과 cbManufacturingPage7(4)을 덮어씁니다.
| 권한 | 종류 | 상태 | 부여하는 것 |
|---|---|---|---|
| CONFIG SCSI-SPI 포트 0 READ | 정보 수집 | 실험실 입증 | VM 프로세스 힙 포인터 pManufacturingPage7과 그 크기를 게스트 RAM으로 DMA. ASLR 입력. |
| CONFIG SCSI-SPI 포트 0 WRITE | 무결성 | 실험실 입증 | 게스트가 선택한 포인터 + 크기를 해당 SAS 필드 위에 심음 |
| 제조 페이지 7 CONFIG READ | 무결성 | 실험실 입증 | 심어진 주소의 호스트 바이트를 게스트 GPA로 복사 (VBOX-LSILOGIC-SAS-CONFIG-WITNESS) |
| 제조 페이지 7 CONFIG WRITE | 무결성 | 동일 getter에서 추론 | 게스트 바이트를 심어진 주소로 복사 (VirtualBoxVM 내 임의 쓰기) |
| 포트 1 / 디바이스 0 SPI 페이지 | 정보 수집 / 무결성 | 추론된 오버레이 | 포트 1은 pSASIOUnitPage0을 유출/심음; 디바이스 0 페이지 0은 paPHYs에 도달; 디바이스 0 페이지 1은 pSASDeviceHead에 도달 |
| 임의로 심어진 포인터 | 가용성 | 추론 | 다음 SAS 페이지 접근 시 또는 lsilogicR3ConfigurationPagesFree에서 VM 프로세스 충돌 |
인접 영역 중 배제된 것:
SpiPages가 실제 레이아웃이며, 이 타입 혼동에는 SAS1068이 필요)VERR_NOT_FOUND)이는 VM 프로세스 임의 읽기·쓰기이며, 호스트 커널 탈출이 아닙니다. 완전한 호스트 사용자 권한에는 여전히 하드닝 잔여 취약점이 필요합니다. 남아 있는 3D 쓰기와 결합하지 않았습니다: VMSVGA DX11 UAF(d691aa68)는 이 핀에서 닫혀 있습니다.
Guest Additions 없음. 3D 없음. VRDP 없음. PUEL 아님. 적대적 게스트 ring3만으로 충분하며, 내장 mpt/mptsas 드라이버는 필요하지 않습니다.
Sep 2026 CPU 이후 OSS 7.2.20에 머물면서 LsiLogic MPT CONFIG를 살펴보았다. 2026년의 조용한 reply-stack 누수는 이미 닫혀 있다: 122c6880은 SCSI I/O 오류 시 MptReplyUnion을 RT_ZERO 처리한다. 나는 그 sink가 아니라 그 부류의 잔재를 찾고 있었다.
그 잔재는 stack reply가 아니라 union이다:
union {
MptConfigurationPagesSpi SpiPages;
MptConfigurationPagesSas SasPages;
} u; /* DevLsiLogicSCSI.h:3323 */
SAS alloc은 SasPages 호스트 포인터를 채우고 SPI 페이지 초기화를 절대 실행하지 않습니다. DevLsiLogicSCSI.cpp:2795의 SPI Port getter에는 enmCtrlType 검사가 없습니다. CONFIG 디스패치 SPI 케이스는 게이트되지 않습니다. 페이지 속성 getter는 cpp:3159에서 주석 처리되어 있습니다. cpp:2701의 Manufacturing page 7은 SAS로 게이트되어 있으며, 이는 의도된 경로이고 pManufacturingPage7을 NULL 검사 없이 역참조합니다. 이것이 SPI 타입의 Port 0 READ/WRITE가 SAS 포인터 유출 및 plant가 되는 방식입니다.
이미 기록된 잘못된 방향: 122c6880 재제출; 기본 LSI53C1030을 이 버그로 취급; 와일드 포인터 크래시를 호스트 커널 탈출로 과장; 패킹된 오버레이로 충분한데 라이브 VM을 사용. 극적 요소: 리버스 셸. 오라클은 CONTROL 더미 페이지 데이터이며, 그다음 VBOX-LSILOGIC-SAS-CONFIG-WITNESS의 유출/plant/임의 읽기입니다.
cd lab
./run.sh
또는 python3 vbox-lsilogic-sas-config-Abraxas-Labs.py. pin 구조체의 소스 하네스. VirtualBox는 부팅되지 않음. Compose 프로젝트 vbox-lsilogic-sas-config, network_mode: none. 아무것도 바인드하지 않음.
CONTROL: SPI 타입의 Port 0 오버레이 읽기는 더미 페이지 데이터이며, 제조 페이지 7 힙 포인터가 아님.
SAS 혼동: Port 0 READ는 calloc과 일치하는 pManufacturingPage7을 유출함. Port 0 WRITE는 두 번째 witness 버퍼 포인터+크기를 심음. 제조 페이지 7 getter와 CONFIG READ가 witness를 게스트 GPA 배열로 복사함.
SUCCESS vbox-lsilogic-sas-config leak=yes plant=yes arb-read=yes VBOX-LSILOGIC-SAS-CONFIG-WITNESS
SCSI-SPI 페이지 유형을 enmCtrlType == LSILOGICCTRLTYPE_SCSI_SPI 조건으로 제한합니다. 페이지 속성 검사를 복원하여 Readonly Port 0이 읽기 전용으로 유지되도록 합니다. 역참조 전에 pManufacturingPage7(및 기타 SAS 포인터)에 대한 NULL 검사를 수행합니다. 하나의 union에서 SpiPages와 SasPages를 겹쳐 놓는 것을 중단합니다.
f2792cf44f663989818507e36d3db5f978523c5e)DevLsiLogicSCSI.h 3323행의 union; 2251행의 SPI Port 0 크기 12DevLsiLogicSCSI.cpp 619행의 SAS 할당; 2701행의 manufacturing getter; 2795행의 SPI Port getter; 3159행의 주석 처리된 페이지 속성; 3293행의 CONFIG READ/WRITE122c6880 (MptReplyUnion SCSI I/O 오류 스택)