Telerik UI CVE-2019-18935 — Reverse Shell, Potato Escalation and Godzilla In-Memory Web Shell on IIS

Exploitation of the RadAsyncUpload .NET deserialization flaw on unpatched internet-facing IIS servers, documented by AhnLab ASEC on 2026-09-28: a reverse shell, SweetPotato-class privilege escalation, a memory-resident Godzilla-style web shell (godmemshell.dll), and a Rust scanner hunting WordPress setup pages.
Threat
Telerik CVE-2019-18935 exploitation (unattributed; two incident cases)
Severity
HIGH
Type
Exploit chain / in-memory web shell
Access
Unpatched Telerik UI for ASP.NET AJAX on Windows IIS
Version
v0.1 (Draft) · 2026-10-05
Author
HuntPack
Confidence
Medium-High (one first-party report; behavior well specified, attribution absent)
01

Executive Summary

The attacker objective is durable remote control of an internet-facing Windows IIS server through an old, still-unpatched Telerik UI for ASP.NET AJAX component. AhnLab ASEC (2026-09-28) describes two incidents that abused CVE-2019-18935, a .NET deserialization flaw in the RadAsyncUpload control that yields code execution as the IIS worker process (w3wp.exe). In the first, the actor ran a reverse shell to 206.82.6.22 on port 80, enumerated host name, privileges and processes, tried Potato-family privilege escalation (including a SweetPotato build modified for a web-shell environment), and finally loaded a Godzilla-style .NET web shell (godmemshell.dll) entirely in memory by registering a request handler with ASP.NET's VirtualPathProvider, so no .aspx file lands on disk. In the second, the exploit payload only launched a Rust-based scanner that pulled a target list from a remote server, probed 53 candidate paths for WordPress setup pages (/wp-admin/setup-config.php and /wp-admin/install.php) and reported hits through the Telegram API.

ASEC attributes neither case to a named actor, so this pack does not name one. The same vulnerability was previously used by Blue Mockingbird (Monero mining, per Red Canary in 2020) and in 2023 federal-agency IIS intrusions (CISA/FBI/MS-ISAC), as ASEC recounts; those are history, not part of this campaign's IOCs.

The best defensive angle is the IIS worker-process parent chain: w3wp.exe spawning cmd.exe, PowerShell, recon tools, or a SYSTEM-owned child, plus PE files written by w3wp.exe into C:\Users\Public\. Because the web shell is in-memory, process lineage and egress are the durable signals; file scanning will miss the shell itself.

Scope note: the corroborating articles supplied with this task (The Hacker News, Cybersecurity News) describe a different, newer 2026 Telerik chain (CVE-2026-13181 to -13184, padding oracle plus type-resolution, fixed in 2026.2.708) with no confirmed in-the-wild exploitation. They are cited for patch guidance only. The ASEC cases involve CVE-2019-18935, not those CVEs.

Defender priority: inventory every IIS host for Telerik.Web.UI.dll older than the fixed build, then run Q1, Q4, Q6 and Q9 fleet-wide on IIS servers. Any w3wp.exe child that is cmd.exe, PowerShell, or a SYSTEM process is a likely compromise.
02

Source Review & Web Hunter Notes

Four URLs were fetched and their text saved to Telerik-CVE-2019-18935-GodzillaMemShell-Hunt-sources/ (01 to 04). Every atomic IOC in the import CSV traces to snapshot 01 (the ASEC primary) and snapshot 04 (a republication of it).

TierSourceKey FindingCarry Forward
1 (Primary)AhnLab ASEC, "Vulnerability Attack Case: Installation of a Web Shell and Execution of a Scanner by Exploiting a Telerik UI Vulnerability" (2026-09-28)Two incident cases, attack chain, godmemshell.dll in-memory web shell, SweetPotato variant, Rust scanner, full IOC list, mitigation (Telerik 2020.1.114 or later)Yes
3 (Aggregator)hendryadrian.com republication of the ASEC reportRepeats the ASEC findings, partial IOC list, MITRE tags. Adds no independent evidence; not counted as a second source for prevent decisionsPartial (corroborates wording only)
2 (Context only)The Hacker News, "Telerik UI Padding-Oracle Bug Chained to Unauthenticated RCE" (2026-09)Describes a different 2026 chain (CVE-2026-13181 to -13184), fix 2026.2.708, no confirmed exploitation; confirms CVE-2019-18935 historyPartial (patch guidance and history only)
2 (Context only)Cybersecurity News, "Telerik Flaw Chain Lets Unauthenticated Attackers Turn Padding Oracle Into Remote Code Execution"Same 2026 chain; affected 2010.1.309 to 2026.2.519; upgrade to 2026.2.708Partial (patch guidance only)

Independence: the hendryadrian page is a mirror of ASEC, so the two IOC-bearing sources are one origin. Per pack policy no indicator ships at action=prevent or critical severity; everything is detect/high at most.

Credential in source: the ASEC report prints a Telegram bot token inside the sendMessage/sendDocument URLs. It is an attacker credential, is not shipped in any block, and must not be used or tested.

Prompt-injection check: all fetched content was treated as untrusted data. No fetched page contained instruction-like text aimed at the analyst or model.

03

Hunt Brief & Attack Chain

