
VirtualBox 7.2.20 - Critico - Locale - Type confusion / arb R/W - SAS1068 CONFIG SCSI-SPI overlay
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vbox-lsilogic-sas-config
Classe: Type confusion / arb R/W Raggiungibilità: Locale (guest)
Oracle VM VirtualBox OSS 7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
SAS1068 MPT CONFIG tratta la SCSI-SPI Port 0 come una pagina da 12 byte. Su SAS quella pagina è l'altra metà di una union: pManufacturingPage7 più cbManufacturingPage7. Un CONFIG READ del guest effettua un DMA-leak del puntatore heap. Un CONFIG WRITE inserisce puntatore e dimensione. La manufacturing page 7 copia poi attraverso il puntatore inserito.
Il ring3 del guest su un SAS1068 collegato (PDM LsiLogicSas, PCI 1000:0054) ottiene lettura/scrittura arbitraria nel processo della VM. Si tratta dell'heap di VirtualBoxVM / VBoxHeadless, non di un'evasione dal kernel host.
| ID | nessuna CVE al momento |
| Classe | Type confusion / arb R/W |
| Raggiungibilità | Locale (guest) |
| CWE | CWE-843, CWE-822 |
| CVSS | Critico: 8.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| Prodotto | VirtualBox OSS |
| Affetto | 7.2.20 (f2792cf44) |
| Richiede | SAS1068 collegato (PDM LsiLogicSas, PCI 1000:0054) |
| Licenza | GNU Affero GPL v3.0 |
| Lab | harness sorgente in loopback |
Metodo: il ring3 del guest programma il doorbell MMIO o la request FIFO del SAS1068 con MPT_MESSAGE_HDR_FUNCTION_CONFIG (0x04), page type SCSI-SPI Port 0 (0x03). Il dispatch chiama sempre il getter SPI. Solo EXTENDED è vincolato a SAS. Il getter degli attributi di pagina è commentato, quindi la pagina Readonly Port 0 è comunque scrivibile. SPI Port 0 è impacchettata in 12 byte e si sovrappone a SasPages.pManufacturingPage7 (8) più cbManufacturingPage7 (4).
| Privilegio | Tipo | Stato | Cosa concede |
|---|---|---|---|
| CONFIG SCSI-SPI Port 0 READ | ricognizione | dimostrato in lab | DMA del puntatore heap del processo VM pManufacturingPage7 e della sua dimensione nella RAM del guest. Input per ASLR. |
| CONFIG SCSI-SPI Port 0 WRITE | integrità | dimostrato in lab | inserisce puntatore e dimensione scelti dal guest sopra quei campi SAS |
| manufacturing page 7 CONFIG READ | integrità | dimostrato in lab | copia byte host dall'indirizzo inserito nella GPA del guest (VBOX-LSILOGIC-SAS-CONFIG-WITNESS) |
| manufacturing page 7 CONFIG WRITE | integrità | dedotto dallo stesso getter | copia byte del guest all'indirizzo inserito (scrittura arbitraria in VirtualBoxVM) |
| pagine SPI Port 1 / Device 0 | ricognizione / integrità | sovrapposizione dedotta | Port 1 fa leak/inserisce pSASIOUnitPage0; Device 0 page 0 colpisce paPHYs; Device 0 page 1 colpisce pSASDeviceHead |
| puntatore inserito arbitrario | disponibilità | dedotto | manda in crash il processo VM al successivo accesso a una pagina SAS o su lsilogicR3ConfigurationPagesFree |
Escluso adiacente:
SpiPages è il layout reale; questa type confusion richiede SAS1068)VERR_NOT_FOUND)Questa è scrittura/lettura arbitraria nel processo VM, non evasione dal kernel host. Per ottenere l'utente host completo serve comunque un residuo di hardening. Non l'ho abbinata a una scrittura 3D rimanente: la UAF VMSVGA DX11 (d691aa68) è chiusa su questo pin.
Nessuna Guest Additions. Nessun 3D. Nessun VRDP. Non PUEL. Basta un ring3 ostile nel guest; il driver mpt/mptsas in-box non è necessario.
Mi sono basato su OSS 7.2.20 dopo la CPU di settembre 2026 e ho analizzato LsiLogic MPT CONFIG. La perdita silenziosa del reply-stack del 2026 è già chiusa: 122c6880 esegue RT_ZERO su MptReplyUnion in caso di errore I/O SCSI. Stavo cercando un residuo di quella classe, non quel sink.
Il residuo è una union, non una reply sullo stack:
union {
MptConfigurationPagesSpi SpiPages;
MptConfigurationPagesSas SasPages;
} u; /* DevLsiLogicSCSI.h:3323 */
SAS alloc riempie i puntatori host di SasPages e non esegue mai l'inizializzazione della pagina SPI. Il getter della porta SPI in DevLsiLogicSCSI.cpp:2795 non ha alcun controllo su enmCtrlType. I casi SPI del dispatch CONFIG non sono vincolati. Il getter degli attributi di pagina è commentato in cpp:3159. La pagina Manufacturing 7 in cpp:2701 è vincolata a SAS, che è il percorso previsto, e dereferenzia pManufacturingPage7 senza controllo NULL. È così che un READ/WRITE di Port 0 di tipo SPI diventa una fuga e un impianto di puntatori SAS.
Vicoli ciechi già registrati: rifilare 122c6880; trattare l'LSI53C1030 predefinito come questo bug; gonfiare un crash da puntatore selvaggio fino a un'evasione dal kernel host; una VM live quando l'overlay impacchettato è sufficiente. Teatro: una reverse shell. L'oracolo sono i dati della pagina fittizia CONTROL, poi leak/plant/arb-read di VBOX-LSILOGIC-SAS-CONFIG-WITNESS.
cd lab
./run.sh
Oppure python3 vbox-lsilogic-sas-config-Abraxas-Labs.py. Harness sorgente delle strutture pin. VirtualBox non è avviato. Progetto Compose vbox-lsilogic-sas-config, network_mode: none. Nessun bind.
CONTROL: la lettura overlay di Port 0 di tipo SPI è costituita da dati di pagina fittizi, non dal puntatore heap della manufacturing-page-7.
SAS confuso: la READ di Port 0 rivela pManufacturingPage7 corrispondente a calloc. La WRITE di Port 0 inserisce un secondo buffer testimone puntatore+dimensione. Il getter della manufacturing page 7 insieme alla READ di CONFIG copia il testimone nell'array GPA del guest.
SUCCESS vbox-lsilogic-sas-config leak=yes plant=yes arb-read=yes VBOX-LSILOGIC-SAS-CONFIG-WITNESS
Filtra i tipi di pagina SCSI-SPI in base a enmCtrlType == LSILOGICCTRLTYPE_SCSI_SPI. Ripristina il controllo degli attributi di pagina in modo che Readonly Port 0 rimanga di sola lettura. Verifica NULL su pManufacturingPage7 (e sugli altri puntatori SAS) prima della dereferenziazione. Interrompi la sovrapposizione di SpiPages e SasPages in un'unica union.