UAT-10147 — Agentic-AI-Augmented Post-Compromise: SPECTRE, Specter Rootkit & BadIIS
Executive Summary
Cisco Talos identified UAT-10147, a Chinese-speaking intrusion actor Talos assesses with moderate-to-high confidence is financially motivated (SEO fraud + data theft), not a nation-state operator, exploiting publicly disclosed ("1-day") vulnerabilities to compromise internet-facing Windows/IIS and Linux web servers at scale globally, with confirmed activity affecting organizations in government, education, media, technology, and gaming sectors. A recovered command-and-control open directory (139.180.197[.]150) exposed a target list of approximately 170,000 URLs, split into 17 files of ~10,000 URLs each — the actor's own operational notation uses the letter "w" for the Chinese character "萬" (10,000).
What distinguishes UAT-10147 from ordinary opportunistic web-server crimeware is its systematic use of agentic AI tooling across the intrusion lifecycle: AI-generated, well-documented exploitation guides (an ASP.NET ViewState deserialization RCE playbook complete with prerequisites, MAC-validation-failure vs. InvalidCastException oracle logic, out-of-band confirmation techniques, and a privilege-escalation path), four companion AI-generated Python automation scripts (check_paths.py, deploy_implant.py, deploy_shell.py, exfil.py), and the open-source frameworks PentestGPT (autonomous scan-and-exploit) and DeepAudit (AI source-code vulnerability scanning) staged on the actor's own C2 server. Talos further assesses with medium confidence that the actor's new Linux kernel rootkit ("Specter") shows internal evidence of AI-assisted development — a machine-generated documentation style, uniform section separators, and an exhaustive "list every method" pattern uncharacteristic of a human rootkit author.
Post-exploitation, the actor deploys a newly identified cross-platform C2 implant, SPECTRE (Windows + Linux, written in C), which layers process injection, credential theft, anti-analysis/anti-sandbox scoring, and — on Windows — a BYOVD (Bring Your Own Vulnerable Driver) EDR-killer that unlinks kernel callback routines to blind CrowdStrike Falcon, SentinelOne, Microsoft Defender, and other EDR products. On Linux, SPECTRE loads the Specter kernel-module rootkit (disguised as acpi_pad.ko) which hides processes and itself via ftrace hooking rather than syscall-table patching. In parallel, the actor runs a large commodity/open-source arsenal (QuasarRAT, Gh0stCringe, Meterpreter, Noodle RAT, multiple "Potato"-family privilege-escalation tools) and monetizes access via BadIIS (a malware-as-a-service SEO-fraud IIS module also used by other Chinese-speaking crime groups) and a custom ASP.NET SEO-hijacking handler targeting Vietnamese search traffic.
Highest-value defensive angle: almost every step in this campaign after initial RCE produces a distinctive, low-noise process-execution or file-write artifact on the host — the "Google Chrome Start" scheduled task, the svchosts.exe (extra "s") QuasarRAT masquerade, the literal RTCore64.sys/DBUtil_2_3.sys BYOVD driver drop, and the [10-digit].[7-digit].dll reverse-shell naming convention from the Telerik ViewState exploit chain are all near-zero-FP signatures (Q1–Q18 below). The genuinely hard part of this threat is initial access: it depends on which of five 1-day CVEs (Zimbra, AjaxPro, Nacos, Telerik ViewState) is unpatched in your environment, and that patching gap is the single highest-leverage control.
⚠ Patch/upgrade Zimbra Collaboration Suite (CVE-2022-27925), AjaxPro (CVE-2021-23758), Nacos (CVE-2021-29441/29442), and Telerik UI for ASP.NET AJAX (CVE-2019-18935) first, and rotate any ASP.NET machineKey values that may be publicly known via the badsecrets database — the AI-generated exploitation guide Talos recovered states plainly that the entire ViewState attack chain depends on key-material exposure. Every other control in this pack is defense-in-depth for the post-exploitation phase.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry Forward |
|---|---|---|---|
| 1 | Cisco Talos — "UAT-10147...integrates agentic AI" (direct fetch) | Primary disclosure: actor profile, 170K-URL target list, Windows/Linux infection chains, AI-tooling narrative (PentestGPT, DeepAudit, ysoserial-driven AI playbook + 4 Python scripts), initial-access CVE list | yes |
| 1 | Cisco Talos — "UAT-10147 deploys SPECTRE" (direct fetch) | SPECTRE implant internals (Windows 45-command / Linux 29-command sets, BYOVD, injection, credential theft), Specter Linux rootkit internals (ftrace hooking, magic-PID IPC), BadIIS/SeoEngineHandler, web shell, commodity-backdoor roster | yes |
| 1 | Talos GitHub IOC file — "UAT-10147 integrates agentic AI.txt" (direct fetch) | 12 SHA256 hashes, 2 IPs, 14 staging URLs tied to the Windows infection chain | yes |
| 1 | Talos GitHub IOC file — "UAT-10147 deploys SPECTRE.txt" (direct fetch) | 44 SHA256 hashes, 4 IPs (1 shared with the first IOC file), 9 domains/URLs tied to SPECTRE/BadIIS/SEO-fraud infrastructure | yes |
| 2 | The Hacker News — "UAT-10147 Uses AI to Scale Server Attacks" (2026-08-24, direct fetch) | Corroborates both Talos posts verbatim via direct quotes; adds SPECTRE first-observed date (April 2026) and a second target-list geography metric (top-5 destination countries by URL count) | partial |
Verification notes (per standing practice — vendor claims are checked, not assumed):
- UAT-10147 is explicitly assessed by Talos as financially motivated cybercrime, not a nation-state actor — this pack's severity/type framing and hardening priorities follow that classification rather than treating it as APT-grade targeted espionage.
- The two Talos posts report target/victim geography two different ways and this pack keeps them distinct rather than merging them: Talos' own post states affected/compromised servers were observed in Brazil, Bolivia, China, Canada, and Vietnam; The Hacker News separately reports the top-5 destination countries of the raw 170,000-URL target list (by resolved IP) as the U.S., India, the U.K., Germany, and the Netherlands. These are not contradictory — one is confirmed-compromise geography, the other is scan-target geography.
- Three domains in the second Talos IOC file —
www.xxxx.vip,spider.xxxx.com, and by extension the literal string "xxxx" — read as a possible placeholder/redaction rather than a genuine registered domain. Talos ships them in a machine-readable IOC file intended for direct ingestion (not narrative prose), so this pack includes them but downgrades them to medium confidence / hunt action rather than block, and flags the caveat explicitly in §4/§10. - Every atomic indicator (hash, IP, defanged domain) shipped in §4/§10 traces to one of the four direct-fetch source snapshots in
UAT10147-SPECTRE-Hunt-sources/(fetched 2026-08-26); see §18 for the full source list with access dates. - Prompt-injection screening: both Talos blog posts and the corroborating Hacker News article were screened for text addressed to an AI agent/assistant instructing it to take action, fetch further URLs, or treat something as pre-authorized. None was found in any of the three articles or the two raw GitHub IOC files. All fetched content was treated strictly as data to analyze, never as instructions.
Hunt Brief & Attack Chain
Hunt hypotheses (ordered by fidelity)
- H1 (high): A "Potato"-family privilege-escalation tool (EfsPotato/GodPotato/JuicyPotato/RustPotato, or the renamed
prcc1.rar/prcc2.rar) executes on a Windows web server. Falcon:ProcessRollup2. - H2 (high):
certutil.exeretrieves a payload from published UAT-10147 staging infrastructure (adminapi.tippusoni.in,kl21177.com,139.180.197.150). Falcon:ProcessRollup2. - H3 (high): A scheduled task literally named "Google Chrome Start" is registered — UAT-10147's deceptive persistence mechanism for QuasarRAT/Gh0stCringe/SPECTRE. Falcon:
ScheduledTaskRegistered. - H4 (high): A process named
svchosts.exe(extra "s" — QuasarRAT's masquerade of the legitimate singularsvchost.exe) executes. Falcon:ProcessRollup2. - H5 (high): The RTCore64.sys or DBUtil_2_3.sys vulnerable driver is written to disk — SPECTRE's BYOVD EDR-killer staging its payload. Falcon:
PeFileWritten/NewExecutableWritten. - H6 (high): A
[10-digit].[7-digit].dllreverse-shell payload is written to disk — the distinctive naming convention from the Telerik/CVE-2019-18935 exploitation chain. Falcon:PeFileWritten/NewExecutableWritten. - H7 (medium-high): Windows Defender exclusions are added for
System32\inetsrv/SysWOW64\inetsrv— BadIIS defense-evasion staging. Falcon:ProcessRollup2. - H8 (medium-high): A rogue local account is created and added to Administrators and Remote Desktop Users — the
user.batpersistence step. Falcon:ProcessRollup2(net/net1). - H9 (medium-high): SAM/SYSTEM/SECURITY registry hives are saved to disk via
reg.exe save— SPECTRE's offline credential-theft step. Falcon:ProcessRollup2. - H10 (medium): An IIS worker process (
w3wp.exe) spawns a shell or the C# compiler — a general web-shell / dynamic-compilation RCE follow-on indicator covering all four initial-access CVEs. Falcon:ProcessRollup2. - H11 (medium): On Linux, the Specter rootkit LKM is loaded via an explicit
insmod/modprobe acpi_padinvocation, or the fraudulenthardware-monitor.servicesystemd unit is enabled. Falcon:ProcessRollup2. - H12 (medium-high): A root-context shell is spawned from a web-server or JVM parent process on Linux — the post-LPE follow-on indicator covering the six Linux privilege-escalation CVEs. Falcon:
ProcessRollup2. - H13 (high): A host contacts published UAT-10147/SPECTRE C2 IP or DNS infrastructure. Falcon:
NetworkConnectIP4/DnsRequest.
Attack chain
| Step | Action | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 | AI-assisted recon (PentestGPT autonomous scan-and-exploit, DeepAudit source-code scanning) against the 170,000-URL target list from the actor's own infrastructure | None — occurs entirely on attacker-controlled infrastructure, not victim telemetry | N8 — external threat-intel/ASM watch for the published C2/staging infrastructure reaching your perimeter |
| 2 | RCE via one of five 1-day CVEs: Zimbra (CVE-2022-27925), AjaxPro (CVE-2021-23758), Nacos (CVE-2021-29441/29442), or Telerik ViewState (CVE-2019-18935) — the latter via an AI-generated exploitation guide using leaked/known machineKey values from badsecrets | ProcessRollup2 — first host-visible moment: IIS worker/Java process spawning an unexpected child | Q11 (H10), Q16 (H12) / N1 |
| 3 | AI-generated Python automation (check_paths.py, deploy_implant.py, deploy_shell.py) diagnoses write access, drops the SPECTRE implant or an ASHX web shell, and confirms success via out-of-band webhook.site HTTP callbacks | DnsRequest/NetworkConnectIP4 to webhook.site; ProcessRollup2 for the PowerShell WriteAllBytes handler write | Q13, N4 |
| 4 | Windows: back.bat uses certutil to pull EfsPotato (renamed prcc1.rar), bai.bat, and QuasarRAT (renamed svchosts.exe) from staging infrastructure | ProcessRollup2 | Q2, Q4, Q5 |
| 5 | EfsPotato/Potato-family privilege escalation to SYSTEM via SeImpersonatePrivilege abuse | ProcessRollup2 | Q1 (H1) |
| 6 | Windows Defender exclusions added for inetsrv; BadIIS (dll.zip) and user.bat pulled via certutil and installed; appcmd list site recon | ProcessRollup2 | Q3 (H7), N5 |
| 7 | Rogue local admin + Remote Desktop Users account created (user.bat) for persistent RDP access | ProcessRollup2 (net/net1) | Q6 (H8) |
| 8 | Persistence: Windows scheduled task "Google Chrome Start" (highest privileges, at logon) / Linux fraudulent systemd unit hardware-monitor.service (Before=sysinit.target) | ScheduledTaskRegistered / ProcessRollup2 (systemctl) | Q4 (H3), Q15 (H11) |
| 9 | SPECTRE implant active: process injection (hollowing/EarlyBird/self-hollow), BYOVD EDR kill (RTCore64.sys/DBUtil_2_3.sys), credential theft (hive dump, Chrome/Edge, Credential Manager); Linux SPECTRE loads the Specter rootkit (acpi_pad.ko, ftrace hooks, magic-PID 31337 IPC) | PeFileWritten/NewExecutableWritten; ProcessRollup2 | Q7–Q10, Q14 (H5, H9); N6, N7 |
| 10 | Monetization/C2: BadIIS and the custom ASP.NET SeoEngineHandler poison search rankings and serve malicious JS to Vietnamese browser traffic; SPECTRE and BadIIS beacon to published C2 infrastructure | NetworkConnectIP4/DnsRequest | Q17, Q18 (H13) |
Gap: step 1 (attacker-side AI-driven recon/exploit-tooling) and the HTTP-layer details of steps 2–3 (the ViewState oracle logic, the web shell's X-ID: x9 / v=x9 auth-header check, the /api/v1/register and /api/v1/output SPECTRE C2 URI paths) are invisible to Falcon endpoint telemetry — Falcon does not parse HTTP request/response content. Close this gap with IIS/WAF/reverse-proxy access-log review (§7 native hunts).
Consolidated IOC Table
56 SHA256 hashes across two Talos-published IOC releases; full de-duplicated list also in the machine-readable appendix (§10). Domains flagged "generic-looking" carry medium confidence per the §2 verification note.
| Type | Value | Confidence | Action | Context | Expiry |
|---|---|---|---|---|---|
| ipv4 | 139.180.197.150 | high | detect | UAT-10147 open C2/staging directory (port 54321); shared across both IOC releases | 2027-02-26 |
| ipv4 | 18.140.163.186 | high | detect | UAT-10147 infrastructure (initial-access toolkit release) | 2027-02-26 |
| ipv4 | 27.124.2.46 | high | detect | SPECTRE/BadIIS infrastructure | 2027-02-26 |
| ipv4 | 27.124.2.48 | high | detect | SPECTRE/BadIIS infrastructure | 2027-02-26 |
| ipv4 | 27.124.2.52 | high | detect | SPECTRE/BadIIS infrastructure | 2027-02-26 |
| domain | adminapi.tippusoni.in | high | detect | Windows infection-chain staging server (back.txt/bai.txt/user.txt/dll.zip/svchosts.exe) | 2027-02-26 |
| domain | kl21177.com | high | detect | Secondary Windows staging server (prcc1.rar/dll.zip/user.bat) | 2027-02-26 |
| domain | js.jyzyps.com | high | detect | SEO-fraud JS payload host (vnnb.js, nb.js) | 2027-02-26 |
| domain | vn.mma888.cc | high | detect | SEO-fraud / BadIIS infrastructure | 2027-02-26 |
| domain | thceshi.healthsave.net | high | detect | SPECTRE/BadIIS infrastructure | 2027-02-26 |
| domain | vip8888vn.xyz | high | detect | SeoEngineHandler C2 (Vietnamese-targeting SEO fraud) | 2027-02-26 |
| domain | b.niupilao.vip | high | detect | SPECTRE/BadIIS infrastructure | 2027-02-26 |
| domain | vip.niupilao.vip | high | detect | SPECTRE/BadIIS infrastructure | 2027-02-26 |
| domain | udvyiwvfs.cyou | high | detect | SPECTRE/BadIIS infrastructure | 2027-02-26 |
| domain | www.xxxx.vip | medium | hunt | ⚠ generic-looking string; Talos-published but not independently discussed in narrative text — see §2 | 2026-11-26 |
| domain | spider.xxxx.com | medium | hunt | ⚠ generic-looking string; Talos-published but not independently discussed in narrative text — see §2 | 2026-11-26 |
| filepath | %TEMP%\RTCore64.sys / %TEMP%\DBUtil_2_3.sys | high | hunt | SPECTRE BYOVD vulnerable-driver staging (CVE-2019-16098 / CVE-2021-21551) | 2026-11-26 |
| filepath | C:\Windows\System32\drivers\etc\hosts:cache | high | hunt | NTFS ADS — observed SPECTRE C2-config storage location | 2026-11-26 |
| filepath (pattern) | [10 digits].[7 digits].dll | high | hunt | Reverse-shell DLL naming convention, CVE-2019-18935/Telerik exploitation | 2026-11-26 |
| filename | svchosts.exe | high | hunt | QuasarRAT masquerade (extra "s" vs. legitimate svchost.exe) | 2026-11-26 |
| filename | acpi_pad.ko (as a loaded/staged file outside the kernel's own module tree) | high | hunt | Specter Linux rootkit disguise name | 2026-11-26 |
| servicename | hardware-monitor.service | high | hunt | Specter rootkit fraudulent systemd persistence unit ("Hardware Performance Monitor", Before=sysinit.target) | 2026-11-26 |
| taskname | Google Chrome Start | high | hunt | Windows scheduled-task persistence for QuasarRAT/Gh0stCringe/SPECTRE | 2026-11-26 |
| http-header | X-ID: x9 (or query param v=x9) | high | hunt | Custom two-layer web shell auth token (WAF/access-log hunt only, not Falcon-visible) | 2026-11-26 |
| uri-path | /api/v1/register , /api/v1/output | high | hunt | SPECTRE Windows/Linux C2 HTTP POST endpoints (WAF/proxy-log hunt only) | 2026-11-26 |
| sha256 ×12 | see §10 machine-readable appendix | high | detect | UAT-10147 initial-access toolkit (EfsPotato/QuasarRAT/BadIIS release, source 01b) | 2027-02-26 |
| sha256 ×44 | see §10 machine-readable appendix | high | detect | SPECTRE/Specter/BadIIS toolkit release (source 02b) | 2027-02-26 |
Affected Surface & Telemetry Matrix
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Internet-facing Windows/IIS servers (Zimbra, AjaxPro, Telerik UI for ASP.NET AJAX, or any app on IIS) | Process execution, file-write, network, DNS (Falcon); IIS/WAF access logs (native) | Critical | Falcon has no HTTP-request visibility — the ViewState exploitation oracle and web-shell auth-header check are only visible in web-server/WAF logs |
| Internet-facing Linux servers (Nacos or any app reachable for the exploited CVEs) | Process execution, file-write, network, DNS (Falcon); auditd/journal logs (native) | Critical | Once the Specter rootkit is active, it hides its own process and kernel module from userland tools (and potentially from EDR sensor queries that rely on the same kernel APIs) via ftrace hooking — detection is strongest pre-load or via out-of-band integrity checks (§7) |
| Windows kernel / EDR sensor integrity | File-write telemetry for the two named vulnerable drivers; Microsoft vulnerable-driver blocklist enforcement (native, not Falcon telemetry) | Critical | Once RTCore64.sys/DBUtil_2_3.sys successfully loads and SPECTRE unlinks the EDR kernel callbacks, Falcon itself goes blind to subsequent process/thread/image-load events on that host for the remainder of the session — detection must land before or at the driver-load moment |
| Local Windows credential stores (SAM/SECURITY hives, Chrome/Edge login data, Windows Credential Manager) | Process execution (commandline-based detection) | High | Medium — SPECTRE's chromedump/vaultdump functions may execute in-process rather than spawning an external process, which would not appear in ProcessRollup2 at all; file-open telemetry (Q8) is an optional/premium data source in some Falcon sensor policies |
| DNS/network egress (all in-scope hosts) | DnsRequest, NetworkConnectIP4 | High | Low — well covered by Q17/Q18 while published infrastructure stays live; requires periodic IOC-freshness review |
ATT&CK Mapping
| Tactic | Technique ID | Technique Name | Observed Behavior |
|---|---|---|---|
| Initial Access | T1190 | Exploit Public-Facing Application | Zimbra (CVE-2022-27925), AjaxPro (CVE-2021-23758), Nacos (CVE-2021-29441/29442), Telerik ViewState (CVE-2019-18935) |
| Privilege Escalation | T1068 | Exploitation for Privilege Escalation | Linux LPE chain: CVE-2022-0995, CVE-2021-3156, CVE-2015-5287, CVE-2015-3246, CVE-2010-3904, CVE-2022-0847; Windows: RTCore64.sys/DBUtil_2_3.sys BYOVD driver exploitation |
| Privilege Escalation | T1134 | Access Token Manipulation | "Potato"-family tools (EfsPotato/GodPotato/JuicyPotato/RustPotato) abusing SeImpersonatePrivilege; SPECTRE steal_token/make_token/rev2self commands |
| Execution | T1059.003 / T1059.001 | Windows Command Shell / PowerShell | back.bat/bai.bat/user.bat batch scripts; PowerShell Defender-exclusion and web-shell-write commands |
| Execution | T1059.004 | Unix Shell | Linux LPE exploit execution, root shell spawned post-privesc |
| Defense Evasion | T1562.001 | Impair Defenses: Disable or Modify Tools | Windows Defender exclusions added for inetsrv directories; SPECTRE BYOVD unlinking of EDR kernel callbacks |
| Defense Evasion | T1014 | Rootkit | Specter Linux kernel-module rootkit hiding processes, itself, and network connections via ftrace hooking |
| Defense Evasion | T1027 / T1027.007 | Obfuscated/Encrypted Files; Dynamic API Resolution | SPECTRE per-string xorshift32 encryption, PEB hash-walk (DJB2) API resolution, randomized [10-digit].[7-digit].dll naming |
| Defense Evasion | T1070.006 | Timestomp | SPECTRE timestomp command (both Windows and Linux variants) |
| Defense Evasion | T1564.004 | Hide Artifacts: NTFS File Attributes (ADS) | SPECTRE C2 configuration stored in the hosts file's Alternate Data Stream |
| Defense Evasion | T1497 | Virtualization/Sandbox Evasion | SPECTRE weighted anti-sandbox scoring (Windows: process blocklist/RAM/CPU/disk/sleep-accel/hostnames; Linux: 8-factor equivalent), self-terminates at score >=50 |
| Persistence | T1053.005 | Scheduled Task | "Google Chrome Start" task, highest privileges, runs at every logon |
| Persistence | T1543.002 | Systemd Service | Fraudulent "hardware-monitor.service" unit, Before=sysinit.target (loads before security tooling) |
| Persistence | T1547.006 | Kernel Modules and Extensions | Specter rootkit loaded as acpi_pad.ko-disguised LKM |
| Persistence | T1136.001 / T1098 | Create Account: Local Account / Account Manipulation | Rogue local account added to Administrators and Remote Desktop Users groups |
| Persistence | T1505.003 | Web Shell | Two-layer in-memory-compiled web shell (X-ID/v=x9 auth); AI-generated ASHX web-shell deployment (sss.ashx/up.ashx) |
| Credential Access | T1003.002 | OS Credential Dumping: SAM | SPECTRE hashdump — SAM/SYSTEM/SECURITY hive save via RegSaveKeyA for offline extraction |
| Credential Access | T1555.003 / T1555.004 | Credentials from Web Browsers / Windows Credential Manager | SPECTRE chromedump (Chrome/Edge Login Data + Local State) and vaultdump (cmdkey /list) |
| Credential Access | T1056.001 | Keylogging | SPECTRE keylog_start/stop/dump commands |
| Collection | T1113 | Screen Capture | SPECTRE screenshot command |
| Discovery | T1082 / T1083 / T1057 / T1069 | System Info / File & Dir / Process / Permission Groups Discovery | AI-generated recon playbook (sysinfo, webroot enumeration, appcmd list site, icacls ACL checks, whoami /priv) |
| Command and Control | T1071.001 | Web Protocols | SPECTRE HTTP POST beacons to /api/v1/register and /api/v1/output on a hardcoded (string-encrypted) fallback C2 domain |
| Command and Control | T1102 | Web Service | Nacos-based asynchronous exfiltration sink; webhook.site used for AI-script OOB exploitation-confirmation callbacks |
| Command and Control | T1105 | Ingress Tool Transfer | certutil-based downloads of every stage (EfsPotato, QuasarRAT, BadIIS, SPECTRE, web shells) |
| Impact | T1584.001 / (non-ATT&CK: SEO fraud) | Compromise Infrastructure: Domains (adjacent) / Search-result poisoning | BadIIS MaaS module and custom SeoEngineHandler serve fabricated content to search crawlers and malicious JS to real Vietnamese users |
Native Audit-Log Hunts
These checks cover the HTTP-layer exploitation/web-shell activity and the post-rootkit visibility gap noted in §3/§5, none of which are reliably visible in standard Falcon endpoint telemetry.
| # | Hunt | Where | What to look for |
|---|---|---|---|
| N1 | IIS/WAF/reverse-proxy access-log review for ViewState exploitation | IIS logs, WAF/reverse-proxy logs in front of ASP.NET applications | HTTP 500 responses with body content indicating InvalidCastException (the AI-guide's documented RCE-success oracle, not a failure) on requests carrying an oversized __VIEWSTATE parameter; repeated malformed-ViewState probes preceding a 500 |
| N2 | Web-shell auth-header/parameter sweep | IIS/WAF access logs | Requests carrying an X-ID header or v query parameter with value x9 against any .ashx handler, especially sss.ashx/up.ashx |
| N3 | File integrity monitoring on IIS webroots | FIM agent / scheduled Get-FileHash sweep | New or modified .ashx/.aspx files outside a known deployment window, especially matching up.ashx/sss.ashx or containing Base64-encoded, reflection-loaded handler code |
| N4 | Outbound DNS/proxy log review for webhook.site | DNS logs, proxy/firewall logs | Any in-scope web server resolving or connecting to webhook.site — the consistent OOB-callback endpoint across all four AI-generated Python scripts. High legitimate-use base rate elsewhere in the org, but a server-tier host reaching it is anomalous and worth a hunt-only rule (deliberately not shipped as a CQL query here due to FP risk outside a server-only scope) |
| N5 | IIS site-inventory command review | Command-line/process audit logs, change-management ticket system | appcmd.exe list site /config /xml or list vdir executed outside a documented change window |
| N6 | Linux /proc vs. ps process-count integrity check | Scheduled shell script comparing ls /proc | grep -E '^[0-9]+$' | wc -l against independent process-enumeration sources (e.g., a kernel-level agent, container runtime process list) | A discrepancy indicates a hidden PID — Specter's rootkit_hide (signal 62) removes the target task_struct from the kernel PID list, making /proc/<pid> invisible to userland tools that rely on it |
| N7 | Linux lsmod vs. kernel module list cross-check | Scheduled comparison of lsmod output against /sys/module/ directory listing and, where available, a kernel-level/eBPF module-load audit trail independent of the linked-list Specter unlinks from | A module present in one source but not lsmod indicates the Specter rootkit hiding itself (signal 36); also check for acpi_pad appearing loaded when the host's ACPI/power-management configuration does not call for it |
| N8 | External attack-surface / threat-intel watch | ASM tooling, perimeter firewall/IDS logs, threat-intel feed ingestion | Any inbound scanning or probing from the published UAT-10147 IP infrastructure (§4/§10) reaching your internet-facing IIS/Linux servers — the 170,000-URL target list means broad, opportunistic exposure is the primary risk driver, not targeted selection |
CrowdStrike LogScale CQL Hunt Queries
Looks for: EfsPotato/GodPotato/JuicyPotato/RustPotato, or the renamed prcc1.rar/prcc2.rar, executing — UAT-10147's SeImpersonatePrivilege-abuse privilege-escalation step.
// HUNT: "Potato"-family privilege-escalation tool execution (EfsPotato/GodPotato/JuicyPotato/RustPotato or renamed prcc1/prcc2) // MITRE: T1068, T1134 // CONF: high // FP: low // COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: legitimate penetration-test/red-team engagements running these same public GitHub tools by their stock name #event_simpleName = ProcessRollup2 | FileName = /^(efspotato|godpotato|juicypotato|rustpotato)(\.exe)?$|^prcc[12]\.(exe|rar)$/i | table([@timestamp, aid, ComputerName, ParentBaseFileName, FileName, CommandLine, UserName], limit=200) | sort(@timestamp, order=desc)
Looks for: certutil.exe referencing the two known Windows-chain staging domains/IP in its command line.
// HUNT: certutil.exe download referencing published UAT-10147 staging infrastructure // MITRE: T1105 // CONF: high // FP: low // COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: none expected for these specific domains/IP; to hunt for NEW infrastructure broaden this to a generic certutil -urlcache -split -f pattern (higher FP, admin tooling also uses it) #event_simpleName = ProcessRollup2 | FileName = /^certutil(\.exe)?$/i | CommandLine = /(adminapi\.tippusoni\.in|kl21177\.com|139\.180\.197\.150)/i | table([@timestamp, aid, ComputerName, CommandLine, UserName, ParentBaseFileName], limit=200) | sort(@timestamp, order=desc)
Looks for: a PowerShell Add-MpPreference -ExclusionPath or reg add to the Defender exclusions key, targeting inetsrv. FP: legitimate IIS extension installers occasionally add scoped Defender exclusions.
// HUNT: Windows Defender exclusion added for System32\inetsrv / SysWOW64\inetsrv (BadIIS defense-evasion staging) // MITRE: T1562.001 // CONF: high // FP: medium // COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: legitimate IIS module/extension installers occasionally add scoped Defender exclusions during setup // TUNING: cross-check the source ComputerName/UserName against your change-management or patch-ticket system before treating a hit as malicious #event_simpleName = ProcessRollup2 | FileName = /^(powershell|reg)(\.exe)?$/i | CommandLine = /(ExclusionPath.*inetsrv|Exclusions.Paths.*inetsrv)/i | table([@timestamp, aid, ComputerName, FileName, CommandLine, UserName, ParentBaseFileName], limit=200) | sort(@timestamp, order=desc)
Looks for: the exact deceptive scheduled-task name UAT-10147 uses to run QuasarRAT/Gh0stCringe/SPECTRE at every logon with the highest privileges.
// HUNT: Scheduled task registered under the deceptive name "Google Chrome Start" // MITRE: T1053.005 // CONF: high // FP: low // COST: low // REQUIRES: ScheduledTaskRegistered // FALSE POSITIVES: none expected — this exact literal task name is not created by any legitimate Chrome installer or Windows component #event_simpleName = ScheduledTaskRegistered | TaskName = /^Google Chrome Start$/i | table([@timestamp, aid, ComputerName, TaskName, TaskExecutable, UserName], limit=200) | sort(@timestamp, order=desc)
Looks for: a process literally named svchosts.exe (plural) — the legitimate Windows filename is singular svchost.exe; this exact typosquat never ships natively.
// HUNT: Process named svchosts.exe (extra "s") — QuasarRAT payload masquerade // MITRE: T1036.005, T1105 // CONF: high // FP: low // COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: none expected — no legitimate Windows component or common third-party software ships a binary named svchosts.exe #event_simpleName = ProcessRollup2 | FileName = /^svchosts\.exe$/i | table([@timestamp, aid, ComputerName, ParentBaseFileName, FileName, CommandLine, ImageFileName, UserName], limit=200) | sort(@timestamp, order=desc)
Looks for: net/net1 adding a user and/or adding an account to Administrators or Remote Desktop Users — the user.bat persistence step. FP: legitimate IT provisioning also uses these commands.
// HUNT: Local account created and added to Administrators / Remote Desktop Users (user.bat persistence) // MITRE: T1136.001, T1098 // CONF: high // FP: medium // COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: legitimate IT onboarding/provisioning scripts also use net user and net localgroup commands // TUNING: correlate with a preceding Q1/Q2/Q3 hit on the same aid within a short window before treating as malicious; exclude known provisioning service accounts #event_simpleName = ProcessRollup2 | FileName = /^net1?(\.exe)?$/i | CommandLine = /(localgroup.*(Administrators|Remote Desktop Users).*\/add|user\s+\S+\s+\S+\s+\/add)/i | table([@timestamp, aid, ComputerName, CommandLine, UserName, ParentBaseFileName], limit=200) | sort(@timestamp, order=desc)
Looks for: reg.exe save against the SAM, SYSTEM, or SECURITY hives — SPECTRE's offline credential-theft step (equivalent to its internal RegSaveKeyA usage). FP: legitimate backup/AD-recovery tooling also runs this.
// HUNT: reg.exe save against SAM/SYSTEM/SECURITY hives (SPECTRE hashdump / offline NT-hash extraction staging) // MITRE: T1003.002 // CONF: high // FP: medium // COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: legitimate backup or AD-recovery/DR tooling also runs reg save against these hives on a schedule // TUNING: allow-list known backup/DR service accounts and their scheduled maintenance windows; treat any hit on an internet-facing IIS/web-adjacent host as high priority regardless #event_simpleName = ProcessRollup2 | FileName = /^reg(\.exe)?$/i | CommandLine = /save.*HKLM.(SAM|SYSTEM|SECURITY)/i | table([@timestamp, aid, ComputerName, CommandLine, UserName, ParentBaseFileName], limit=200) | sort(@timestamp, order=desc)
Looks for: a process other than chrome.exe/msedge.exe opening the browser's "Login Data" file — SPECTRE's chromedump function. FP: legitimate credential-migration/backup tools do the same.
// HUNT: Non-browser process opening Chrome/Edge "Login Data" credential store (SPECTRE chromedump) // MITRE: T1555.003 // CONF: medium // FP: medium // COST: low // REQUIRES: FileOpenInfo — validate this event is enabled for your sensor policy; file-open telemetry is an optional/premium data source in some Falcon configurations // FALSE POSITIVES: legitimate password-migration or endpoint-backup tooling also opens this file from a non-browser process; chrome.exe/msedge.exe opening their own store is expected and must be filtered at triage (CQL/LogScale regex has no negative-lookahead support, so the exclusion is not done in-query) // TUNING: baseline your approved credential-migration/backup tools and exclude by ContextBaseFileName before promoting; correlate with a Q1/Q7 hit on the same aid; at triage, drop rows where ContextBaseFileName is chrome.exe or msedge.exe #event_simpleName = FileOpenInfo | TargetFileName = /\\(Google\\Chrome|Microsoft\\Edge)\\User Data\\.*\\Login Data$/i | table([@timestamp, aid, ComputerName, TargetFileName, ContextBaseFileName, UserName], limit=200) | sort(@timestamp, order=desc)
Looks for: cmdkey.exe /list — SPECTRE's LSASS-free Credential Manager enumeration. FP: helpdesk/IT troubleshooting commonly runs this exact command.
// HUNT: cmdkey.exe /list execution (SPECTRE vaultdump — Windows Credential Manager enumeration) // MITRE: T1555.004 // CONF: medium // FP: high // COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: helpdesk/IT troubleshooting and some backup-credential tooling run this exact command routinely // TUNING: this is too noisy to alert on alone — correlate with a Q1/Q7/Q10 hit on the same aid within a short window before triage #event_simpleName = ProcessRollup2 | FileName = /^cmdkey(\.exe)?$/i | CommandLine = /\/list/i | table([@timestamp, aid, ComputerName, CommandLine, ParentBaseFileName, UserName], limit=200) | sort(@timestamp, order=desc)
Looks for: the two named vulnerable kernel drivers SPECTRE uses for its EDR-killing BYOVD attack, written to disk.
// HUNT: RTCore64.sys or DBUtil_2_3.sys written to disk (SPECTRE BYOVD EDR-killer staging, CVE-2019-16098 / CVE-2021-21551) // MITRE: T1068, T1562.001 // CONF: high // FP: low // COST: low // REQUIRES: PeFileWritten / NewExecutableWritten // FALSE POSITIVES: none expected for a fresh write on an endpoint that does not run legitimate MSI Afterburner (RTCore64.sys) or Dell BIOS-update tooling (DBUtil_2_3.sys) — treat ANY hit on a server as a priority-1 EDR-blinding event #event_simpleName = /PeFileWritten|NewExecutableWritten/ | TargetFileName = /\\(RTCore64|DBUtil_2_3)\.sys$/i | table([@timestamp, aid, ComputerName, TargetFileName, SHA256HashData, ContextBaseFileName], limit=200) | sort(@timestamp, order=desc)
Looks for: w3wp.exe spawning a command/script interpreter or csc.exe — the first host-visible moment of Zimbra/AjaxPro/Nacos/Telerik ViewState exploitation or the CodeDomProvider-based web shell's dynamic compilation. FP: some legitimate ASP.NET apps shell out; first-request JIT compilation also spawns csc.exe.
// HUNT: IIS worker process (w3wp.exe) spawning a shell/script interpreter or the C# compiler // MITRE: T1190, T1059, T1505.003 // CONF: high // FP: medium // COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: a small number of legitimate ASP.NET applications intentionally shell out; ASP.NET's own first-request dynamic compilation can spawn csc.exe // TUNING: baseline known-legitimate w3wp.exe child processes per application pool for 7-14 days before promoting to a block-capable IOA; exclude AppPool identities tied to known build/CI-integrated web apps #event_simpleName = ProcessRollup2 | ParentBaseFileName = /^w3wp\.exe$/i | FileName = /^(cmd|powershell|pwsh|cscript|wscript|csc|mshta|rundll32)(\.exe)?$/i | table([@timestamp, aid, ComputerName, ParentBaseFileName, FileName, CommandLine, UserName], limit=200) | sort(@timestamp, order=desc)
Looks for: a DLL matching the [10 digits].[7 digits].dll naming pattern — the distinctive artifact of reverse-shell payloads dropped via the Telerik UI ViewState exploitation chain.
// HUNT: Reverse-shell DLL matching the [10-digit].[7-digit].dll naming convention (CVE-2019-18935 / Telerik exploitation) // MITRE: T1505.003, T1027 // CONF: high // FP: low // COST: low // REQUIRES: PeFileWritten / NewExecutableWritten // FALSE POSITIVES: none expected — this exact 10-digit-dot-7-digit naming is not a standard .NET temp-file or ASP.NET compilation-cache convention #event_simpleName = /PeFileWritten|NewExecutableWritten/ | TargetFileName = /.\d{10}\.\d{7}\.dll$/i | table([@timestamp, aid, ComputerName, TargetFileName, SHA256HashData, ContextBaseFileName], limit=200) | sort(@timestamp, order=desc)
Looks for: PowerShell's [IO.File]::WriteAllBytes writing an .ashx file — the AI-generated deploy_shell.py script's two-step web-shell drop technique. FP: legitimate deployment/config-management tooling occasionally writes handlers this way.
// HUNT: PowerShell [IO.File]::WriteAllBytes writing a .ashx file into an IIS webroot (AI-generated web-shell deploy script) // MITRE: T1505.003, T1140 // CONF: medium // FP: medium // COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: legitimate deployment/config-management scripts occasionally write .ashx handlers using the same WriteAllBytes technique // TUNING: correlate with a preceding w3wp.exe-parented hit (Q11) or a recent exploitation-window alert before treating as malicious; exclude known CI/CD deployment service accounts #event_simpleName = ProcessRollup2 | FileName = /^powershell(\.exe)?$/i | CommandLine = /WriteAllBytes.*\.ashx/i | table([@timestamp, aid, ComputerName, CommandLine, ParentBaseFileName, UserName], limit=200) | sort(@timestamp, order=desc)
Looks for: an explicit insmod/modprobe acpi_pad invocation — the legitimate acpi_pad module is normally auto-loaded by the kernel at boot, not manually invoked by name, so an explicit invocation is itself the anomaly.
// HUNT: Manual insmod/modprobe invocation naming acpi_pad (Specter Linux rootkit disguise) // MITRE: T1014, T1547.006 // CONF: medium // FP: low // COST: low // REQUIRES: ProcessRollup2 on Linux hosts // FALSE POSITIVES: environments with custom ACPI/power-management tooling that manually reloads this module by name (rare) #event_simpleName = ProcessRollup2 | FileName = /^(insmod|modprobe)$/i | CommandLine = /acpi_pad/i | table([@timestamp, aid, ComputerName, CommandLine, ParentBaseFileName, UserName], limit=200) | sort(@timestamp, order=desc)
Looks for: systemctl enable/start for the fraudulent hardware-monitor.service unit that loads Specter before security tooling initializes (Before=sysinit.target).
// HUNT: systemd service enabled/started for the Specter rootkit's fraudulent "hardware-monitor.service" unit // MITRE: T1543.002, T1036.005 // CONF: medium // FP: medium // COST: low // REQUIRES: ProcessRollup2 on Linux hosts // FALSE POSITIVES: a generically-named "hardware monitor" service could coincidentally exist in some environments' custom tooling // TUNING: verify the underlying unit file's ExecStart binary path and the loaded kernel module against the legitimate acpi_pad.ko location under /lib/modules/ before treating a hit as malicious #event_simpleName = ProcessRollup2 | FileName = /^systemctl$/i | CommandLine = /(enable|start).*hardware-monitor/i | table([@timestamp, aid, ComputerName, CommandLine, UserName], limit=200) | sort(@timestamp, order=desc)
Looks for: a shell running as root whose parent is a web-server or JVM process — the post-privilege-escalation follow-on indicator covering the six Linux LPE CVEs (CVE-2022-0995, CVE-2021-3156, CVE-2015-5287, CVE-2015-3246, CVE-2010-3904, CVE-2022-0847). FP: some legitimate wrapper scripts shell out from these parents.
// HUNT: Root-context shell spawned from a web-server/JVM parent process (post-LPE follow-on) // MITRE: T1190, T1068, T1059.004 // CONF: high // FP: medium // COST: low // REQUIRES: ProcessRollup2 on Linux hosts // FALSE POSITIVES: some legitimate application health-check/wrapper scripts shell out from these parents; root-context is the key discriminator since these services rarely run as root in a hardened deployment // TUNING: exclude known service-management wrapper scripts by CommandLine pattern; expected to be rare if the web server process itself is not configured to run as root #event_simpleName = ProcessRollup2 | ParentBaseFileName = /^(httpd|nginx|java|tomcat|catalina)$/i | FileName = /^(sh|bash|dash)$/i | UserName = /^root$/i | table([@timestamp, aid, ComputerName, ParentBaseFileName, FileName, CommandLine, UserName], limit=200) | sort(@timestamp, order=desc)
Looks for: outbound connections to any of the 5 published UAT-10147/SPECTRE C2 IPs across both Talos IOC releases.
// HUNT: Outbound connection to published UAT-10147/SPECTRE C2 infrastructure IP addresses // MITRE: T1071.001, T1105 // CONF: high // FP: low // COST: low // REQUIRES: NetworkConnectIP4 // FALSE POSITIVES: none expected — re-verify each IP is still live/attacker-controlled before enabling a block action, as shared hosting providers can reassign IPs over time #event_simpleName = NetworkConnectIP4 | in(RemoteAddressIP4, values=["139.180.197.150","18.140.163.186","27.124.2.46","27.124.2.48","27.124.2.52"]) | table([@timestamp, aid, ComputerName, RemoteAddressIP4, RemotePort, ContextBaseFileName, CommandLine], limit=max) | sort(@timestamp, order=desc)
Looks for: DNS resolution of any of the 9 published high-confidence C2/staging domains across both Talos IOC releases. The two "generic-looking" domains (§2/§4) are deliberately excluded from this block-grade query; hunt them separately via §10.
// HUNT: DNS resolution of published UAT-10147/SPECTRE/BadIIS C2 domains // MITRE: T1071.001 // CONF: high // FP: low // COST: low // REQUIRES: DnsRequest // FALSE POSITIVES: none expected for these specific domains; re-verify liveness periodically #event_simpleName = DnsRequest | DomainName = /^(adminapi\.tippusoni\.in|kl21177\.com|js\.jyzyps\.com|vn\.mma888\.cc|thceshi\.healthsave\.net|vip8888vn\.xyz|b\.niupilao\.vip|vip\.niupilao\.vip|udvyiwvfs\.cyou)$/i | table([@timestamp, aid, ComputerName, DomainName, ContextProcessId], limit=200) | sort(@timestamp, order=desc)
CrowdStrike Custom IOA Recommendations
| IOA Name | Field Patterns | Benign Exclusions | Deployment Path |
|---|---|---|---|
| IOA-1 · Potato-family tool execution (Q1) | FileName matching efspotato/godpotato/juicypotato/rustpotato/prcc1/prcc2 | Authorized pentest/red-team engagement windows (allow-list by change ticket) | Endpoint Security → Custom IOA → Process Creation, Detect |
| IOA-2 · certutil to known staging infra (Q2) | FileName is certutil.exe; CommandLine containing adminapi.tippusoni.in / kl21177.com / 139.180.197.150 | None expected | Custom IOA → Process Creation, Detect+Block |
| IOA-3 · "Google Chrome Start" scheduled task (Q4) | TaskName = "Google Chrome Start" | None expected | Custom IOA → Scheduled Task, Detect+Block |
| IOA-4 · svchosts.exe execution (Q5) | FileName = svchosts.exe | None expected | Custom IOA → Process Creation, Detect+Block |
| IOA-5 · BYOVD driver drop (Q10) | TargetFileName matching RTCore64.sys / DBUtil_2_3.sys | Hosts running legitimate MSI Afterburner or Dell BIOS-update tooling (rare on servers) | Custom IOA → File Write, Detect+Block |
| IOA-6 · [10-digit].[7-digit].dll drop (Q12) | TargetFileName matching the digit-dot-digit .dll pattern | None expected | Custom IOA → File Write, Detect+Block |
| IOA-7 · Known C2 IP contact (Q17) | RemoteAddressIP4 in published C2 IP set | None expected; re-verify liveness before enabling Block | Custom IOA → Network Connection, Detect+Block |
| IOA-8 · Known C2 domain resolution (Q18) | DomainName in published high-confidence domain set | None expected; excludes the two "generic-looking" domains by design | Custom IOA → DNS Request, Detect+Block |
// TUNING: line are complete in your tenant.Machine-Readable IOC Appendix
Every value below traces to a saved source snapshot in UAT10147-SPECTRE-Hunt-sources/ — see §18.
type,value,action,severity,expiration,description,tags ipv4,139.180.197.150,detect,critical,2027-02-26,UAT-10147 open C2/staging directory,campaign:UAT10147 ipv4,18.140.163.186,detect,high,2027-02-26,UAT-10147 infrastructure,campaign:UAT10147 ipv4,27.124.2.46,detect,high,2027-02-26,SPECTRE/BadIIS infrastructure,campaign:UAT10147 ipv4,27.124.2.48,detect,high,2027-02-26,SPECTRE/BadIIS infrastructure,campaign:UAT10147 ipv4,27.124.2.52,detect,high,2027-02-26,SPECTRE/BadIIS infrastructure,campaign:UAT10147 domain,adminapi.tippusoni.in,detect,high,2027-02-26,Windows infection-chain staging,campaign:UAT10147 domain,kl21177.com,detect,high,2027-02-26,Secondary Windows staging server,campaign:UAT10147 domain,js.jyzyps.com,detect,high,2027-02-26,SEO-fraud JS payload host,campaign:UAT10147 domain,vn.mma888.cc,detect,high,2027-02-26,SEO-fraud / BadIIS infrastructure,campaign:UAT10147 domain,thceshi.healthsave.net,detect,high,2027-02-26,SPECTRE/BadIIS infrastructure,campaign:UAT10147 domain,vip8888vn.xyz,detect,high,2027-02-26,SeoEngineHandler C2,campaign:UAT10147 domain,b.niupilao.vip,detect,high,2027-02-26,SPECTRE/BadIIS infrastructure,campaign:UAT10147 domain,vip.niupilao.vip,detect,high,2027-02-26,SPECTRE/BadIIS infrastructure,campaign:UAT10147 domain,udvyiwvfs.cyou,detect,high,2027-02-26,SPECTRE/BadIIS infrastructure,campaign:UAT10147 domain,www.xxxx.vip,hunt,medium,2026-11-26,generic-looking – hunt not block; see Source Review,campaign:UAT10147 domain,spider.xxxx.com,hunt,medium,2026-11-26,generic-looking – hunt not block; see Source Review,campaign:UAT10147 sha256,175e83adc721cd7d634ebd2c63fb8d2404c009067bc7719ef02c5d1f9d81e9a1,detect,high,2027-02-26,UAT-10147 initial-access toolkit,campaign:UAT10147 sha256,1f0496ad392b5b9edf9e59a56af4d8e17638ddbb12e086f104d9a0f316ad59a1,detect,high,2027-02-26,UAT-10147 initial-access toolkit,campaign:UAT10147 sha256,37cabc04da36e710dd4aee8609ab7553c039a54dd085460854e9ddb49b0e7032,detect,high,2027-02-26,UAT-10147 initial-access toolkit,campaign:UAT10147 sha256,50232092004b9ad335e1e72e3a6dcfde93c4470007ddfcc637e6e5f899f68be0,detect,high,2027-02-26,UAT-10147 initial-access toolkit,campaign:UAT10147 sha256,73b272612cec9e03a7e2f7516ece600fb1b45b719fa9d93b382ed25ec314e5c0,detect,high,2027-02-26,UAT-10147 initial-access toolkit,campaign:UAT10147 sha256,9fa27b231502d6d33441ab54227da50cbd325847ce2272f9c0e79b4ea873e432,detect,high,2027-02-26,UAT-10147 initial-access toolkit,campaign:UAT10147 sha256,cfce59111338701b2990be9aadc80166ac0618cb57483d6a065f1e2526a34494,detect,high,2027-02-26,UAT-10147 initial-access toolkit,campaign:UAT10147 sha256,fbe9c6052d7261bd252322e155d86bd370340f1fbb2b0a1e9c7b444f6275614a,detect,high,2027-02-26,UAT-10147 initial-access toolkit,campaign:UAT10147 sha256,00892f276299a13721642e8a9bcbcb949a658547c6c8271866a1997b79f1e5c5,detect,high,2027-02-26,UAT-10147 initial-access toolkit,campaign:UAT10147 sha256,23a83c6bbdd7d6c09a5187338065d15f2a90a252772813cba83b9818aa56cef7,detect,high,2027-02-26,UAT-10147 initial-access toolkit,campaign:UAT10147 sha256,8280502c2c6902e61fc4c02a9a81b4720688449a5bca3d89dbd1e2edd507c69a,detect,high,2027-02-26,UAT-10147 initial-access toolkit,campaign:UAT10147 sha256,d190b349d791267a9583ba9f4a1ab0e4199d1a3abfd4dae514ed5def0754ba94,detect,high,2027-02-26,UAT-10147 initial-access toolkit,campaign:UAT10147 sha256,008f28989917a9712657de5675fc024b65cb27536734e9b54ea6c3af00ea70f2,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,11ccfdfb0dfe782ba0eeabaa8e65619a792f9258476a072b774ef19a5240b944,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,1c2edfb1b280fdc570591c88da5b1adbd249be6b8cc306a42525a515adaf73e8,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,21274d668e28b01172fa326f42e396b825708ddc2336ae388d6729627c525775,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,43124b72616ef38b0c8a07b167e971b0e4479626fb5ef2303b2ed993e21f6c4c,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,50d88f3d8f91f18195f1e9948cf6b47d69d7e19226957b1e7e3b2e4bd7c4fef4,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,59a386b75b84f137c4e17c37e3430fc93c0184102b3fbdfe649cef2e0335d85b,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,684e7ed556dcc9e2fe24fcfd73e6b9c29d7126584f87c5331c2607d39e29329f,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,76df454fe87620dd59efb483a56a8b573c7d16207635cf2616a67e25dab57779,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,77cce6576f93961651133b543948ea3853cc2f06b8c3fd523f6858d6d18ad775,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,830c6ca21a7da0eed436f8371c8a86baa62ab857a5478a222dd3189645d4d084,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,91d00ca46d1013c031aa8ff2e54b7b3496bac78f6147842766bffd4d32a2e042,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,7565a5bc56fcd94c7f52cf7428747cd4f52d0d3b485900d3d9b06b470ccba23b,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,b74beab9dac9ee7853b5e846eec6f778db01867b49f64d6be259ea9e19006121,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,bfbd1aa2c0ace1575e86dc5cedc0754e4ae4aae97e70ac9f0523a2e8e8b22ed9,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,c88dab534081650d5a385f9bc5c61eced41b4e9fe63ace6173aa536c4aaffa67,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,cf0a6353f1fccf63fca02ed41eafd3da8d55f77b8b4c45666a37fa3cdc33da55,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,41f1514ad52c870bc4b51291cb939067e8ace23ec308419253ee0a2497bf2e21,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,dd4c16c65513c3eb66691f87d5bb5595d38554395ec89be2b9e325e013ef53d5,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,dee976f262498184d746cc8305cc9e6905ad762c661df8d7daec120f14060b41,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,2e9f10f5cc9fb5c9f935ee78a21de70168e398b7a47db54373a5dcb19c485398,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,e315f955a9b44a9c875d2e47f2a91e9e77043bd553ad616ada38eaf669d44b2e,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,58725b8e592435026928c39622f41b7ad4f4dc62e353eb459c3b4858eafd9e82,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,544a7d9d4de3904ad35e6cc87f34cb556fda722c3d3cae1a6334645f1a950cc7,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,9a8e9d587b570d4074f1c8317b163aa8d0c566efd88f294d9d85bc7776352a28,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,722bd55e1496cb614f4f365a4203da6166c637f2c6b9ec0da3844637bc6e9e9d,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,0345406e85aa7759c0af0372c23de0c5f3e9b6d53e970405e5c168f55c51a7e0,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,23a7adda56e2e5519e01f57f16f99e4be611aac4fa908f2ee2d99e3d96e14865,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,9619259c1ea9b1c6b8279fdb761018b14a41acc94f67f1469bf68bf393b4ba74,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,f07d869ddd17d4359e26da43574d0d07987b500a390196b72b3c1747a4cbb3bf,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,d0da3be9de8e7068a65247b8195d73e88f454820e13c1de62675e1f845d6fabf,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,0f56c703e9b7ddeb90646927bac05a5c6d95308c8e13b88e5d4f4b572423e036,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,35c960bda30ceeb22216fad7776b43ecf44aaccf2ff7f600f91a1afb49a8a43c,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,7172ebfb4e96e3b0bff59e87f670c5512144d445b276746c8c78593272720ebf,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,b02664c71d1a40760ff6eb253d1a9022d93262698d528d95e8983bf848b8827b,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,dbe956ae1135e81ae06220393ee80caacc62006295a1fb26e87f048a7a78b81b,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,4bbba075f56ee15760b1397100a82f2c7425b866cf1a35684fda5b712783f97b,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,1c70b2a55b6f3a3382f40fe15293b609d047103b0c6c7da0049f7c0e365ea880,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,fc54b68f0a375600c8ab23d894b56837db287b32209c0a455fb439a780593c80,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,b0c1c3b806a60807854173f2199ba49baf5c2729051b14e4725cb90cfc755519,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,089b19f7760a53272f580432460dc959cbb8ffb87bde43152795ff5d893debdd,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,1fc83b41d201bfbc4db94e332e0c770be9d74591d9817c1b938ccdf17c7a48a9,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,fea09e46f6adf23aa17c56faa14d19168b5417ed90d7b2b36f2c8dd5f6014ea7,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147 sha256,061b765659bf24b62d242d4f8ca9a9884037e186714517509a8f48b54e1123a0,detect,high,2027-02-26,SPECTRE/Specter/BadIIS toolkit,campaign:UAT10147
Scheduled task: Google Chrome Start (Windows, highest privileges, at logon)
QuasarRAT: svchosts.exe (extra "s")
BYOVD drivers: %TEMP%\RTCore64.sys ; %TEMP%\DBUtil_2_3.sys
SPECTRE C2 ADS: C:\Windows\System32\drivers\etc\hosts:cache
Reverse-shell DLL pattern: [10 digits].[7 digits].dll
Windows privesc renamed: prcc1.rar, prcc2.rar (EfsPotato)
Windows staging paths: C:\ProgramData\dll.zip ; C:\ProgramData\user.bat
Web shell auth: HTTP header X-ID: x9 OR query param v=x9
SPECTRE C2 URIs: /api/v1/register ; /api/v1/output
Linux rootkit module: acpi_pad.ko (disguised)
Linux fraudulent service: hardware-monitor.service (Before=sysinit.target)
Linux rootkit IPC: kill() to PID 31337 (0x7A69), signals 35/36/37/62
ASHX web shell files: sss.ashx ; up.ashx
Web shell dev path: C:\Users\dajiba\Desktop\phantom-v2\data\arsenal\webshells\sss.ashx
BadIIS PDB strings: demo.pdb ; service.pdb (x\u795e-branded build tree)
Staging URLs (Windows chain): https://adminapi.tippusoni.in/4/pr.exe, /4/prcc2.txt, /4/prcc2.rar, /4/dll.zip,
/4/user.txt, /4/back.txt, /4/bai.txt, /4/svchosts.exe, /5/pr.exe, /5/bai.txt,
/5/svchosts.exe ; https://kl21177.com/1/prcc1.rar, /1/dll.zip, /1/user.bat ;
http://139.180.197.150:54321/4/pr.exe, /4/bai.txt, /4/svchosts.exe
SEO-fraud JS payloads: https://js.jyzyps.com/js/vnnb.js , /js/nb.js
Actor: UAT-10147 (Chinese-speaking, financially motivated — Cisco Talos)
Implants: SPECTRE (Windows + Linux cross-platform C2, C, Havoc-derived on Windows)
Specter (Linux kernel-module rootkit, loaded by SPECTRE, disguised as acpi_pad.ko)
SEO fraud: BadIIS (MaaS IIS module) ; custom ASP.NET "SeoEngineHandler" (Vietnamese targeting)
Commodity tools: QuasarRAT, Gh0stCringe (Go-loader shellcode), Meterpreter, Noodle RAT (Type 0x03A2 ELF)
Privesc tools: EfsPotato, GodPotato, JuicyPotato, RustPotato
AI tooling: PentestGPT (autonomous scan-and-exploit), DeepAudit (AI source-code vuln scanning),
AI-generated ViewState RCE guide + check_paths.py / deploy_implant.py / deploy_shell.py / exfil.py
Exploit CVEs: CVE-2022-27925 (Zimbra), CVE-2021-23758 (AjaxPro), CVE-2021-29441/29442 (Nacos),
CVE-2019-18935 (Telerik UI ViewState)
Linux LPE CVEs: CVE-2022-0995, CVE-2021-3156 (Baron Samedit), CVE-2015-5287, CVE-2015-3246,
CVE-2010-3904, CVE-2022-0847 (Dirty Pipe)
BYOVD CVEs: CVE-2019-16098 (MSI RTCore64.sys), CVE-2021-21551 (Dell DBUtil_2_3.sys)
Talos coverage: ClamAV: Py.Loader.Tool-10060293-1/2, Win.Malware.Generic-10060228-0/-10060235-0/-10060218-0/
-9883082-0/-10060252-0/-10060220-0, Win.Loader.Downloader-10060287-1, Win.Malware.BadPotato-10060230-0,
Win.Exploit.Marte-10033857-0, Unix.Rootkit.Malware-10060258-0, Unix.Rootkit.Spectre-10060260-0,
Win.Tool.GodPotato-10019688-1, Win.Tool.juicypotato-10041758-0, Win.Malware.BadIIS-10059985-0,
Win.Malware.Ulise-10056576-0, Unix.Backdoor.Msfvenom-10012672-0, Win.Loader.BadiisSet-10060291-1,
Asp.Rootkit.Badiis-10060290-1, Unix.Trojan.Backdoor-6678692-0
SNORT SIDs: 1:66690, 1:66688, 1:66689, 1:66696, 1:66697, 1:301548
# Confirm patch status for the four initial-access CVEs
# Zimbra Collaboration Suite: version fixes CVE-2022-27925
# AjaxPro: version fixes CVE-2021-23758 deserialization
# Alibaba Nacos: version fixes CVE-2021-29441 / CVE-2021-29442
# Telerik UI for ASP.NET AJAX: version fixes CVE-2019-18935
# ASP.NET machineKey exposure check
# Confirm validationKey/decryptionKey are NOT the framework default and do NOT
# appear in the public "badsecrets" known/leaked-key database
# https://github.com/blackhillsinfosec/badsecrets
# Linux LPE patch check (run on each server)
# Confirm kernel/sudo/ABRT/libuser versions post-date:
# CVE-2022-0995, CVE-2021-3156, CVE-2015-5287, CVE-2015-3246, CVE-2010-3904, CVE-2022-0847
# Microsoft vulnerable-driver blocklist check (PowerShell, Windows)
Get-CimInstance -query "SELECT * FROM Win32_PnPSignedDriver" |
Where-Object { $_.DeviceName -match "RTCore64|DBUtil" }
# Confirm HVCI / Microsoft's vulnerable driver blocklist is ENABLED and current:
Get-CimInstance -Namespace root\Microsoft\Windows\DeviceGuard -ClassName Win32_DeviceGuard |
Select-Object VirtualizationBasedSecurityStatus, CodeIntegrityPolicyEnforcementStatus
# Linux kernel module signature enforcement check
cat /proc/sys/kernel/tainted
grep -r "CONFIG_MODULE_SIG_FORCE" /boot/config-$(uname -r)
Detection Validation Gates
| Gate | Requirement |
|---|---|
| Telemetry ready | Confirm ProcessRollup2, PeFileWritten/NewExecutableWritten, ScheduledTaskRegistered, NetworkConnectIP4, and DnsRequest are flowing for every in-scope Windows/IIS and Linux host; confirm FileOpenInfo is enabled in your sensor policy before relying on Q8 |
| Benign baseline | Run Q3, Q6, Q7, Q9, Q11, Q13, Q15, and Q16 in hunt-only mode for at least 7–14 days to capture legitimate admin/deployment/backup activity on the in-scope fleet before writing exclusions |
| Positive tests | Lab-verify Q4 (register a test scheduled task literally named "Google Chrome Start" in a sandbox), Q10 (drop a renamed, non-executing copy of a same-named test file to a lab %TEMP%), and Q14 (invoke modprobe acpi_pad in an isolated Linux VM) each return a row before relying on them in production |
| Promotion | Promote IOA-1 through IOA-8 (§9) only after the above; keep Q3, Q6–Q9, Q11, Q13–Q16 as tuned hunt queries until their FP-medium/high exclusions are baselined |
Hardening — Tiered & Deployable
UAT-10147's entire attack chain begins with one of four unpatched 1-day CVEs (Windows/IIS) or a chain of Linux LPE CVEs. Patching removes initial access outright. The BYOVD EDR-killer and Linux rootkit are the two controls that most directly protect your detection capability itself — get those in place even if patching lags.
- Patch/upgrade Zimbra Collaboration Suite, AjaxPro, Alibaba Nacos, and Telerik UI for ASP.NET AJAX to versions that fix CVE-2022-27925, CVE-2021-23758, CVE-2021-29441/29442, and CVE-2019-18935 respectively — M1051 (Update Software). Closes every confirmed initial-access vector in this campaign.
- Rotate ASP.NET
machineKeyvalidationKey/decryptionKey values on any application using auto-generated or default keys, and check them against the publicbadsecretsknown/leaked-key database — ⚠ best-practice, no single formal CIS/MS-Baseline control number covers ViewState key hygiene specifically; Microsoft's own ASP.NET machineKey guidance is the authoritative source. The AI-generated exploitation guide Talos recovered states the entire ViewState RCE chain depends on this exposure. - Enable/verify Microsoft's vulnerable-driver blocklist (HVCI or the standalone driver blocklist policy) fleet-wide — M1038 (Execution Prevention). Directly blocks RTCore64.sys and DBUtil_2_3.sys from loading, neutralizing SPECTRE's EDR-killing capability before it can execute.
- Patch Linux LPE-vulnerable components (kernel, sudo, ABRT, libuser) to versions post-dating CVE-2022-0995, CVE-2021-3156, CVE-2015-5287, CVE-2015-3246, CVE-2010-3904, and CVE-2022-0847 — M1051.
- Enforce Linux kernel module signature verification (
CONFIG_MODULE_SIG_FORCEor Secure-Boot-tied lockdown mode) — M1045 (Code Signing), the closest Linux-side control equivalent. Blocks the unsigned Specter rootkit LKM from loading regardless of the disguise name used. - Restrict SeImpersonatePrivilege / reduce IIS AppPool identity privileges to the minimum required, and prefer newer app pool identity models where the Potato-family token-impersonation techniques are less effective — M1026 (Privileged Account Management).
- Enable Credential Guard and LSA Protection (RunAsPPL) fleet-wide — M1043 (Credential Access Protection). Raises the cost of SPECTRE's credential-theft functions even though the SAM/SECURITY hive-save technique (Q7) does not require live LSASS access.
- Deploy Q1–Q18 as scheduled searches, with FP-medium/high queries (Q3, Q6–Q9, Q11, Q13–Q16) in detect-only mode pending the tuning baseline in §11.
- File Integrity Monitoring on IIS webroots for new/modified
.ashx/.aspxhandlers — M1022 (Restrict File and Directory Permissions) combined with a FIM control.
- Establish a formal external attack-surface management (ASM) and vulnerability-scanning program for internet-facing web servers — M1016 (Vulnerability Scanning). UAT-10147's 170,000-URL target list demonstrates that broad, automated, AI-assisted scanning of exposed infrastructure is now a standing background threat, not an occasional event.
- Deploy Linux runtime integrity/eBPF-based rootkit detection (e.g., kernel module allow-listing, eBPF-based process/module observability that does not rely solely on the same kernel data structures a rootkit can unlink from) — ⚠ best-practice, no single formal CIS benchmark line item covers eBPF-based rootkit detection specifically; this is an architectural investment beyond baseline auditd.
- Extend application allow-listing (WDAC on Windows, package/binary allow-listing on Linux) to all internet-facing web-application server roles — M1038.
- Formalize an ASP.NET/IIS secure-configuration baseline (machineKey rotation cadence, ViewState MAC enforcement, restricted AppPool identities) as a recurring configuration-compliance check, not a one-time fix — M1041 (Encrypt Sensitive Information) combined with configuration management.
Deployable Playbooks
Playbook 1 — Enable Microsoft's vulnerable-driver blocklist (blocks SPECTRE's BYOVD EDR-killer)
1. Confirm current HVCI / Memory Integrity status on target hosts. Prerequisites: Windows 10 2004+ / Server 2022+ with virtualization extensions enabled in firmware. Reboot required: no (assessment only). Rollback: none required. 2. Enable the vulnerable-driver blocklist via Group Policy (Computer Configuration > Administrative Templates > System > Device Guard > "Deploy Windows Defender Application Control", or via Memory Integrity in Windows Security if not centrally managed), then reboot the pilot ring. Prerequisites: step 1 confirmed; pilot ring identified (rare but possible driver-compatibility breaks with legitimate low-level tooling — test before fleet-wide rollout). Reboot required: yes. Rollback: disable the GPO / turn off Memory Integrity in Windows Security, then reboot. 3. Validate enforcement by attempting to load a copy of a known-blocklisted driver name (in an isolated lab VM only — never on production) and confirming the load is refused; in production, confirm via the PowerShell check in the Patch/Exposure Audit block (§10). Prerequisites: step 2 complete and rebooted. Reboot required: no. Rollback: none required — verification step.
Playbook 2 — Rotate ASP.NET machineKey values and verify against badsecrets
1. Inventory every ASP.NET application's <machineKey> configuration (web.config, or centrally in machine.config) and record whether validationKey/decryptionKey are explicitly set or auto-generated. Prerequisites: administrative access to each IIS host; change-management ticket for the affected apps. Reboot required: no. Rollback: none required — inventory step. 2. Cross-check any explicitly-set key values against the public badsecrets database (https://github.com/blackhillsinfosec/badsecrets) using its CLI/library, or via the badsecrets web checker for any key you cannot rule out as unique. Prerequisites: step 1 complete. Reboot required: no. Rollback: none required — verification step. 3. For any application using a known/leaked key or a framework-default key, generate new cryptographically random validationKey/decryptionKey values and update web.config (this invalidates all outstanding ViewState/session tokens for that app — plan for a brief re-authentication wave). Prerequisites: step 2 identified an at-risk key; maintenance window scheduled; app restart planned. Reboot required: no host reboot; requires an IIS app-pool recycle (equivalent to a brief app restart). Rollback: restore the previous web.config from backup and recycle the app pool if the new keys break a legitimate integration that depended on key stability.
Playbook 3 — Enforce Linux kernel module signature verification (blocks the unsigned Specter rootkit LKM)
1. Check current module-signature enforcement status. cat /proc/sys/kernel/tainted grep -r "CONFIG_MODULE_SIG_FORCE\|CONFIG_MODULE_SIG" /boot/config-$(uname -r) Prerequisites: root/sudo access to the target host. Reboot required: no (assessment only). Rollback: none required. 2. On distributions supporting it, enable Secure Boot-tied kernel lockdown mode (lockdown=integrity or lockdown=confidentiality via kernel command line, e.g. GRUB_CMDLINE_LINUX="lockdown=integrity"), or enable module signature enforcement (module.sig_enforce=1) where the distribution ships signed modules. Prerequisites: step 1 confirmed the current state; pilot ring identified — this can break legitimate out-of-tree/DKMS modules (e.g., some GPU or storage drivers) that are not signed for your kernel; test the pilot ring's full driver set first. Reboot required: yes. Rollback: remove the lockdown=/module.sig_enforce= kernel parameter from the bootloader config and reboot to restore the prior (permissive) state. 3. Validate by attempting to load an unsigned test module (isolated lab VM only) and confirming the load is refused with an "unsigned module" error in dmesg/journalctl. Prerequisites: step 2 complete and rebooted. Reboot required: no. Rollback: none required — verification step.
Playbook 4 — Restrict IIS AppPool identity privileges (raises the cost of Potato-family privesc)
1. Inventory which IIS Application Pool identities currently hold SeImpersonatePrivilege (the default for most built-in AppPool identities and NETWORK SERVICE). whoami /priv (run under each AppPool identity via a scheduled task, or review via Local Security Policy > User Rights Assignment > Impersonate a client after authentication) Prerequisites: administrative access to each IIS host. Reboot required: no. Rollback: none required — inventory step. 2. For application pools that do not require impersonation (most static/API-only sites), remove the AppPool identity from the "Impersonate a client after authentication" user-rights assignment via Group Policy or secpol.msc, scoped to a pilot ring first. Prerequisites: step 1 complete; confirm the target application does not rely on impersonation for legitimate functionality (test in the pilot ring). Reboot required: no (IIS app-pool recycle is sufficient for the change to take effect for that pool). Rollback: re-add the AppPool identity to the user-rights assignment and recycle the app pool. 3. Deploy Q1 and Q11 (§8) as scheduled searches to confirm no Potato-family tool execution or w3wp.exe shell spawning occurs against the hardened pool going forward. Prerequisites: step 2 complete. Reboot required: no. Rollback: none required — verification step.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain any host with a confirmed Q1/Q4/Q5/Q10/Q12/Q17/Q18 hit; preserve memory and disk images before any patch/reset — if Q10 (BYOVD driver drop) fired, treat the EDR sensor's subsequent telemetry as potentially blinded and do NOT rely solely on Falcon for post-isolation confirmation | SOC L2 / IR | Containment timestamps; Q1–Q18 hit list; memory/disk images |
| Triage | Determine which initial-access CVE was exploited (check IIS/WAF logs per N1 for ViewState-oracle traffic, or application logs for Zimbra/AjaxPro/Nacos exploitation); enumerate every host that pulled a payload from the published staging infrastructure (Q2, Q17, Q18); check for credential-theft indicators (Q7/Q8/Q9) and BYOVD/rootkit indicators (Q10/Q14/Q15) | IR | WAF/access-log review; download/beacon hit list; Q7–Q9/Q14/Q15 hit list |
| Eradicate | Remove the scheduled task "Google Chrome Start" and any associated QuasarRAT/Gh0stCringe/SPECTRE binaries; remove the rogue local admin/RDP account; remove BadIIS/SeoEngineHandler from IIS; remove any web shells (custom two-layer shell, sss.ashx/up.ashx); unload and remove the Specter LKM and its hardware-monitor.service unit on Linux hosts; remove any dropped BYOVD drivers; rotate every credential a compromised host had access to (SAM/SECURITY hive dump and browser/Credential Manager theft both grant broad reach) | IR | Removal log; before/after file-hash comparison; credential-rotation record |
| Recover | Patch the exploited CVE before returning the host to service; rotate ASP.NET machineKey values for any affected application; rebuild any host that showed a confirmed BYOVD driver load or active rootkit rather than attempting in-place cleanup, since kernel-level compromise cannot be fully verified as removed by userland tooling alone | IR + IT | Patch confirmation; new machineKey deployment record; rebuild tickets |
| Harden | Apply §12 Immediate + Near-term controls; promote IOA-1 through IOA-8; enable the Microsoft vulnerable-driver blocklist and Linux module-signature enforcement fleet-wide; confirm egress monitoring for the published C2 set is live | Detection Eng | IOAs enabled; driver-blocklist/module-signing policy diff; monitoring dashboard live |
⚠ A confirmed Q10 (BYOVD driver drop) or Q14/Q15 (Specter rootkit load) hit means the host's own security telemetry may already be compromised. Do not trust a "clean" scan result from that host's own EDR sensor after such a hit without independent, out-of-band verification (offline disk image analysis, or a live-response tool that does not rely on the same kernel APIs the rootkit unlinks from).
Detection Coverage Map
| Technique | Behavior | CQL | Native / IOA | Coverage |
|---|---|---|---|---|
| T1190 | 1-day RCE (Zimbra/AjaxPro/Nacos/Telerik ViewState) | Q11, Q16 | N1 | Partial host telemetry starts post-RCE; HTTP-layer exploitation itself is a GAP (see below) |
| T1068 / T1134 | Potato-family privesc | Q1 | IOA-1 | Good |
| T1105 | certutil payload retrieval | Q2 | IOA-2 | Good |
| T1562.001 | Defender exclusion for inetsrv | Q3 | — | Partial FP medium, tuning required before IOA |
| T1053.005 | "Google Chrome Start" scheduled task | Q4 | IOA-3 | Good |
| T1036.005 | svchosts.exe masquerade | Q5 | IOA-4 | Good |
| T1136.001 / T1098 | Rogue admin/RDP account creation | Q6 | — | Partial FP medium, correlation recommended |
| T1003.002 | SAM/SYSTEM/SECURITY hive dump | Q7 | — | Partial FP medium, tuning required |
| T1555.003 | Chrome/Edge credential theft | Q8 | — | Partial optional telemetry source (FileOpenInfo); in-process theft may not generate a process event at all |
| T1555.004 | Credential Manager enumeration | Q9 | — | GAP-leaning FP high, correlation-only, not standalone-alertable |
| T1068 / T1562.001 | BYOVD driver drop | Q10 | IOA-5 | Good |
| T1505.003 / T1027 | Reverse-shell DLL (CVE-2019-18935) | Q12 | IOA-6 | Good |
| T1505.003 / T1140 | AI-generated ASHX web-shell deploy | Q13 | — | Partial FP medium, correlate with Q11 |
| T1014 / T1547.006 | Specter rootkit LKM load | Q14 | — | Partial pre-load detection only; post-load the rootkit actively hides itself — see N6/N7 |
| T1543.002 | hardware-monitor.service persistence | Q15 | — | Partial FP medium, verify against legitimate acpi_pad location |
| T1190 / T1068 (Linux) | Root shell from web/JVM process | Q16 | — | Partial FP medium, correlate with exploitation-window alerts |
| T1071.001 / T1105 | Known C2 IP contact | Q17 | IOA-7 | Good while IPs remain live |
| T1071.001 | Known C2 domain resolution | Q18 | IOA-8 | Good while domains remain live |
| T1102 | webhook.site OOB exfil/confirmation callbacks | — | N4 | GAP not shipped as CQL due to high legitimate base-rate; native/hunt-only |
| T1505.003 (web-shell auth) | X-ID: x9 / v=x9 header check | — | N2 | GAP HTTP-header content is not Falcon-visible |
| T1564.004 | NTFS ADS C2 config storage | — | N3 | GAP no standard Falcon field exposes ADS stream content directly |
Validation gates: confirm the required telemetry list in §11 is flowing before relying on any query; baseline the FP-medium/high queries for 7–14 days before promoting; lab-test Q4/Q10/Q14 positive cases. The three GAP rows (webhook.site OOB callbacks, HTTP-layer web-shell auth, and NTFS ADS C2 storage) cannot be closed with Falcon endpoint telemetry alone — they require WAF/IIS access-log review and, for the ADS gap, a dedicated ADS-enumeration sweep (N1–N3).
Hunt Summary Ticket
TITLE: Hunt — UAT-10147: SPECTRE implant, Specter Linux rootkit & BadIIS SEO fraud
SEVERITY: Critical (mass-scanned 1-day RCE against internet-facing IIS/Linux servers; BYOVD
EDR-killer; kernel-level Linux rootkit; AI-augmented exploitation at scale —
170,000-URL target list)
SCOPE: Internet-facing Windows/IIS servers (Zimbra, AjaxPro, Telerik UI for ASP.NET AJAX,
any IIS-hosted app); internet-facing Linux servers (Nacos or any exposed app);
Windows kernel/EDR sensor integrity; local Windows credential stores
HYPOTHESIS: 1-day RCE (Zimbra/AjaxPro/Nacos/Telerik ViewState, often AI-guided) -> Potato-family
privesc -> Defender exclusions + rogue admin account -> "Google Chrome Start"
scheduled task / hardware-monitor.service persistence -> SPECTRE implant (BYOVD
EDR kill, credential theft, process injection) -> Specter Linux rootkit (ftrace
hiding) -> BadIIS/SeoEngineHandler SEO fraud + C2 beaconing
QUERIES RUN: Native N1 WAF/IIS ViewState-oracle log review | N2 web-shell auth-header sweep |
N3 webroot FIM | N4 webhook.site DNS/proxy review | N5 appcmd inventory review |
N6 /proc vs ps integrity check | N7 lsmod vs /sys/module cross-check |
N8 external ASM/threat-intel watch
CQL Q1 Potato-tool exec | Q2 certutil staging-infra download | Q3 Defender exclusion |
Q4 "Google Chrome Start" task | Q5 svchosts.exe | Q6 rogue admin/RDP account |
Q7 SAM/SYSTEM/SECURITY hive dump | Q8 Chrome/Edge credential file open | Q9 cmdkey /list |
Q10 BYOVD driver drop | Q11 w3wp.exe shell/csc.exe spawn | Q12 [10-digit].[7-digit].dll |
Q13 PowerShell .ashx write | Q14 acpi_pad module load | Q15 hardware-monitor.service |
Q16 root shell from web/JVM | Q17 known C2 IP contact | Q18 known C2 domain resolution
DO FIRST: Confirm patch status for the four initial-access CVEs and the six Linux LPE CVEs;
enable the Microsoft vulnerable-driver blocklist fleet-wide (blocks Q10/BYOVD outright);
run Q1, Q4, Q5, Q10, Q12, Q17, Q18 (low-FP, high-CONF) immediately
FINDINGS: <pending analyst execution>
GAPS: No Falcon visibility into HTTP-layer ViewState exploitation oracle or web-shell
X-ID/v=x9 auth-header check (T1190/T1505.003 HTTP layer); NTFS ADS C2 config storage
not exposed via a standard Falcon field (T1564.004); webhook.site OOB callback pattern
shipped as native-hunt only due to FP risk (T1102); Specter rootkit actively hides
itself from userland/kernel-API-dependent tooling once loaded (T1014)
ACTIONS: Patch the four initial-access CVEs and six Linux LPE CVEs; enable Microsoft's
vulnerable-driver blocklist; enforce Linux kernel module signature verification;
rotate exposed ASP.NET machineKey values; restrict IIS AppPool SeImpersonatePrivilege;
promote IOA-1 through IOA-8; baseline and tune FP-medium/high queries before promotion
OWNER: HuntPack
VERSION: v0.1 - 2026-08-26
Changelog
References
| Tier | Source | Used For | Access Date |
|---|---|---|---|
| 1 | Cisco Talos — UAT-10147: Chinese-speaking adversary integrates agentic AI into post-compromise operations | Primary disclosure: actor profile, 170K-URL target list, Windows/Linux infection chains, AI-tooling narrative | 2026-08-26 |
| 1 | Cisco Talos — UAT-10147 deploys SPECTRE: A cross-platform implant with Linux rootkit and BYOVD capabilities | SPECTRE/Specter technical internals, BYOVD, BadIIS/SeoEngineHandler, web shell, commodity-backdoor roster | 2026-08-26 |
| 1 | Cisco Talos GitHub — "UAT-10147 integrates agentic AI.txt" IOC list | 12 SHA256 hashes, 2 IPs, 14 staging URLs (Windows infection chain) | 2026-08-26 |
| 1 | Cisco Talos GitHub — "UAT-10147 deploys SPECTRE.txt" IOC list | 44 SHA256 hashes, 4 IPs, 9 domains/URLs (SPECTRE/BadIIS/SEO-fraud infrastructure) | 2026-08-26 |
| 2 | The Hacker News — UAT-10147 Uses AI to Scale Server Attacks, Deploys SPECTRE With EDR Bypass and Linux Rootkit | Corroboration; SPECTRE first-observed date (April 2026); target-list top-5 destination countries | 2026-08-26 |