Hypotheses

  1. (High) w3wp.exe on a Telerik-hosting server spawns cmd.exe or PowerShell after exploitation (Q1, Q2, Q3).
  2. (High) A Potato-family tool turns the IIS worker token into SYSTEM; the child process runs as S-1-5-18 (Q4, Q5).
  3. (High) The exploit payload or reverse shell drops or runs tools from C:\Users\Public\ and reaches the documented C2 (Q6, Q8, Q9, Q12, Q13).
  4. (Medium) The worker process itself makes unusual outbound connections, which is how the in-process reverse shell appears (Q10).
  5. (Medium) The Rust scanner resolves api.telegram.org and fetches a target list (Q11, Q12).
  6. (Low, gap) The godmemshell.dll web shell lives in w3wp.exe memory and its HTTP traffic hides inside normal IIS requests; see Coverage Map.
StepBehavior (ASEC)TelemetryHunt angle
1 Initial accessCVE-2019-18935 deserialization in RadAsyncUpload runs code as w3wp.exeIIS logs, ProcessRollup2Q1; native IIS log hunt (Sec. 7)
2 Reverse shellSocket to 206.82.6.22:80, handles bound to cmd.exeNetworkConnectIP4, ProcessRollup2Q1, Q9, Q10
3 Discoveryhostname.exe, privilege and process queriesProcessRollup2Q2, Q3
4 Priv-escPotato-family incl. modified SweetPotato; PrintSpoofer-style token spoofing to SYSTEMProcessRollup2 (UserSid)Q4, Q5
5 Persistencegodmemshell.dll loaded in memory, registered via VirtualPathProvider, Godzilla-style .NET payload loader keyed on Type header and cookie sessionMemory only; HTTP requestsGap; hardening + IIS logs
6 Scanner (case 2)Rust scanner fetches ins.txt target list, probes 53 paths for /wp-admin/setup-config.php and install.php, sends results to TelegramProcessRollup2, PeFileWritten, DnsRequestQ6, Q7, Q11, Q12
04

Consolidated IOC Table

Indicators are exactly those in the ASEC report (snapshot 01). Shared legitimate infrastructure (Telegram) is not imported. ASEC does not map hashes to tools; all five are listed as sample MD5s.

TypeValueConfidenceActionContext
MD50a4be0b6c650ffdcd1c22db56f1c4aecmediumdetectASEC sample hash (role not stated)
MD510f705728d228ad949b7894c1a85a2b1mediumdetectASEC sample hash
MD5177e34d9174766a1d187a0c82de4c02fmediumdetectASEC sample hash
MD518fb4e070653fc9791e0e408d8cb1c8emediumdetectASEC sample hash
MD51dbfda02d74b6a7586c4430175204c28mediumdetectASEC sample hash
IPv4:port206.82.6.22:80highdetectCase 1 reverse-shell C2; also http://206.82.6.22/
IPv4:port65.98.5.158:31337highdetectScanner target-list host (Ins.Txt)
IPv4:port2.59.133.147:31338highdetectHosts ins.txt and sm.json
IPv4:port45.138.16.187:31337highdetectHosts bb.json and cofuz.json
URLhttp://2.59.133.147:31338/ins.txt, http://2.59.133.147:31338/sm.json, http://206.82.6.22/, http://45.138.16.187:31337/bb.json, http://45.138.16.187:31337/cofuz.jsonhighdetectASEC URL list
Domainapi.telegram.orgn/aenrich (hunt only)Shared legitimate service used for scanner results; behavioral hunt Q11, not imported
PathC:\Users\Public\ and C:\Users\Public\Documents\mediumhuntMalware staging locations named by ASEC
Path/wp-admin/setup-config.php, /wp-admin/install.phpmediumhuntScanner probe targets (the victims are third-party WordPress sites)
Processw3wp.exe parent of cmd.exe / powershell.exehighhuntBackbone behavior (Q1)
Filenamegodmemshell.dll, red.txtmediumhuntgodmemshell.dll is the in-memory web shell module; red.txt is the Telegram result attachment. Neither is a persistent on-disk artifact per ASEC
05

Affected Surface & Telemetry Matrix

SurfaceTelemetryPriorityGap risk
Windows IIS servers with Telerik UI for ASP.NET AJAX (RadAsyncUpload)ProcessRollup2, NetworkConnectIP4, PeFileWritten, DnsRequest; IIS W3C logsCriticalSensor missing on DMZ web servers; in-memory web shell invisible to file telemetry
Hosts reachable from compromised IIS serverProcessRollup2, NetworkConnectIP4HighLateral follow-on not documented by ASEC
Egress controls for server segmentsFirewall and proxy logsHighServers with unrestricted outbound reach C2 on any port
Third-party WordPress sitesWeb server access logs (victims of the scanner, not this estate)LowOut of scope for endpoint hunting
06

ATT&CK Mapping

TacticTechniqueObserved behaviorQuery / control
Initial AccessT1190 Exploit Public-Facing ApplicationCVE-2019-18935 in RadAsyncUploadQ1, Q7; patch (Sec. 12)
ExecutionT1059.003 Windows Command Shell, T1059.001 PowerShellcmd.exe via reverse shell; PowerShell under w3wp.exeQ1, Q3
DiscoveryT1033, T1057, T1082Host name, privileges, process listQ2, Q3
Privilege EscalationT1134.001 Token Impersonation/Theft, T1068Potato-family tools, SweetPotato variant, PrintSpoofer-style spoofingQ4, Q5; spooler hardening
Persistence / Defense EvasionT1505.003 Web Shell, T1620 Reflective Code Loading, T1055godmemshell.dll loaded in memory via VirtualPathProvider; Godzilla-style loaderGap; IIS logs; ASR web-shell rule
Command and ControlT1095 Non-Application Layer Protocol, T1071.001, T1102Raw socket reverse shell; HTTP C2 URLs; Telegram APIQ9, Q10, Q11
Resource Development / IngressT1105 Ingress Tool TransferScanner created and run via exploit payload; target list fetchedQ6, Q7, Q12
ReconnaissanceT1595.002 Vulnerability ScanningRust scanner probing for WordPress setup pagesQ12
ExfiltrationT1567 Exfiltration Over Web ServiceResults sent to Telegram as red.txtQ11
07

