Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
vbox-guestctrl-copyfrom-dotdot — VirtualBox 7.2.20 - Alta - Locale - Scrittura di file - Guest Control copy-from DOTDOT | Kitploit
Strumenti/GitHubGitHub/abraxas/vbox-guestctrl-copyfrom-dotdot
Escalation di PrivilegiAnalisi delle VulnerabilitàAnalisi del CodiceExploitVirtualizzazione per la SicurezzaPaper e RicercaLab e Pratica
GitHub

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
abraxas/vbox-guestctrl-copyfrom-dotdot

vbox-guestctrl-copyfrom-dotdot

VirtualBox 7.2.20 - Alta - Locale - Scrittura di file - Guest Control copy-from DOTDOT

Vedi Repository
32 giorni faNon ancora revisionato

Abraxas Labs - vbox-guestctrl-copyfrom-dotdot

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

vbox-guestctrl-copyfrom-dotdot

Classe: Scrittura di file Portata: Confused-deputy locale (guest)

Oracle VM VirtualBox OSS 7.2.20 (f2792cf44) - Oracle

L'host IGuestSession::directoryCopyFromGuest / VBoxManage guestcontrol copyfrom concatena i nomi DIR_NOTIFY del guest sulla destinazione. FsList::AddDirFromGuest salta solo . e .. esatti. GuestPath::Translate usa lo stile slash più il collasso degli slash doppi. BuildDestinationPath rifiuta RTPATH_PROP_DOTDOT_REFS sulla radice di destinazione indicata dall'host, non sui nomi delle singole voci.

Un guest che risponde a una copia di directory avviata dall'host con nomi contenenti .. scrive file con l'UID di VBox al di fuori della destinazione.

IDnessuna CVE al momento
ClasseScrittura di file (fuga dalla destinazione dell'host)
PortataConfused-deputy locale (guest). L'host avvia la copia. Il guest assegna i nomi ai file.
CWECWE-22
CVSSAlto: 8.2 CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N
ProdottoOracle VM VirtualBox OSS
Affetto7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
AuthGuest Additions (o un client HGCM sostitutivo) più una copia di directory avviata dall'host
LicenzaGNU Affero GPL v3.0
LabSolo 127.0.0.1. Harness sorgente. Non avvia VirtualBox.

Cosa può fare un attaccante

Guest Control è host-to-guest per progettazione. Ciò che resta è l'inverso: l'utente host copia una directory del guest, e il guest risponde a HOST_MSG_DIR_READ con nomi GUEST_MSG_DIR_NOTIFY / GUEST_DIR_NOTIFYTYPE_READ. Main concatena quei nomi sulla destinazione e li apre.

Integrità (dimostrata in laboratorio)

MetodoSinkPrivilegio
Host IGuestSession::directoryCopyFromGuest / VBoxManage guestcontrol copyfrom di una directory del guest. Nome di elenco del guest ../oracle/VBOX-GUESTCTRL-COPYFROM-DOTDOT-WITNESS.CopyFrom::Run esegue strDstAbs = dest + native_sep + pEntry->strPath, poi GuestPath::Translate, poi fileCopyFromGuest -> RTFileOpen(RTFILE_O_WRITE | RTFILE_O_OPEN_CREATE).Crea/sovrascrive un file host al di fuori della destinazione con l'UID di VBox. Destinazione del lab /work/vbox-copy. Il lab ha scritto /work/oracle/VBOX-GUESTCTRL-COPYFROM-DOTDOT-WITNESS. Il contenuto è scelto dal guest (notifica di lettura file).

I nomi di directory . e .. esatti vengono saltati e non scrivono. Un file il cui nome contiene .. viene memorizzato e concatenato.

Integrità (dedotta, non in questo lab)

MetodoSinkPrivilegio
Stessa copy-from. Il guest elenca ../../../.ssh/authorized_keys (o in stile DOS ..\..\...) mentre la destinazione dell'host è /tmp/vbox-copy / C:\Temp\vbox-copy.Stessa concatenazione + RTFileOpen.Crea o sovrascrive qualsiasi percorso host scrivibile da quell'UID. I nomi annidati con --recursive si spingono oltre.

Ricognizione

Nessuna oltre alla destinazione già scelta dall'host. Il guest non apprende percorsi host aggiuntivi da questo residuo.

Disponibilità (dedotta)

Sovrascrittura di file scrivibili dall'UID di VBox. Non è un residuo di crash. CVSS A:N.

Cosa questo residuo non concede

  • Kernel host. Altre VM. VBoxSVC.
  • fileCopyFromGuest a file singolo: la destinazione è interamente specificata dall'host; il guest fornisce solo i byte in quel percorso.
  • Copia verso il guest: la destinazione è sul guest. AddDirFromHost salta . / .. nell'elenco dell'host.
  • File che l'UID di VBox non può scrivere (/etc come utente normale, la home di un altro utente).
  • Token limitato di Windows / AppContainer. Si tratta del processo utente di VBox che scrive, non di un bypass dell'hardening.
  • Iniezione da parte del guest di HOST_MSG_*. svcCall invia solo GUEST_MSG_*.
  • Sanitizzatore di percorso in guestCtrlValidateDirEntryEx. Quel controllo è UTF-8/dimensione, non ...

Richiede Guest Additions (o un client HGCM sostitutivo che possiede la sessione) e una copia di directory avviata dall'host. Nessun 3D. Nessun VRDP. Non PUEL. Confused-deputy: l'utente host copia da un guest ostile.

Come l'ho trovato

Ho fissato VirtualBox/virtualbox v7.2.20 (f2792cf44). Caccia a Guest Control H04. Solo da guest a host. La TOCTOU della cartella condivisa (P0 1037) è una classe affine su un servizio diverso ed è chiusa su questo pin (RTPathStartsWith dopo abs lessicale). La copia da Guest Control concatena i nomi DIR_NOTIFY, non i nomi SHFL.

AddDirFromGuest costruisce strEntry dal Name del guest e salta solo . / .. esatti:

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 concatena quindi il percorso memorizzato su dest e solo Traduce:

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 rifiuta RTPATH_PROP_DOTDOT_REFS. Quella chiamata avviene solo sulla radice di destinazione (GuestSessionImplTasks.cpp:1685-1686). I nomi delle singole voci non passano mai da lì. Translate (GuestCtrlPrivate.cpp:2129-2208) cambia lo stile delle barre e collassa //. Non rifiuta ...

Vicoli ciechi già registrati: trattare il salto esatto di . / .. come un sanitizzatore di percorsi; presumere che Translate canonicalizzi; applicare il controllo della radice di destinazione a ogni voce; avviare una VM invece di un harness sul sorgente; affermare che si tratta di un'evasione dal kernel host; considerare la copia da singolo file dalla destinazione o la copia verso il guest come il residuo. Teatro: una reverse shell. L'oracolo è un file testimone esterno alla destinazione.

Lab

cd lab
./run.sh

Comporre il progetto vbox-guestctrl-copyfrom-dotdot. Loopback 127.0.0.1:19220. Harness sorgente del pin v7.2.20 peel f2792cf44: skip di esatto . / .., GuestPath::Translate (solo stile slash), CopyFrom::Run join dest+sep+entry poi write/create, dest-root BuildDestinationPath rifiuto DOTDOT. Non avvia VirtualBox o Guest Additions. Collegarlo al 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

La correzione

Scarica lo strumento