
VirtualBox 7.2.20 - Crítico - Local - Confusão de tipos / leitura/escrita arbitrária - sobreposição SAS1068 CONFIG SCSI-SPI
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vbox-lsilogic-sas-config
Classe: Confusão de tipos / leitura/escrita arbitrária Alcance: Local (convidado)
Oracle VM VirtualBox OSS 7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
O CONFIG do SAS1068 MPT trata a Porta 0 SCSI-SPI como uma página de 12 bytes. No SAS, essa página é a outra metade de uma union: pManufacturingPage7 mais cbManufacturingPage7. Um CONFIG READ do convidado vaza o ponteiro do heap via DMA. Um CONFIG WRITE planta o ponteiro e o tamanho. A página de fabricação 7 então copia através do ponteiro plantado.
O ring3 do convidado em um SAS1068 anexado (PDM LsiLogicSas, PCI 1000:0054) obtém leitura/escrita arbitrária no processo da VM. Isso é o heap do VirtualBoxVM / VBoxHeadless, não uma fuga do kernel do host.
| ID | ainda sem CVE |
| Classe | Confusão de tipos / leitura/escrita arbitrária |
| Alcance | Local (convidado) |
| CWE | CWE-843, CWE-822 |
| CVSS | Crítico: 8.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| Produto | VirtualBox OSS |
| Afetado | 7.2.20 (f2792cf44) |
| Requer | SAS1068 anexado (PDM LsiLogicSas, PCI 1000:0054) |
| Licença | GNU Affero GPL v3.0 |
| Laboratório | harness de origem em loopback |
Método: o ring3 do convidado programa o doorbell MMIO ou a FIFO de requisições do SAS1068 com MPT_MESSAGE_HDR_FUNCTION_CONFIG (0x04), tipo de página SCSI-SPI Port 0 (0x03). O despacho sempre chama o getter SPI. Apenas EXTENDED é restrito a SAS. O getter de atributo de página está comentado, então a página Readonly Port 0 ainda é gravável. A SPI Port 0 é empacotada em 12 bytes e sobrepõe SasPages.pManufacturingPage7 (8) mais cbManufacturingPage7 (4).
| Privilégio | Tipo | Status | O que concede |
|---|---|---|---|
| CONFIG SCSI-SPI Port 0 READ | reconhecimento | comprovado em laboratório | DMA do ponteiro do heap do processo da VM pManufacturingPage7 e seu tamanho para a RAM do convidado. Entrada para ASLR. |
| CONFIG SCSI-SPI Port 0 WRITE | integridade | comprovado em laboratório | planta ponteiro + tamanho escolhidos pelo convidado sobre esses campos SAS |
| CONFIG READ da página de fabricação 7 | integridade | comprovado em laboratório | copia bytes do host do endereço plantado para o GPA do convidado (VBOX-LSILOGIC-SAS-CONFIG-WITNESS) |
| CONFIG WRITE da página de fabricação 7 | integridade | inferido a partir do mesmo getter | copia bytes do convidado para o endereço plantado (escrita arbitrária no VirtualBoxVM) |
| páginas SPI Port 1 / Device 0 | reconhecimento / integridade | sobreposição inferida | Port 1 vaza/planta pSASIOUnitPage0; Device 0 página 0 atinge paPHYs; Device 0 página 1 atinge pSASDeviceHead |
| ponteiro plantado inválido | disponibilidade | inferido | derruba o processo da VM no próximo acesso a página SAS ou em lsilogicR3ConfigurationPagesFree |
Fechado em adjacentes:
SpiPages é o layout real; esta confusão de tipos precisa do SAS1068)VERR_NOT_FOUND)Isto é leitura/escrita arbitrária no processo da VM, não fuga do kernel do host. Usuário completo no host ainda precisa de um resquício de hardening. Não o combinei com uma escrita 3D remanescente: o UAF DX11 do VMSVGA (d691aa68) está fechado neste pin.
Sem Guest Additions. Sem 3D. Sem VRDP. Não é PUEL. O ring3 hostil do convidado é suficiente; o driver mpt/mptsas in-box não é necessário.
Eu estava no OSS 7.2.20 após a CPU de setembro de 2026 e analisei o LsiLogic MPT CONFIG. O vazamento silencioso de pilha de respostas de 2026 já está fechado: 122c6880 faz RT_ZERO em MptReplyUnion em erro de I/O SCSI. Eu estava procurando um resquício dessa classe, não aquele sink.
O resquício é uma union, não uma resposta de pilha:
union {
MptConfigurationPagesSpi SpiPages;
MptConfigurationPagesSas SasPages;
} u; /* DevLsiLogicSCSI.h:3323 */
O SAS alloc preenche os ponteiros de host SasPages e nunca executa a inicialização de página SPI. O getter de porta SPI em DevLsiLogicSCSI.cpp:2795 não tem verificação de enmCtrlType. Os casos SPI de despacho CONFIG não têm restrição. O getter de atributo de página está comentado em cpp:3159. A página de fabricação 7 em cpp:2701 tem restrição SAS, que é o caminho pretendido, e desreferencia pManufacturingPage7 sem verificação de NULL. É assim que um READ/WRITE de Port 0 do tipo SPI se torna um vazamento e plantio de ponteiro SAS.
Caminhos errados já registrados: reenviar 122c6880; tratar o LSI53C1030 padrão como este bug; inflar um crash de ponteiro selvagem para escape do kernel host; uma VM ativa quando o overlay empacotado é suficiente. Teatro: um reverse shell. O oráculo são os dados da página dummy CONTROL, depois vazamento/plantio/leitura arbitrária de VBOX-LSILOGIC-SAS-CONFIG-WITNESS.
cd lab
./run.sh
Ou python3 vbox-lsilogic-sas-config-Abraxas-Labs.py. Harness de origem das pin structs. O VirtualBox não é inicializado. Projeto Compose vbox-lsilogic-sas-config, network_mode: none. Não vincular nada.
CONTROLE: a leitura de overlay da Porta 0 tipada como SPI são dados de página fictícios, não o ponteiro de heap da página de fabricação 7.
SAS confuso: a LEITURA da Porta 0 vaza pManufacturingPage7 correspondendo ao calloc. A ESCRITA da Porta 0 planta um segundo ponteiro de buffer testemunha + tamanho. O getter da página de fabricação 7 mais a LEITURA de CONFIG copia a testemunha para o array GPA do convidado.
SUCCESS vbox-lsilogic-sas-config leak=yes plant=yes arb-read=yes VBOX-LSILOGIC-SAS-CONFIG-WITNESS
Condicionar os tipos de página SCSI-SPI a enmCtrlType == LSILOGICCTRLTYPE_SCSI_SPI. Restaurar a verificação de atributo de página para que a Porta 0 Somente Leitura permaneça somente leitura. Verificar pManufacturingPage7 (e os outros ponteiros SAS) quanto a NULL antes da desreferência. Parar de sobrepor SpiPages e SasPages em uma única union.