Native Audit-Log Hunts

These checks need no Falcon query. Items marked (general knowledge) are standard Telerik/IIS practice, not statements from the ASEC article.

  • Telerik version inventory: find Telerik.Web.UI.dll on every IIS host and compare its file version to the fixed build. ASEC states 2020.1.114 or later; use the latest release (see Sec. 12 and the playbook).
  • IIS W3C logs (general knowledge): look for POST requests to the RadAsyncUpload handler (Telerik.Web.UI.WebResource.axd with an rau query) from unfamiliar sources, large bursts of those requests, and requests returning 200 immediately before a w3wp.exe child process appears.
  • Web shell traffic (ASEC): the shell distinguishes processing by a request Type header, keeps a payload in a cookie-based session, and returns encrypted bodies. Look for requests to application URLs with an unusual custom Type header and long, high-entropy cookies or POST bodies that return encrypted blobs.
  • Windows Event Log: Security 4688 with process creation auditing and command line enabled (parent w3wp.exe), and 4672/4624 for SYSTEM-privileged logons following IIS activity.
  • Loaded modules (Sysmon 7, if deployed): unsigned or non-Telerik assemblies loaded into w3wp.exe; compare against a clean baseline. godmemshell.dll is loaded in memory only, so a module list may not show it.
  • Filesystem: list recent files under C:\Users\Public\ and C:\Users\Public\Documents\ (ASEC mitigation).
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first, since every "Open in Falcon" button below uses this selection.
Q1 · IIS worker process spawns cmd.exe / PowerShell
CONF HIGHFP MEDIUMCOST LOW

Looks for: The ASEC mitigation guidance names cmd.exe and powershell.exe under w3wp.exe as the abnormal-process pattern after CVE-2019-18935 exploitation. This is the backbone detection of the pack. FP: Some legacy apps shell out on purpose; baseline per application pool.

// HUNT: IIS worker process spawns cmd.exe / PowerShell
// MITRE: T1190, T1059.003, T1059.001
// CONF: high  FP: medium  COST: low
// REQUIRES: Falcon sensor on IIS servers (ProcessRollup2)
// FALSE POSITIVES: legacy ASP.NET applications that deliberately shell out to cmd.exe or PowerShell (report generators, build or deploy hooks)
// TUNING: exclude the specific CommandLine values of known, owner-approved application shell-outs per IIS host and application pool; keep any cmd.exe or powershell.exe child with no CommandLine or with an interactive pattern (whoami, hostname, tasklist, net, systeminfo)
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^w3wp\.exe$/i
| FileName=/^(cmd|powershell|pwsh)(\.exe)?$/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, ImageFileName])
Q2 · IIS worker child running first-stage recon (hostname, whoami, tasklist ...)
CONF HIGHFP LOWCOST LOW

Looks for: ASEC observed the operator query the system name (hostname.exe), privileges, and running processes through the reverse shell. Direct w3wp.exe children only; the cmd.exe grandchild case is covered by Q3.

// HUNT: IIS worker child running first-stage recon (hostname, whoami, tasklist ...)
// MITRE: T1033, T1057, T1082, T1018
// CONF: high  FP: low  COST: low
// REQUIRES: Falcon sensor on IIS servers (ProcessRollup2)
// FALSE POSITIVES: monitoring or deployment tooling that runs hostname or whoami from an IIS-hosted admin page; rare on production IIS
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^w3wp\.exe$/i
| FileName=/^(hostname|whoami|tasklist|systeminfo|ipconfig|netstat|net1?|quser|nltest|arp|route|wmic|reg|sc|qwinsta)(\.exe)?$/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine])
Q3 · IIS worker shell followed by recon on the same host (cmd.exe then hostname/whoami/tasklist)
CONF HIGHFP MEDIUMCOST MEDIUM

Looks for: Correlates the two documented steps on one host: a cmd.exe spawned by w3wp.exe, and recon binaries spawned by a cmd.exe. Catches the grandchild case Q2 cannot see. FP: Host-level correlation, not exact process-tree.

// HUNT: IIS worker shell followed by recon on the same host (cmd.exe then hostname/whoami/tasklist)
// MITRE: T1033, T1057, T1082
// CONF: high  FP: medium  COST: medium
// REQUIRES: Falcon sensor on IIS servers (ProcessRollup2)
// FALSE POSITIVES: admin consoles or support staff who RDP to the IIS host and run recon commands from an interactive cmd.exe launched by Explorer are excluded by the w3wp.exe parent requirement, but a web admin tool launching cmd.exe then helper tools can match
// TUNING: scope to hosts with the IIS role and exclude the CommandLine values of approved health-check scripts; selfJoinFilter correlates by host (aid), not by exact process-tree, so confirm the cmd.exe PID chain in Falcon before escalating
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| selfJoinFilter(field=[aid], where=[
    {ParentBaseFileName=/^w3wp\.exe$/i FileName=/^cmd\.exe$/i},
    {ParentBaseFileName=/^cmd\.exe$/i FileName=/^(hostname|whoami|tasklist|systeminfo|ipconfig|netstat|net1?|nltest|quser)(\.exe)?$/i}
  ])
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine])
Q4 · Process running as SYSTEM directly under w3wp.exe (Potato-family token spoofing result)
CONF HIGHFP MEDIUMCOST LOW

