
VirtualBox 7.2.20 – Kritisch – Lokal – Typverwechslung / arb R/W – SAS1068 CONFIG SCSI-SPI-Overlay
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vbox-lsilogic-sas-config
Klasse: Type Confusion / beliebiges Lesen/Schreiben Reichweite: Lokal (Gast)
Oracle VM VirtualBox OSS 7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
SAS1068 MPT CONFIG behandelt SCSI-SPI Port 0 als 12-Byte-Seite. Auf SAS ist diese Seite die andere Hälfte einer Union: pManufacturingPage7 plus cbManufacturingPage7. Ein Gast-CONFIG-READ gibt per DMA den Heap-Zeiger preis. Ein CONFIG-WRITE platziert Zeiger und Größe. Manufacturing Page 7 kopiert dann über den platzierten Zeiger.
Gast-Ring3 auf einem angeschlossenen SAS1068 (PDM LsiLogicSas, PCI 1000:0054) erhält beliebiges Lesen/Schreiben im VM-Prozess. Das ist der Heap von VirtualBoxVM / VBoxHeadless, kein Host-Kernel-Escape.
| ID | noch keine CVE |
| Klasse | Type Confusion / beliebiges Lesen/Schreiben |
| Reichweite | Lokal (Gast) |
| CWE | CWE-843, CWE-822 |
| CVSS | Kritisch: 8.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| Produkt | VirtualBox OSS |
| Betroffen | 7.2.20 (f2792cf44) |
| Benötigt | angeschlossenen SAS1068 (PDM LsiLogicSas, PCI 1000:0054) |
| Lizenz | GNU Affero GPL v3.0 |
| Labor | Loopback-Source-Harness |
Methode: Gast-Ring3 programmiert die SAS1068-MMIO-Doorbell oder die Request-FIFO mit MPT_MESSAGE_HDR_FUNCTION_CONFIG (0x04), Seitentyp SCSI-SPI Port 0 (0x03). Der Dispatch ruft immer den SPI-Getter auf. Nur EXTENDED ist SAS-gated. Der Getter für Seitenattribute ist auskommentiert, daher ist die Readonly-Port-0-Seite weiterhin beschreibbar. SPI Port 0 ist auf 12 Bytes gepackt und überlagert SasPages.pManufacturingPage7 (8) plus cbManufacturingPage7 (4).
| Berechtigung | Art | Status | Was sie gewährt |
|---|---|---|---|
| CONFIG SCSI-SPI Port 0 READ | Recon | im Labor nachgewiesen | DMA des Heap-Zeigers pManufacturingPage7 des VM-Prozesses und seiner Größe in den Gast-RAM. ASLR-Eingabe. |
| CONFIG SCSI-SPI Port 0 WRITE | Integrität | im Labor nachgewiesen | platziert gastgewählten Zeiger + Größe über diesen SAS-Feldern |
| Manufacturing Page 7 CONFIG READ | Integrität | im Labor nachgewiesen | kopiert Host-Bytes von der platzierten Adresse in die Gast-GPA (VBOX-LSILOGIC-SAS-CONFIG-WITNESS) |
| Manufacturing Page 7 CONFIG WRITE | Integrität | abgeleitet aus demselben Getter | kopiert Gast-Bytes an die platzierte Adresse (beliebiges Schreiben in VirtualBoxVM) |
| Port 1 / Device 0 SPI-Seiten | Recon / Integrität | abgeleitete Überlagerung | Port 1 gibt pSASIOUnitPage0 preis/platziert es; Device 0 Page 0 trifft paPHYs; Device 0 Page 1 trifft pSASDeviceHead |
| beliebiger platzierter Zeiger | Verfügbarkeit | abgeleitet | bringt den VM-Prozess beim nächsten SAS-Seitenzugriff oder bei lsilogicR3ConfigurationPagesFree zum Absturz |
Angrenzend ausgeschlossen:
SpiPages ist das echte Layout; diese Type Confusion benötigt SAS1068)VERR_NOT_FOUND)Dies ist beliebiges Lesen/Schreiben im VM-Prozess, kein Host-Kernel-Escape. Vollständiger Host-Benutzerzugriff erfordert noch ein Hardening-Überbleibsel. Ich habe es nicht mit einem verbleibenden 3D-Write kombiniert: VMSVGA DX11 UAF (d691aa68) ist auf diesem Pin geschlossen.
Keine Guest Additions. Kein 3D. Kein VRDP. Kein PUEL. Feindseliges Gast-Ring3 genügt; der mitgelieferte mpt/mptsas-Treiber ist nicht erforderlich.
Ich saß auf OSS 7.2.20 nach der CPU vom September 2026 und ging LsiLogic MPT CONFIG durch. Das stille Reply-Stack-Leck von 2026 ist bereits geschlossen: 122c6880 setzt MptReplyUnion bei SCSI-I/O-Fehlern auf RT_ZERO. Ich suchte nach einem Überbleibsel dieser Klasse, nicht nach dieser Senke.
Das Überbleibsel ist eine Union, keine Stack-Reply:
union {
MptConfigurationPagesSpi SpiPages;
MptConfigurationPagesSas SasPages;
} u; /* DevLsiLogicSCSI.h:3323 */
SAS alloc füllt SasPages-Host-Zeiger und führt niemals die SPI-Seiteninitialisierung aus. Der SPI-Port-Getter unter DevLsiLogicSCSI.cpp:2795 hat keine enmCtrlType-Prüfung. CONFIG-Dispatch-SPI-Fälle sind ungeschützt. Der Seitenattribut-Getter ist unter cpp:3159 auskommentiert. Die Manufacturing-Seite 7 unter cpp:2701 ist SAS-gated, was der beabsichtigte Pfad ist, und dereferenziert pManufacturingPage7 ohne NULL-Prüfung. So wird ein SPI-typisierter Port-0-READ/WRITE zu einem SAS-Zeiger-Leak und -Plant.
Bereits dokumentierte Fehlwege: erneutes Einreichen von 122c6880; das Standard-LSI53C1030 als diesen Bug behandeln; einen Wild-Pointer-Crash zu einem Host-Kernel-Escape aufblähen; eine laufende VM, wenn das gepackte Overlay ausreicht. Theater: eine Reverse Shell. Das Orakel sind CONTROL-Dummy-Seitendaten, dann Leak/Plant/Arb-Read von VBOX-LSILOGIC-SAS-CONFIG-WITNESS.
cd lab
./run.sh
Oder python3 vbox-lsilogic-sas-config-Abraxas-Labs.py. Source-Harness der Pin-Strukturen. VirtualBox wird nicht gebootet. Compose-Projekt vbox-lsilogic-sas-config, network_mode: none. Nichts binden.
CONTROL: SPI-typisierter Port-0-Overlay-Read sind Dummy-Seitendaten, nicht der Heap-Zeiger der Manufacturing-Page-7.
SAS verwirrt: Port-0-READ leakt pManufacturingPage7 passend zu calloc. Port-0-WRITE platziert einen zweiten Witness-Buffer-Zeiger+Größe. Manufacturing-Page-7-Getter plus CONFIG-READ kopiert den Witness in das Gast-GPA-Array.
SUCCESS vbox-lsilogic-sas-config leak=yes plant=yes arb-read=yes VBOX-LSILOGIC-SAS-CONFIG-WITNESS
SCSI-SPI-Seitentypen an enmCtrlType == LSILOGICCTRLTYPE_SCSI_SPI binden. Die Prüfung der Seitenattribute wiederherstellen, damit Readonly Port 0 schreibgeschützt bleibt. pManufacturingPage7 (und die anderen SAS-Zeiger) vor der Dereferenzierung auf NULL prüfen. Das Überlagern von SpiPages und SasPages in einer Union beenden.
f2792cf44f663989818507e36d3db5f978523c5e)DevLsiLogicSCSI.h Union bei 3323; SPI Port 0 Größe 12 bei 2251DevLsiLogicSCSI.cpp SAS-Allokation 619; Manufacturing-Getter 2701; SPI-Port-Getter 2795; Seitenattribut auskommentiert 3159; CONFIG READ/WRITE 3293122c6880 (MptReplyUnion SCSI-I/O-Fehler-Stack)