Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
vbox-guestctrl-copyfrom-dotdot — VirtualBox 7.2.20 - Alta - Local - Gravação de arquivo - Guest Control copy-from DOTDOT | Kitploit
Ferramentas/GitHubGitHub/abraxas/vbox-guestctrl-copyfrom-dotdot
Escalada de PrivilégiosAnálise de VulnerabilidadesAnálise de CódigoExploraçãoVirtualização para SegurançaPapers e PesquisaLabs e Prática
GitHub

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
abraxas/vbox-guestctrl-copyfrom-dotdot

vbox-guestctrl-copyfrom-dotdot

VirtualBox 7.2.20 - Alta - Local - Gravação de arquivo - Guest Control copy-from DOTDOT

Ver Repositório
3há 2 diasAinda não revisado

Abraxas Labs - vbox-guestctrl-copyfrom-dotdot

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  vbox-guestctrl-copyfrom-dotdot

vbox-guestctrl-copyfrom-dotdot

Classe: Escrita de arquivo Alcance: Confused-deputy local (guest)

Oracle VM VirtualBox OSS 7.2.20 (f2792cf44) - Oracle

O host IGuestSession::directoryCopyFromGuest / VBoxManage guestcontrol copyfrom concatena nomes de DIR_NOTIFY do guest no destino. FsList::AddDirFromGuest ignora apenas . e .. exatos. GuestPath::Translate usa estilo de barra mais colapso de barra dupla. BuildDestinationPath rejeita RTPATH_PROP_DOTDOT_REFS na raiz de destino que o host nomeou, não nos nomes por entrada.

Um guest que responde a uma cópia de diretório iniciada pelo host com nomes contendo .. grava arquivos como o UID do VBox fora do destino.

IDsem CVE ainda
ClasseEscrita de arquivo (escape do destino no host)
AlcanceConfused-deputy local (guest). O host inicia a cópia. O guest nomeia os arquivos.
CWECWE-22
CVSSAlto: 8.2 CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N
ProdutoOracle VM VirtualBox OSS
Afetado7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
AutenticaçãoGuest Additions (ou um cliente HGCM substituto) mais uma cópia de diretório iniciada pelo host
LicençaGNU Affero GPL v3.0
LabApenas 127.0.0.1. Harness de código-fonte. Não inicializa o VirtualBox.

O que um atacante pode fazer

O Guest Control é host-para-guest por design. O resquício é o inverso: o usuário do host copia um diretório do guest, e o guest responde a HOST_MSG_DIR_READ com nomes GUEST_MSG_DIR_NOTIFY / GUEST_DIR_NOTIFYTYPE_READ. O Main concatena esses nomes no destino e os abre.

Integridade (comprovada em lab)

MétodoSinkPrivilégio
Host IGuestSession::directoryCopyFromGuest / VBoxManage guestcontrol copyfrom de um diretório do guest. Nome de listagem do guest ../oracle/VBOX-GUESTCTRL-COPYFROM-DOTDOT-WITNESS.CopyFrom::Run faz strDstAbs = dest + native_sep + pEntry->strPath, depois GuestPath::Translate, depois fileCopyFromGuest -> RTFileOpen(RTFILE_O_WRITE | RTFILE_O_OPEN_CREATE).Cria/sobrescreve um arquivo no host fora do destino como o UID do VBox. Destino do lab /work/vbox-copy. O lab gravou /work/oracle/VBOX-GUESTCTRL-COPYFROM-DOTDOT-WITNESS. O conteúdo é escolhido pelo guest (notificação de leitura de arquivo).

Nomes de diretório . e .. exatos são ignorados e não gravam. Um arquivo cujo nome contém .. é armazenado e concatenado.

Integridade (inferida, não neste lab)

MétodoSinkPrivilégio
Mesma cópia. O guest lista ../../../.ssh/authorized_keys (ou DOS ..\..\...) enquanto o destino do host é /tmp/vbox-copy / C:\Temp\vbox-copy.Mesma concatenação + RTFileOpen.Cria ou sobrescreve qualquer caminho no host que o UID possa gravar. Nomes aninhados com --recursive percorrem mais longe.

Reconhecimento

Nada além do destino que o host já escolheu. O guest não descobre caminhos extras no host a partir deste resquício.

Disponibilidade (inferida)