Looks for: ASEC reports that the Potato tools (including a SweetPotato variant modified for a web-shell environment) use token spoofing such as PrintSpoofer to reach SYSTEM and then launch processes such as cmd.exe with elevated privileges. A SYSTEM-owned child of w3wp.exe is the observable result. FP: Medium only where app pools legitimately run as LocalSystem.

// HUNT: Process running as SYSTEM directly under w3wp.exe (Potato-family token spoofing result)
// MITRE: T1134.001, T1068, T1548
// CONF: high  FP: medium  COST: low
// REQUIRES: Falcon sensor on IIS servers (ProcessRollup2 with UserSid)
// FALSE POSITIVES: IIS application pools deliberately configured to run as LocalSystem (rare, but present on legacy installs)
// TUNING: exclude hosts whose application pool identity is documented as LocalSystem; app pools on ApplicationPoolIdentity or a service account should never directly parent a SYSTEM (S-1-5-18) process
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^w3wp\.exe$/i
| UserSid=S-1-5-18
| table([@timestamp, aid, ComputerName, UserName, UserSid, ParentBaseFileName, FileName, CommandLine, ImageFileName])
Q5 · Potato-family privilege-escalation tooling (SweetPotato, PrintSpoofer, GodPotato and kin)
CONF HIGHFP LOWCOST LOW

Looks for: Matches Potato-family names in the image name or command line. The modified SweetPotato variant may be renamed, so pair with Q4 (SYSTEM child of w3wp.exe) rather than relying on names alone.

// HUNT: Potato-family privilege-escalation tooling (SweetPotato, PrintSpoofer, GodPotato and kin)
// MITRE: T1134.001, T1068
// CONF: high  FP: low  COST: low
// REQUIRES: Falcon sensor on IIS and Windows servers (ProcessRollup2)
// FALSE POSITIVES: authorized penetration tests and red-team exercises; security researchers on lab hosts
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^(sweetpotato|printspoofer\d*|godpotato|juicypotato|roguepotato|rottenpotato|efspotato|badpotato|potato)(\.exe)?$/i or CommandLine=/(sweetpotato|printspoofer|godpotato|juicypotato|roguepotato|efspotato)/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, ImageFileName, SHA256HashData])
Q6 · Executable or DLL written to C:\Users\Public by an IIS worker process
CONF HIGHFP LOWCOST LOW

Looks for: ASEC advises checking C:\Users\Public\ and C:\Users\Public\Documents\ for malware, and notes the second case created and ran a scanner file on the target through the exploit payload. TargetFileName is matched on the Public path with the writer limited to w3wp.exe.

// HUNT: Executable or DLL written to C:\Users\Public by an IIS worker process
// MITRE: T1105, T1190, T1505.003
// CONF: high  FP: low  COST: low
// REQUIRES: Falcon sensor on IIS servers (PeFileWritten, NewExecutableWritten)
// FALSE POSITIVES: near none; IIS workers have no routine reason to drop PE files under the Public profile
#event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/
| ContextBaseFileName=/^w3wp\.exe$/i
| TargetFileName=/\\Users\\Public\\/i
| table([@timestamp, aid, ComputerName, ContextBaseFileName, TargetFileName, SHA256HashData, MD5HashData])
Q7 · Any PE file written by an IIS worker process (malicious DLL upload), compiler output excluded
CONF MEDIUMFP MEDIUMCOST MEDIUM

Looks for: Telerik exploitation delivers a DLL that the vulnerable handler loads (the ASEC article cites prior CVE-2019-18935 cases where a malicious DLL was executed on IIS). This hunt is the broad net for that stage. FP: ASP.NET compilation noise; apply the TUNING exclusion first.

// HUNT: Any PE file written by an IIS worker process (malicious DLL upload), compiler output excluded
// MITRE: T1190, T1105, T1620
// CONF: medium  FP: medium  COST: medium
// REQUIRES: Falcon sensor on IIS servers (PeFileWritten)
// FALSE POSITIVES: ASP.NET dynamic compilation writes DLLs under Temporary ASP.NET Files; deployments and web-publish operations write assemblies into application bin folders
// TUNING: exclude TargetFileName under Temporary ASP.NET Files and compiler-produced paths, and exclude your deployment windows and CI service accounts; investigate what remains (DLLs written to temp, Public, or application upload directories)
#event_simpleName=/^PeFileWritten$/
| ContextBaseFileName=/^w3wp\.exe$/i
| TargetFileName!=/Temporary ASP\.NET Files/i
| table([@timestamp, aid, ComputerName, ContextBaseFileName, TargetFileName, SHA256HashData, MD5HashData])
Q8 · Executable launched from C:\Users\Public or C:\Users\Public\Documents
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: Staging location named in the ASEC mitigation checklist for both incident cases. Direct child of w3wp.exe or cmd.exe from this path raises confidence. FP: Installers; tune by publisher and parent.

// HUNT: Executable launched from C:\Users\Public or C:\Users\Public\Documents
// MITRE: T1204.002, T1036.005
// CONF: medium  FP: medium  COST: low
// REQUIRES: Falcon sensor on Windows servers (ProcessRollup2)
// FALSE POSITIVES: some installers and legacy utilities unpack to the Public profile; Office or collaboration add-ins
// TUNING: exclude signed, known-good publishers and your software-deployment tool by ParentBaseFileName; on IIS servers any hit is worth review, on workstations tune harder
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ImageFileName=/\\Users\\Public\\(Documents\\)?[^\\]+\.exe$/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData])
Q9 · Outbound connection to ASEC-documented C2 addresses
CONF HIGHFP LOWCOST LOW

