POTATO
PRINTSPOOFER
SPOOLSS PIPE
SEIMPERSONATE
DetectionBlue TeamSOCOctober 12, 2026•9 min read

Detecting Potato Attacks: JuicyPotato, PrintSpoofer and RoguePotato

Potato attacks exist because web and database service accounts hold SeImpersonatePrivilege by design. Detection means catching the coercion and the SYSTEM process it produces.

Scroll

The Potato family tricks a SYSTEM-level component into authenticating to a listener the attacker controls, then impersonates the resulting token (T1134.001, T1557). JuicyPotato and its relatives use DCOM, PrintSpoofer coerces the print spooler into a crafted named pipe, and RoguePotato redirects the OXID resolver. The entry point is nearly always a compromised IIS or SQL Server service account.

Signals at a Glance

SignalWhereATT&CK
Named pipe ending in \pipe\spoolss created by a process other than spoolsv.exeSysmon 17/18T1134.001
SYSTEM process whose parent runs as a service or app-pool accountSysmon 1, EDRT1134.001
Service account process listening on a local port then receiving a SYSTEM DCOM or RPC callbackSysmon 3, host firewallT1557
Outbound TCP 135 from a server to an unfamiliar host (RoguePotato OXID redirect)Firewall, Sysmon 3T1557
Known tool names and arguments (PrintSpoofer -i -c, JuicyPotato -t * -c CLSID)Sysmon 1, 4688T1134.001

The Spooler Pipe Trick

PrintSpoofer creates a pipe whose name ends in \pipe\spoolss and coerces the print spooler into connecting to it. The genuine spooler pipe is created by spoolsv.exe and is named plain \spoolss, so the suffix match with a creator filter is a clean signal:

title: PrintSpoofer-Style Spooler Pipe Creation
logsource:
  product: windows
  category: pipe_created
detection:
  selection:
    PipeName|endswith: '\pipe\spoolss'
  filter_legit:
    Image|endswith: '\spoolsv.exe'
  condition: selection and not filter_legit
level: high
# tune/validate: requires Sysmon pipe events (17/18) in your configuration.

SYSTEM Children of Service Accounts

Every Potato variant ends the same way: a process running as SYSTEM that was started by something that was not. Web application pools, SQL Server and other service accounts have no business spawning a SYSTEM shell:

// Microsoft Defender (KQL) - SYSTEM process launched from a service-account parent
DeviceProcessEvents
| where AccountSid == "S-1-5-18"
| where InitiatingProcessAccountSid != "S-1-5-18"
| where InitiatingProcessAccountSid in ("S-1-5-19","S-1-5-20")
     or InitiatingProcessAccountSid startswith "S-1-5-82-"
     or InitiatingProcessAccountSid startswith "S-1-5-80-"
| where FileName in~ ("cmd.exe","powershell.exe","pwsh.exe","whoami.exe","net.exe","rundll32.exe")
| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessAccountName,
          FileName, ProcessCommandLine
// tune/validate: S-1-5-82 is an IIS app-pool SID and S-1-5-80 an NT SERVICE SID.
Vetted sources

Use the SigmaHQ pipe-creation and hacktool rules for PrintSpoofer, RoguePotato and JuicyPotato, Elastic’s prebuilt rules for privilege escalation via token impersonation, and Atomic Red Team for validation. Baseline your own environment — renamed binaries defeat name matching, so the pipe and parent-child logic are the durable parts.

Build Detections That Fire

Mjolnir Security helps blue teams turn threat intelligence into high-fidelity detections across endpoint, network, identity and cloud telemetry.

Detection EngineeringManaged Detection & ResponseThreat HuntingIncident ResponsePurple Teaming
  • Detection Engineering We build and tune detections mapped to ATT&CK from your own telemetry.
  • Threat Hunting as a Service Hypothesis-driven hunts for the behaviours on this page.
  • 24/7 Incident Response Containment when a detection fires. Call +1 833 403 5875.
Written by: Mjolnir Threat Research (MTAC)  |  Published: October 12, 2026  |  Last reviewed: October 12, 2026