Unquoted Service Path
Un unquoted service path es un servicio de Windows cuyo ejecutable está registrado con una ruta que contiene espacios y sin comillas. Cuando el Service Control Manager arranca el servicio, tiene que decidir dónde termina el nombre del programa y dónde empiezan sus argumentos, y ante una ruta sin comillas prueba todas las particiones posibles del espacio, de izquierda a derecha, añadiendo .exe. Si en alguna de esas rutas intermedias podemos escribir un ejecutable, el servicio lo lanzará con su nivel de privilegio (casi siempre SYSTEM), no con el nuestro.
Mecanismo
Supongamos un servicio con este ImagePath:
C:\Program Files\Some Vendor\Service Runner\service.exeAl no estar entre comillas, Windows intenta ejecutar, en orden:
C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Vendor\Service.exe
C:\Program Files\Some Vendor\Service Runner\service.exeEl primero que exista, gana. Si el instalador dejó C:\Program Files\Some Vendor\ con permisos de escritura para usuarios normales (más habitual de lo que parece en software de terceros), basta con dejar ahí un Service.exe malicioso: al reiniciar el servicio, SYSTEM ejecuta nuestro binario en lugar del legítimo.
Requisitos. Hacen falta tres condiciones a la vez, y la que falla casi siempre es la tercera: (1) la ruta del servicio no está entrecomillada y contiene espacios, (2) el servicio corre como una cuenta privilegiada, y (3) tenemos permiso de escritura en uno de los directorios intermedios y capacidad de reiniciar el servicio (o de esperar a un reinicio del equipo).
Cómo detectarlo
winPEAS y PowerUp lo marcan solos, pero a mano se localiza con WMI o sc, filtrando las rutas con espacio que no empiezan por comilla:
wmic service get name,displayname,pathname,startmode | findstr /i "auto" | findstr /i /v "c:\windows\\" | findstr /i /v """Get-CimInstance win32_service | Where-Object { $_.PathName -notmatch '^"' -and $_.PathName -match ' ' } | Select Name, PathName, StartNameDespués se comprueba el permiso de escritura del directorio candidato con icacls "C:\Program Files\Some Vendor" (buscar (W), (M), (F) para nuestro usuario o para BUILTIN\Users).
El binario malicioso suele ser un msfvenom -p windows/x64/... -f exe o un pequeño C que añade un usuario al grupo de administradores; se coloca con el nombre de la partición ganadora y se dispara el servicio:
sc stop <service> & sc start <service>Defensa. Registrar siempre el ImagePath entre comillas; revisar los permisos de los directorios de C:\Program Files para que un usuario normal no pueda escribir en ellos; y aplicar mínimo privilegio a las cuentas de servicio. Relacionado con permisos de servicio inseguros y secuestro de tareas programadas.