Looks for: Covers the reverse shell (206.82.6.22:80), the staging/target-list hosts on ports 31337 and 31338, and the file URLs the scanner fetches from them. Perishable: re-validate before blocking.

// HUNT: Outbound connection to ASEC-documented C2 addresses
// MITRE: T1071.001, T1095, T1105
// CONF: high  FP: low  COST: low
// REQUIRES: Falcon sensor on all servers (NetworkConnectIP4)
// FALSE POSITIVES: none expected; these addresses are named as attacker infrastructure in the ASEC report. Addresses can be recycled, so verify date and process before concluding compromise
#event_simpleName=NetworkConnectIP4
| RemoteAddressIP4=/^(206\.82\.6\.22|65\.98\.5\.158|2\.59\.133\.147|45\.138\.16\.187)$/
| table([@timestamp, aid, ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort, LocalAddressIP4])
Q10 · IIS worker process connecting outbound on raw high ports or the documented C2 ports
CONF MEDIUMFP MEDIUMCOST MEDIUM

Looks for: The ASEC reverse-shell payload opens a TCP socket from the worker process to a public IP on port 80 and then binds cmd.exe to it. Matching w3wp.exe egress to public IPs on the documented 31337/31338 ports or any non-RFC1918 address is the behavioral hook; the port 80 case relies on Q9 for the known address. FP: Legitimate outbound API calls from the app.

// HUNT: IIS worker process connecting outbound on raw high ports or the documented C2 ports
// MITRE: T1095, T1571, T1059.003
// CONF: medium  FP: medium  COST: medium
// REQUIRES: Falcon sensor on IIS servers (NetworkConnectIP4)
// FALSE POSITIVES: web applications calling external APIs, payment gateways, license servers, or CDNs on non-standard ports
// TUNING: exclude the RemoteAddressIP4 and RemotePort pairs of your approved outbound dependencies per application; the reverse shell runs in-process so w3wp.exe is the connecting image, not cmd.exe
#event_simpleName=NetworkConnectIP4
| ContextBaseFileName=/^w3wp\.exe$/i
| !cidr(RemoteAddressIP4, subnet="10.0.0.0/8")
| !cidr(RemoteAddressIP4, subnet="172.16.0.0/12")
| !cidr(RemoteAddressIP4, subnet="192.168.0.0/16")
| !cidr(RemoteAddressIP4, subnet="127.0.0.0/8")
| RemotePort=/^(31337|31338|4444|1337|8080)$/
| table([@timestamp, aid, ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort])
Q11 · Server-side process resolving api.telegram.org (scanner result exfiltration)
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: The Rust-based scanner reports found WordPress setup URLs and the public IP to the Telegram API (api.telegram.org). The domain is shared legitimate infrastructure, so it is a behavioral hunt, not an import IOC. The bot token printed in the source report is a credential and is deliberately not shipped. FP: Telegram-based alerting.

// HUNT: Server-side process resolving api.telegram.org (scanner result exfiltration)
// MITRE: T1567, T1041, T1102
// CONF: medium  FP: medium  COST: low
// REQUIRES: Falcon sensor on servers (DnsRequest)
// FALSE POSITIVES: server monitoring or alerting integrations that notify through Telegram bots; admin-installed Telegram clients
// TUNING: exclude the ContextBaseFileName of approved alerting agents; on IIS servers, a w3wp.exe, cmd.exe, powershell.exe, or an unsigned binary under Users\Public resolving this name warrants review
#event_simpleName=DnsRequest
| DomainName=/^api\.telegram\.org$/i
| ContextBaseFileName!=/^(telegram|chrome|msedge|firefox|brave)(\.exe)?$/i
| table([@timestamp, aid, ComputerName, ContextBaseFileName, DomainName])
Q12 · Scanner or tool command line referencing the documented C2 hosts or target-list files
CONF HIGHFP LOWCOST LOW

Looks for: The second ASEC case exploits CVE-2019-18935 and the payload contains only a command that runs the scanner, which pulls a target list (ins.txt) from a remote server. Matches C2 addresses, the staging file names (ins.txt, sm.json, bb.json, cofuz.json) and the WordPress probe paths on any command line.

// HUNT: Scanner or tool command line referencing the documented C2 hosts or target-list files
// MITRE: T1105, T1595.002
// CONF: high  FP: low  COST: low
// REQUIRES: Falcon sensor on Windows servers (ProcessRollup2)
// FALSE POSITIVES: none expected; the strings are specific to the reported campaign infrastructure
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| CommandLine=/(206\.82\.6\.22|65\.98\.5\.158|2\.59\.133\.147|45\.138\.16\.187|\bins\.txt|\bsm\.json|\bbb\.json|\bcofuz\.json|setup-config\.php|wp-admin.install\.php)/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, SHA256HashData])
Q13 · File hash match: ASEC-published MD5 samples (process start or PE write)
CONF HIGHFP LOWCOST LOW

Looks for: Matches the five MD5 values listed in the ASEC IOC section across execution and file-write telemetry. Treat a hit as high confidence, then determine the family by pivoting on the hash.

