
VirtualBox 7.2.20 - Alta - Local - Leitura de arquivo - OVF NAT TFTP prefixo vazio
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vbox-ovf-nat-tftp-prefix
Classe: Leitura de arquivo Alcance: Local (convidado) após importação com UI:R
Oracle VM VirtualBox OSS 7.2.20 (f2792cf44) - Oracle
A importação de OVF vbox:Machine sanitiza ExtraData, pastas compartilhadas, caminho de NVRAM e RawFile serial. Ela nunca toca em enable-tftp do NAT nem no @prefix do TFTP. O libslirp desabilita o TFTP apenas quando tftp_prefix é NULL. O g_strdup("") do DrvNAT permanece não-NULL. Um RRQ do convidado para etc/passwd com prefixo / ou vazio torna-se /etc/passwd. O ../ no nome do convidado ainda é rejeitado.
Um NAT TFTP importado com prefixo vazio ou / permite que o convidado faça RRQ de arquivos do host com o UID do VBox. Não é escrita. Não é kernel do host. Não é resíduo da verificação fechada de ../.
| ID | ainda sem CVE |
| Classe | Leitura de arquivo (RRQ TFTP do convidado para caminhos do host) |
| Alcance | Local (convidado) após importação UI:R de um OVF vbox:Machine, seguida da inicialização da VM |
| CWE | CWE-22 resíduo da classe de prefixo de CVE-2022-21394 |
| CVSS | Alto: 7.7 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N |
| Produto | Oracle VM VirtualBox OSS |
| Afetado | 7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e) |
| Autenticação | nenhuma no convidado; o usuário do host precisa Importar e depois Iniciar |
| Licença | GNU Affero GPL v3.0 |
| Laboratório | harness de código-fonte; compose em loopback; o VirtualBox não é inicializado |
Entregar um OVF/OVA vbox:Machine cujo blob NAT tenha enable-tftp e prefixo TFTP / ou vazio, além de um disco de convidado que emita RRQ TFTP para o gateway NAT (10.0.2.2:69). O usuário do host importa (Arquivo / Importar ou VBoxManage import) e inicia a VM. A importação limpa ExtraData, pastas compartilhadas, RawFile serial e caminho de NVRAM. Os campos de TFTP sobrevivem. Na inicialização, ConsoleImplConfigCommon insere EnableTFTP. O prefixo vazio é omitido do CFGM; o DrvNAT então define TFTPPrefix como "" por padrão e faz g_strdup dele. O libslirp trata isso como habilitado.
Esse é o conjunto completo de privilégios. Nada aqui é uma escrita no host, uma primitiva de heap no processo da VM ou uma fuga do kernel.
| Método | Destino | Privilégio |
|---|---|---|
RRQ TFTP de oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS com prefixo importado "" | tftp_handle_rrq do libslirp e depois RTFileOpen de prefixo + / + nome do convidado | Comprovado em laboratório. Prefixo vazio permanece não-NULL. O caminho construído é /oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS. A abertura somente leitura retornou os bytes da testemunha. |
RRQ TFTP do mesmo nome com prefixo importado / | o mesmo | Comprovado em laboratório. O caminho construído é //oracle/..., equivalente em POSIX a /oracle/.... Bytes da testemunha retornados. |
Análogo apenas de caminho do RRQ do convidado etc/passwd com prefixo vazio | "" + "/" + "etc/passwd" | Construção de caminho comprovada em laboratório. O resultado é /etc/passwd. O laboratório não abre o /etc do host. |
RRQ TFTP de qualquer nome relativo que o UID do VBox consiga abrir (chaves do home, VirtualBox.xml, /etc do host, raiz da unidade atual no Windows) | o mesmo RTFileOpen | Inferido. Mesma concatenação. Arquivos que o processo não consegue abrir permanecem fechados (File not found). |
| Método | Privilégio |
|---|---|
| WRQ TFTP | Fechado. Este servidor TFTP é somente RRQ. Não há handler de escrita. |
| Sobrescrita / criação de arquivo no host | Fechado. RTFILE_O_READ somente leitura. |
| Heap do processo da VM, VBoxSVC, outras VMs, kernel do host | Fechado. Este resíduo é uma abertura de arquivo de um caminho construído. |
| DoS de TFTP | Fora do escopo. |
fEnableTFTP como false (construtor NATEngine em Settings.cpp).VBoxNetSlirpNAT sempre define tftp_path como <VirtualBox home>/TFTP quando o home existe. As RRQs permanecem sob esse prefixo.../ e uma / final ainda resultam em "Access violation". Esse é o percurso fechado da CVE-2022-21394./work/tftp/boot.pxe no laboratório).Um host real que importa este appliance e inicia a VM concede ao guest a leitura de qualquer caminho que o UID do VBox consiga abrir. O laboratório é um harness de origem desse percurso. O VirtualBox não é inicializado.
Fixe a versão VirtualBox/virtualbox v7.2.20 (f2792cf44). Caças de NAT mais OVF. A versão 7.2 mudou o NAT para o libslirp 4.9.3 empacotado. O cumprimento de pastas compartilhadas a partir de .ova já é tratado como um risco e removido. O TFTP não estava nessa lista.
Settings.cpp ainda lê enable-tftp do NAT e TFTP/@prefix na importação de vbox:Machine:
elmMode.getAttributeValue("enable-tftp", nic.nat.fEnableTFTP);
// ...
pelmTFTP->getAttributeValue("prefix", nic.nat.strTFTPPrefix);
ApplianceImplImport.cpp:6147 sanitiza tudo o que eles lembraram:
config.sanitizeImportedSerialPorts();
config.sanitizeSharedFolderSettings();
config.sanitizeImportedNvramSettings();
if (!m->optListImport.contains(ImportOptions_KeepExtraData))
config.sanitizeImportedExtraData();
Esses quatro corpos nunca mencionam strTFTPPrefix nem fEnableTFTP.
Na inicialização, ConsoleImplConfigCommon.cpp:2286-2292 insere TFTPPrefix apenas quando não está vazio e sempre insere EnableTFTP. DrvNAT.cpp:1656-1665 define EnableTFTP como true por padrão para VMs antigas que omitem a chave, e então:
rc = pDrvIns->pHlpR3->pfnCFGMQueryStringAllocDef(pCfg, "TFTPPrefix", &pszTmp, "");
slirpCfg.tftp_path = pszTmp;
slirp.c:698 é g_strdup. Vazio permanece não-NULL. tftp.c:353-357 apenas desativa em NULL. 364-370 prefixa o prefixo, /, nome do convidado. 398-407 rejeita ../. Em seguida, RTFileOpen do caminho construído.
Caminhos errados já registrados: tratar o ../ do convidado como o resíduo (CVE-2022-21394, ainda rejeitado); tratar novas VMs padrão como afetadas; tratar o home/TFTP da NAT Network como este resíduo; alegar gravações WRQ; alegar kernel do host. Teatro: abrir /etc/passwd do host. O oráculo é um arquivo testemunha sob /oracle.
python3 vbox-ovf-nat-tftp-prefix-Abraxas-Labs.py
ou
cd lab
./run.sh