Sobrescrita de arquivos que o UID do VBox pode gravar. Não é um resquício de crash. CVSS A:N.

O que este resquício não concede

  • Kernel do host. Outras VMs. VBoxSVC.
  • fileCopyFromGuest de ficheiro único: o destino é totalmente especificado pelo host; o guest apenas fornece os bytes para esse caminho.
  • Cópia para o guest: o destino está no guest. AddDirFromHost ignora . / .. na listagem do host.
  • Ficheiros que o UID do VBox não consegue escrever (/etc como utilizador normal, a home de outro utilizador).
  • Token restrito do Windows / AppContainer. Trata-se do processo do utilizador VBox a escrever, não de um bypass de hardening.
  • Injeção pelo guest de HOST_MSG_*. svcCall apenas despacha GUEST_MSG_*.
  • Sanitizador de caminhos em guestCtrlValidateDirEntryEx. Essa verificação é de UTF-8/tamanho, não de ...

Requer Guest Additions (ou um cliente HGCM substituto que detenha a sessão) e uma cópia de diretório a partir do guest iniciada pelo host. Sem 3D. Sem VRDP. Não é PUEL. Confused-deputy: o utilizador do host copia a partir de um guest hostil.

Como o encontrei

Fixe a versão VirtualBox/virtualbox v7.2.20 (f2792cf44). Caça ao Guest Control H04. Apenas guest-para-host. O TOCTOU de pastas partilhadas (P0 1037) é uma classe irmã num serviço diferente e está fechado neste pin (RTPathStartsWith após abs lexical). A cópia a partir do guest do Guest Control concatena nomes DIR_NOTIFY, não nomes SHFL.

AddDirFromGuest constrói strEntry a partir do Name do guest e ignora apenas . / .. exatos:

Utf8Str strEntry = strPathSub + Utf8Str(bstrName);
switch (enmObjType)
{
    case FsObjType_Directory:
    {
        if (   bstrName.equals(".")
            || bstrName.equals(".."))
        {
            break;
        }
        vrc = AddDirFromGuest(strPath, strEntry);
        break;
    }
    case FsObjType_File:
        vrc = AddEntryFromGuest(strEntry, fsObjInfo->i_getData());
        break;
}

CopyFrom::Run então concatena o caminho armazenado em dest e apenas Traduz:

strDstAbs += PATH_STYLE_SEP_STR(PATH_STYLE_NATIVE);
strDstAbs += pEntry->strPath;
vrc = GuestPath::Translate(strDstAbs, mSession->i_getGuestPathStyle(), PATH_STYLE_NATIVE);
/* directoryCreateOnHost / fileCopyFromGuest -> RTFileOpen WRITE|OPEN_CREATE */

GuestPath::BuildDestinationPath documenta "Dotdot directories are forbidden for security reasons" e rejeita RTPATH_PROP_DOTDOT_REFS. Essa chamada ocorre apenas na raiz de destino (GuestSessionImplTasks.cpp:1685-1686). Os nomes por entrada nunca passam por ela. Translate (GuestCtrlPrivate.cpp:2129-2208) altera o estilo de barra e colapsa //. Não rejeita ...

Caminhos errados já registrados: tratar o skip exato de . / .. como um sanitizador de caminho; assumir que Translate canonicaliza; aplicar a verificação da raiz de destino a cada entrada; inicializar uma VM em vez de um harness de origem; alegar que se trata de escape do kernel do host; tratar a cópia de arquivo único de destino ou cópia para o guest como o resíduo. Teatro: um reverse shell. O oráculo é um arquivo testemunha fora do destino.

Lab

cd lab
./run.sh

Compor o projeto vbox-guestctrl-copyfrom-dotdot. Loopback 127.0.0.1:19220. Harness de origem do pin v7.2.20 peel f2792cf44: skip de . / .. exatos, GuestPath::Translate (apenas estilo slash), junção dest+sep+entry de CopyFrom::Run e depois write/create, rejeição DOTDOT de dest-root BuildDestinationPath. Não inicializa o VirtualBox nem o Guest Additions. Vincule-o ao loopback.

SUCCESS vbox-guestctrl-copyfrom-dotdot skip-dot=yes translate-keeps-dotdot=yes escaped-write=yes dest-root-check-unused-per-entry=yes VBOX-GUESTCTRL-COPYFROM-DOTDOT-WITNESS

A correção

Baixar ferramenta