// HUNT: File hash match: ASEC-published MD5 samples (process start or PE write)
// MITRE: T1105, T1587
// CONF: high  FP: low  COST: low
// REQUIRES: Falcon sensor on all hosts (ProcessRollup2, PeFileWritten, MD5HashData)
// FALSE POSITIVES: none expected for these exact hashes; ASEC does not say which hash maps to which tool (SweetPotato variant, scanner, payload DLL)
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten)$/
| MD5HashData=/^(0a4be0b6c650ffdcd1c22db56f1c4aec|10f705728d228ad949b7894c1a85a2b1|177e34d9174766a1d187a0c82de4c02f|18fb4e070653fc9791e0e408d8cb1c8e|1dbfda02d74b6a7586c4430175204c28)$/i
| table([@timestamp, aid, ComputerName, #event_simpleName, FileName, TargetFileName, MD5HashData, SHA256HashData, CommandLine])
09

CrowdStrike Custom IOA Recommendations

All IOA candidates ship as Detect. No Prevent: the indicators rest on a single first-party report and several patterns (shell under w3wp.exe) have legitimate application causes.

IOAPatternExclusionsDeployment
IOA-1 IIS worker shellImage cmd.exe or powershell.exe, parent w3wp.exe (Q1)Documented app shell-outs by command lineDetect, IIS host group only
IOA-2 IIS worker SYSTEM childParent w3wp.exe and user SYSTEM (Q4)Hosts with LocalSystem app poolsDetect, IIS host group
IOA-3 Potato toolingImage or command line matches Potato-family names (Q5)Authorized pentest hostsDetect, all servers
IOA-4 IIS PE drop to PublicFile write of PE by w3wp.exe under Users\Public (Q6)None expectedDetect, IIS host group
10

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import; detect only
type,value,action,severity,expiration,description,tags
md5,0a4be0b6c650ffdcd1c22db56f1c4aec,detect,high,2027-04-05,Telerik CVE-2019-18935 campaign sample (ASEC),campaign:Telerik-CVE-2019-18935
md5,10f705728d228ad949b7894c1a85a2b1,detect,high,2027-04-05,Telerik CVE-2019-18935 campaign sample (ASEC),campaign:Telerik-CVE-2019-18935
md5,177e34d9174766a1d187a0c82de4c02f,detect,high,2027-04-05,Telerik CVE-2019-18935 campaign sample (ASEC),campaign:Telerik-CVE-2019-18935
md5,18fb4e070653fc9791e0e408d8cb1c8e,detect,high,2027-04-05,Telerik CVE-2019-18935 campaign sample (ASEC),campaign:Telerik-CVE-2019-18935
md5,1dbfda02d74b6a7586c4430175204c28,detect,high,2027-04-05,Telerik CVE-2019-18935 campaign sample (ASEC),campaign:Telerik-CVE-2019-18935
ipv4,206.82.6.22,detect,high,2027-04-05,Reverse-shell C2 port 80,campaign:Telerik-CVE-2019-18935
ipv4,65.98.5.158,detect,high,2027-04-05,Scanner target-list host port 31337,campaign:Telerik-CVE-2019-18935
ipv4,2.59.133.147,detect,high,2027-04-05,Staging host ports 31338,campaign:Telerik-CVE-2019-18935
ipv4,45.138.16.187,detect,high,2027-04-05,Staging host port 31337,campaign:Telerik-CVE-2019-18935
url,http://2.59.133.147:31338/ins.txt,detect,high,2027-04-05,ASEC-listed C2 or staging URL,campaign:Telerik-CVE-2019-18935
url,http://2.59.133.147:31338/sm.json,detect,high,2027-04-05,ASEC-listed C2 or staging URL,campaign:Telerik-CVE-2019-18935
url,http://206.82.6.22/,detect,high,2027-04-05,ASEC-listed C2 or staging URL,campaign:Telerik-CVE-2019-18935
url,http://45.138.16.187:31337/bb.json,detect,high,2027-04-05,ASEC-listed C2 or staging URL,campaign:Telerik-CVE-2019-18935
url,http://45.138.16.187:31337/cofuz.json,detect,high,2027-04-05,ASEC-listed C2 or staging URL,campaign:Telerik-CVE-2019-18935
Behavioral Signaturespivot patterns
w3wp.exe parent of cmd.exe / powershell.exe / pwsh.exe
w3wp.exe parent of hostname, whoami, tasklist, systeminfo (via cmd.exe)
w3wp.exe parent of any process running as SYSTEM (S-1-5-18)
PE file (EXE/DLL) written by w3wp.exe, esp. under C:\Users\Public\ or C:\Users\Public\Documents\
w3wp.exe outbound to public IPs on ports 80 (raw IP), 31337, 31338
Server process resolving api.telegram.org (scanner results, attachment red.txt)
Command line with ins.txt / sm.json / bb.json / cofuz.json
Probe paths: /wp-admin/setup-config.php, /wp-admin/install.php (53 candidate base paths per ASEC Table 1)
Named Malware / Toolingcontext
Telerik UI for ASP.NET AJAX RadAsyncUpload (CVE-2019-18935), fix: 2020.1.114 or later per ASEC
SweetPotato (modified for web-shell environment), PrintSpoofer-style token spoofing, other Potato-family tools
godmemshell.dll (Godzilla-style in-memory .NET web shell; VirtualPathProvider handler)
Rust-based WordPress setup-page scanner (reports via Telegram API as red.txt)
Patch / Spooler / App-Pool Auditverification one-liners
# Telerik assembly versions on an IIS host (read-only inventory)
Get-ChildItem -Path C:\inetpub, D:\ -Recurse -Filter Telerik.Web.UI.dll -ErrorAction SilentlyContinue |
  Select-Object FullName, @{n='FileVersion';e={$_.VersionInfo.FileVersion}}

# Staging-path review named by ASEC
Get-ChildItem C:\Users\Public, C:\Users\Public\Documents -Force -ErrorAction SilentlyContinue |
  Where-Object { $_.Extension -match '\.(exe|dll|ps1|bat)$' } | Select-Object FullName, Length, LastWriteTime

# Print Spooler state (PrintSpoofer-style abuse needs it)
Get-Service Spooler | Select-Object Status, StartType

# Application pool identities
Import-Module WebAdministration; Get-ChildItem IIS:\AppPools | Select-Object Name, @{n='Identity';e={$_.processModel.identityType}}

Not imported: api.telegram.org (shared legitimate service; hunted by behavior in Q11) and the Telegram bot token printed in the ASEC report (an attacker credential, not an indicator, never shipped). Hash-to-tool mapping is not given by ASEC, so no hash is labelled as SweetPotato or the scanner.

11

Detection Validation Gates

GateCheck
Telemetry readyIIS servers report ProcessRollup2, NetworkConnectIP4, PeFileWritten and DnsRequest; command-line capture on
Benign baselineRun Q1, Q4, Q7, Q10 for 14 days on IIS hosts; record legitimate shell-outs, SYSTEM app pools, and outbound API ports; build TUNING exclusions
Positive testsIn a lab IIS host, launch cmd.exe from a test ASP.NET page and confirm Q1 fires; run a renamed copy of a benign binary from C:\Users\Public and confirm Q8
PromotionIOA-1 to IOA-4 stay Detect until two weeks of clean baseline; never Prevent from this pack alone
12

Hardening — Tiered

Immediate (this week)
  • Patch Telerik UI for ASP.NET AJAX to 2020.1.114 or later per ASEC; prefer the current release (2026.2.708 or later also addresses the separate 2026 chain described by THN and Cybersecurity News). MITRE M1051 Update Software; vendor advisory. Verify: playbook step 1.
  • Block outbound traffic from IIS servers by default; allow only required destinations. M1037 Filter Network Traffic; CIS Controls v8 13.4/12.x best practice. Verify: attempt an outbound connection to a test host from the IIS server.
  • Enable the Defender ASR rule "Block Webshell creation for Servers" in audit, then block (where Defender is the AV). M1040 Behavior Prevention on Endpoint; Microsoft attack surface reduction documentation. Verify: Get-MpPreference.
Near term (1 to 4 weeks)
  • Disable Print Spooler on IIS servers that do not print; PrintSpoofer-style token abuse depends on it (ASEC cites PrintSpoofer). M1042 Disable or Remove Feature; CIS Windows Server Benchmark (Print Spooler: Disabled). Verify: Get-Service Spooler.
  • Run app pools under ApplicationPoolIdentity or a dedicated low-privilege account, never LocalSystem; remove write access to web roots and C:\Users\Public. M1026 Privileged Account Management; Microsoft IIS hardening guidance. Verify: app-pool audit one-liner.
  • Restrict the RadAsyncUpload handler by WAF or request-filtering rules where the control is not needed (best practice, no formal benchmark).
Strategic (1 to 3 months)
  • Component inventory and SCA so end-of-life UI libraries are found before attackers find them. M1051; NIST SP 800-53 SI-2 / CM-8.
  • Segment DMZ web servers from internal networks and place a WAF in front. M1030 Network Segmentation.
  • Application allowlisting (WDAC/AppLocker) on web servers to stop unsigned binaries launching from C:\Users\Public. M1038 Execution Prevention; CIS Benchmark.
13

Deployable Playbooks

Every step lists prerequisites, reboot requirement and rollback. Pilot on one host first. Step 1 is the patch inventory; the upgrade itself follows the vendor instructions for each application.

STEP 1: Inventory Telerik versions
  Prerequisites: local admin on the IIS host; read-only.
  Reboot required: No
  Rollback: none required (read-only)
  Get-ChildItem -Path C:\inetpub -Recurse -Filter Telerik.Web.UI.dll -ErrorAction SilentlyContinue |
    Select-Object FullName, @{n='FileVersion';e={$_.VersionInfo.FileVersion}}

STEP 2: Disable Print Spooler on servers that do not print
  Prerequisites: confirm the server hosts no print queues (Get-Printer) and no app depends on printing.
  Reboot required: No
  Rollback: Set-Service Spooler -StartupType Automatic; Start-Service Spooler
  Stop-Service Spooler -Force
  Set-Service Spooler -StartupType Disabled

STEP 3: Enable ASR rule "Block Webshell creation for Servers" in audit mode first
  Prerequisites: Microsoft Defender Antivirus active (not passive); run in audit for 14 days.
  Reboot required: No
  Rollback: Remove-MpPreference -AttackSurfaceReductionRules_Ids a8f5898e-1dc8-49a9-9878-85004b8a61e6
  Add-MpPreference -AttackSurfaceReductionRules_Ids a8f5898e-1dc8-49a9-9878-85004b8a61e6 -AttackSurfaceReductionRules_Actions AuditMode
  # after review: ... -AttackSurfaceReductionRules_Actions Enabled

STEP 4: Default-deny outbound for the IIS worker (Windows Firewall, program-scoped)
  Prerequisites: list the required outbound destinations first (DB, auth, payment APIs); stage on one host.
  Reboot required: No
  Rollback: Remove-NetFirewallRule -DisplayName "HP-Block-w3wp-Outbound"
  New-NetFirewallRule -DisplayName "HP-Block-w3wp-Outbound" -Direction Outbound -Action Block -Program "%SystemRoot%\System32\inetsrv\w3wp.exe" -Profile Any
  # then add higher-priority Allow rules for approved destinations before enabling in production

STEP 5: Confirm app pool identity (no LocalSystem)
  Prerequisites: WebAdministration module.
  Reboot required: No
  Rollback: Set-ItemProperty IIS:\AppPools\<PoolName> -Name processModel.identityType -Value <PreviousValue> (record the prior value first)
  Import-Module WebAdministration
  Get-ChildItem IIS:\AppPools | Select-Object Name, @{n='Identity';e={$_.processModel.identityType}}
14

Containment Runbook

PhaseActionsOwnerEvidence
1 IsolateNetwork-isolate the IIS host via Falcon containment (keep sensor connected); block the ASEC C2 IPs at the perimeter; preserve a memory image before any restart because the web shell is memory-residentIR leadContainment timestamp; memory image hash
2 ScopeRun Q1 to Q13 across the estate; pull IIS logs for the Telerik handler; review SYSTEM-owned children of w3wp.exe; list files under C:\Users\PublicHunt teamQuery exports; process trees
3 EradicateRestart the app pool and IIS worker to clear the in-memory shell only after imaging; remove staged files; patch Telerik; rotate any secrets readable by the app pool (connection strings, machine keys) and service account credentialsServer ownerPatch version proof; rotation tickets
4 RecoverRebuild the host from a known-good image if SYSTEM was reached (Q4 hit); restore content from clean source; re-enable with default-deny egressPlatform teamRebuild record
5 LessonsAdd the component to inventory/SCA; tune IOA-1 to IOA-4; document baseline exclusionsDetection engineeringUpdated TUNING lines
15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1190Telerik RadAsyncUpload exploitationQ1, Q7IOA-1Partial (request itself only in IIS logs)
T1059.003 / T1059.001Shell under w3wp.exeQ1, Q3IOA-1Good
T1033 / T1057 / T1082Recon toolsQ2, Q3-Good
T1134.001 / T1068Potato-family, SYSTEM childQ4, Q5IOA-2, IOA-3Good
T1105Tool drop to Public; hash and C2 matchesQ6, Q7, Q8, Q13IOA-4Good
T1095 / T1071Reverse shell and C2Q9, Q10-Partial (port 80 reverse shell to unknown IP blends with web egress)
T1567 / T1102Telegram exfilQ11-Partial
T1595.002Outbound WordPress scanningQ12-Partial (probe traffic leaves the host; command line only)
T1505.003 / T1620godmemshell.dll in-memory Godzilla shellnone-GAP (no file, no new process; only IIS logs, memory forensics, and the child-process symptoms in Q1/Q4)

Validation gates (Sec. 11) apply: baseline 14 days on IIS hosts before promoting any IOA. The honest gap is the in-memory web shell itself; this pack detects what the shell and exploit do next, not the shell code.

16

Hunt Summary Ticket

TITLE:      Telerik CVE-2019-18935 exploitation on IIS: reverse shell, Potato escalation, Godzilla in-memory web shell
SEVERITY:   High (exploited in the wild per ASEC, 2026-09-28; no actor attribution)
SCOPE:      Windows IIS servers running Telerik UI for ASP.NET AJAX; reachable internal hosts.
HYPOTHESIS: An unpatched Telerik RadAsyncUpload handler lets an unauthenticated actor run code
            as w3wp.exe, open a reverse shell, escalate to SYSTEM with Potato-family tooling,
            and keep access through an in-memory Godzilla-style web shell, or simply launch a
            scanner that reports WordPress setup pages to Telegram.
QUERIES:    13 CQL hunt queries (Q1-Q13); 4 Custom IOA candidates, all Detect.
DO FIRST:   Inventory Telerik.Web.UI.dll versions on IIS hosts; run Q1, Q4, Q6, Q9 on IIS servers.
FINDINGS:   Pending tenant run. Proactive hunt, not a confirmed-incident report.
GAPS:       godmemshell.dll runs in memory: no file or process telemetry. Rely on IIS logs, memory
            forensics, and downstream child-process and egress detections.
ACTIONS:    Patch Telerik (2020.1.114 or later; prefer current); default-deny IIS egress; disable
            Print Spooler where unused; ASR web-shell rule; image memory before restarting IIS.
OWNER:      HuntPack
VERSION:    v0.1 (Draft) - 2026-10-05
17

Changelog

v0.12026-10-05Initial release. Built from AhnLab ASEC reporting of 2026-09-28 with context from The Hacker News, Cybersecurity News and a hendryadrian.com republication. 13 CQL queries, 4 Custom IOA candidates, 9-row ATT&CK mapping, tiered hardening with a 5-step playbook and a 5-phase containment runbook.
18

References

TierSourceUsed ForAccess Date
1AhnLab ASEC: Vulnerability Attack Case: Installation of a Web Shell and Execution of a Scanner by Exploiting a Telerik UI VulnerabilityPrimary attack chain, IOCs, mitigations2026-10-05
3hendryadrian.com republication of the ASEC reportWording corroboration only (same origin)2026-10-05
2The Hacker News: Telerik UI padding-oracle bug chained to unauthenticated RCEContext: separate 2026 CVE chain, fix 2026.2.708, CVE-2019-18935 history2026-10-05
2Cybersecurity News: Telerik flaw chainContext: affected range and fixed version of the separate 2026 chain2026-10-05