the_open_door
café
ESEN
← Volver al índice

escalation via VSStandardCollectorService150 (CVE-2024-20656)

CVE-2024-20656 es una elevación de privilegios local en Visual Studio. Al instalar VS con soporte de C/C++ se crea el servicio VSStandardCollectorService150, que corre como NT AUTHORITY\SYSTEM y se arranca bajo demanda mediante COM. El servicio realiza operaciones de ficheros (crear/mover/borrar) en rutas que un usuario sin privilegios puede influir, y ahí está la grieta: combinando esas operaciones con uniones de directorio (junctions) y puntos de reanálisis (reparse points), se redirige una acción privilegiada hacia un objetivo elegido por el atacante, logrando ejecución como SYSTEM.

Cómo se confirma el terreno. Lo primero es ver que el servicio existe y corre como LocalSystem:

sc.exe qc VSStandardCollectorService150
SERVICE_NAME: VSStandardCollectorService150
        BINARY_PATH_NAME : "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Common\DiagnosticsHub.Collection.Service\StandardCollector.Service.exe"
        SERVICE_START_NAME : LocalSystem

La maniobra (PoC). El exploit público (por ejemplo el de WHibe) crea directorios trampa, abre un handle con FILE_FLAG_OPEN_REPARSE_POINT y va montando junctions para que, cuando el servicio SYSTEM opere sobre "su" fichero temporal, acabe ejecutando o colocando el binario del atacante. Como el PoC es C/C++, hay que compilarlo (en la propia caja, que tiene Visual Studio, o en otra máquina Windows) y subir el Expl.exe resultante junto a un reverse.exe generado con msfvenom.

El detalle del token. Una shell obtenida por WinRM usa un logon de red, cuyo token suele carecer de los privilegios/identidad que el exploit necesita para hablar con el COM del servicio. Por eso se relanza el exploit con un logon interactivo usando RunasCs (RunasCs) y las credenciales del usuario:

.\RunasCs.exe <user> <pass> "cmd /c C:\ProgramData\Expl.exe"

El exploit dispara el servicio SYSTEM, que ejecuta el payload y devuelve una reverse shell como nt authority\system.

La pista de la caja. Una nota que insiste en "mantener Visual Studio actualizado a la última versión" no es decorado: señala que el vector es una vulnerabilidad parcheada de VS.

Indicio frente a prueba. Ver el servicio como LocalSystem y arranque DEMAND_START sugiere el vector, pero la prueba es la shell SYSTEM. Depende de la versión de VS instalada y de poder compilar/ejecutar el PoC.

Cómo detectarlo. La firma es de linaje y de manipulación del sistema de ficheros: el servicio VSStandardCollectorService150/StandardCollector.Service.exe (como SYSTEM) lanzando un binario que no forma parte de Visual Studio como hijo (Event ID 4688 / Sysmon 1), y un usuario sin privilegios creando uniones de directorio y puntos de reanálisis (junctions/reparse points) en rutas temporales justo antes (Sysmon 11/2). El uso de RunasCs deja además un logon interactivo (4624 tipo 2) originado desde un contexto de servicio, incoherente con una sesión normal. Un SYSTEM shell surgiendo tras esa secuencia es la prueba.

Defensa. Aplicar las actualizaciones de seguridad de Visual Studio; restringir quién puede interactuar con el servicio; no dejar herramientas de desarrollo en servidores de producción. Relacionado con RunasCs, abuso de SeImpersonatePrivilege y exploits de kernel de Windows.

Máquinas donde se aplica