Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
vbox-guestctrl-copyfrom-dotdot — VirtualBox 7.2.20 - Alta - Local - Escritura de archivos - Guest Control copy-from DOTDOT | Kitploit
Herramientas/GitHubGitHub/abraxas/vbox-guestctrl-copyfrom-dotdot
Escalada de PrivilegiosAnálisis de VulnerabilidadesAnálisis de CódigoExplotaciónVirtualización de SeguridadPapers e InvestigaciónLabs y Práctica
GitHub

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
abraxas/vbox-guestctrl-copyfrom-dotdot

vbox-guestctrl-copyfrom-dotdot

VirtualBox 7.2.20 - Alta - Local - Escritura de archivos - Guest Control copy-from DOTDOT

Ver Repositorio
3hace 3 díasAún no revisado

Abraxas Labs - vbox-guestctrl-copyfrom-dotdot

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

vbox-guestctrl-copyfrom-dotdot

Clase: Escritura de archivos Alcance: Confused-deputy local (invitado)

Oracle VM VirtualBox OSS 7.2.20 (f2792cf44) - Oracle

El host IGuestSession::directoryCopyFromGuest / VBoxManage guestcontrol copyfrom concatena los nombres de DIR_NOTIFY del invitado sobre el destino. FsList::AddDirFromGuest omite únicamente . y .. exactos. GuestPath::Translate usa estilo de barras y colapsa las barras dobles. BuildDestinationPath rechaza RTPATH_PROP_DOTDOT_REFS en la raíz de destino que nombró el host, no en los nombres de cada entrada.

Un invitado que responde a una copia de directorio desde el host con nombres que contienen .. escribe archivos como el UID de VBox fuera del destino.

IDaún sin CVE
ClaseEscritura de archivos (escape del destino del host)
AlcanceConfused-deputy local (invitado). El host inicia la copia. El invitado nombra los archivos.
CWECWE-22
CVSSAlta: 8.2 CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N
ProductoOracle VM VirtualBox OSS
Afectado7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
AutenticaciónGuest Additions (o un cliente HGCM de reemplazo) más una copia de directorio desde el host iniciada por el host
LicenciaGNU Affero GPL v3.0
LaboratorioSolo 127.0.0.1. Arnés de código fuente. No arranca VirtualBox.

Qué puede hacer un atacante

Guest Control es de host a invitado por diseño. Lo que queda es lo inverso: el usuario del host copia un directorio del invitado, y el invitado responde a HOST_MSG_DIR_READ con nombres GUEST_MSG_DIR_NOTIFY / GUEST_DIR_NOTIFYTYPE_READ. Main concatena esos nombres sobre el destino y los abre.

Integridad (probado en laboratorio)

MétodoSumideroPrivilegio
Host IGuestSession::directoryCopyFromGuest / VBoxManage guestcontrol copyfrom de un directorio del invitado. Nombre de listado del invitado ../oracle/VBOX-GUESTCTRL-COPYFROM-DOTDOT-WITNESS.CopyFrom::Run hace strDstAbs = dest + native_sep + pEntry->strPath, luego GuestPath::Translate, luego fileCopyFromGuest -> RTFileOpen(RTFILE_O_WRITE | RTFILE_O_OPEN_CREATE).Crear/sobrescribir un archivo del host fuera del destino como el UID de VBox. Destino del laboratorio /work/vbox-copy. El laboratorio escribió /work/oracle/VBOX-GUESTCTRL-COPYFROM-DOTDOT-WITNESS. El contenido lo elige el invitado (notificación de lectura de archivo).

Los nombres de directorio . y .. exactos se omiten y no escriben. Un archivo cuyo nombre contiene .. se almacena y se concatena.

Integridad (inferido, no en este laboratorio)

MétodoSumideroPrivilegio
Misma copia desde el host. El invitado lista ../../../.ssh/authorized_keys (o DOS ..\..\...) mientras el destino del host es /tmp/vbox-copy / C:\Temp\vbox-copy.Misma concatenación + RTFileOpen.Crear o sobrescribir cualquier ruta del host que ese UID pueda escribir. Los nombres anidados con --recursive avanzan más lejos.

Reconocimiento

Nada más allá del destino que el host ya eligió. El invitado no aprende rutas adicionales del host a partir de este resto.

Disponibilidad (inferido)

Sobrescritura de archivos que el UID de VBox puede escribir. No es un resto de caída. CVSS A:N.

Qué no otorga este resto

  • Kernel del host. Otras VM. VBoxSVC.
  • fileCopyFromGuest de un solo archivo: el destino está completamente especificado por el host; el guest solo aporta bytes en esa ruta.
  • Copia al guest: el destino está en el guest. AddDirFromHost omite . / .. en el listado del host.
  • Archivos que el UID de VBox no puede escribir (/etc como usuario normal, el home de otro usuario).
  • Token restringido de Windows / AppContainer. Se trata del proceso de usuario de VBox escribiendo, no de un bypass de endurecimiento.
  • Inyección por parte del guest de HOST_MSG_*. svcCall solo despacha GUEST_MSG_*.
  • Sanitizador de rutas en guestCtrlValidateDirEntryEx. Esa comprobación es de UTF-8/tamaño, no de ...

Requiere Guest Additions (o un cliente HGCM de reemplazo que posea la sesión) y una copia de directorio desde el host iniciada por el host. Sin 3D. Sin VRDP. No es PUEL. Confused-deputy: el usuario del host copia desde un guest hostil.

Cómo lo encontré

Fijé VirtualBox/virtualbox v7.2.20 (f2792cf44). Caza de Guest Control H04. Solo de guest a host. El TOCTOU de carpeta compartida (P0 1037) es una clase hermana en un servicio diferente y está cerrado en este pin (RTPathStartsWith tras abs léxico). La copia desde Guest Control concatena nombres de DIR_NOTIFY, no nombres de SHFL.

AddDirFromGuest construye strEntry a partir del Name del guest y omite solo . / .. exactos:

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 luego concatena la ruta almacenada en dest y solo Translates:

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" y rechaza RTPATH_PROP_DOTDOT_REFS. Esa llamada solo se aplica a la raíz de destino (GuestSessionImplTasks.cpp:1685-1686). Los nombres por entrada nunca pasan por ella. Translate (GuestCtrlPrivate.cpp:2129-2208) cambia el estilo de las barras y colapsa //. No rechaza ...

Falsos caminos ya registrados: tratar el salto exacto de . / .. como un saneador de rutas; asumir que Translate canonicaliza; aplicar la comprobación de la raíz de destino a cada entrada; arrancar una VM en lugar de un arnés de código fuente; afirmar que se trata de un escape del kernel anfitrión; tratar la copia desde el destino de un solo archivo o la copia al invitado como lo pendiente. Teatro: una reverse shell. El oráculo es un archivo testigo fuera del destino.

Laboratorio

cd lab
./run.sh

Componer el proyecto vbox-guestctrl-copyfrom-dotdot. Loopback 127.0.0.1:19220. Arnés de origen del pin v7.2.20 peel f2792cf44: omisión de exactamente . / .., GuestPath::Translate (solo estilo de barra), CopyFrom::Run unión de dest+sep+entry y luego write/create, raíz de destino BuildDestinationPath rechazo de DOTDOT. No arranca VirtualBox ni Guest Additions. Vincúlalo al loopback.

Descargar herramienta