Two distinct but thematically linked threat operations surfaced in this reporting window, both centered on large-scale record and credential theft against under-defended web infrastructure.
Operation Kapibala (Red Heron): A suspected Chinese-speaking threat actor operating from the UTC+8 timezone, attributed to the Red Heron cluster, conducted a sustained exploitation campaign from May through September 2026. The actor demonstrated unusually disciplined infrastructure hygiene — maintaining persistent operations from a single IP address (104.225.153.141, AS25820 / IT7 Networks) — while mass-exploiting WordPress installations, ZyXEL network switches, and assorted enterprise platforms. The campaign culminated in the theft of over 18,000 government records via WordPress exploitation. The indicator set includes the Linux privilege-escalation flaw CVE-2022-0847 (Dirty Pipe) alongside a cluster of 2026-era CVEs (CVE-2026-34908/34909/34910, CVE-2026-60004, CVE-2026-60137, CVE-2026-63030, CVE-2026-7273), indicating the actor chains web-application initial access with local privilege escalation to pivot from web server context to full host compromise. Targeting is indiscriminate geographically — 50+ countries — but sector-focused on Government and Technology.
BUGSTER AI-Enabled Operations: A financially motivated actor under the handle BUGSTER leveraged jailbroken AI assistants — the Hermes Agent framework paired with DeepSeek V4 — to plan and execute multiple cybercrime operations across India. Notably, the actor exhibited limited native technical skill but used AI-generated scripts, AI-guided reconnaissance, and iterative 'next exploit opportunities' prompting to exfiltrate 5,200+ personal records from a university and target telecommunications infrastructure. The associated CVEs (CVE-2026-109618, CVE-2026-109619) and infrastructure (104.238.38.202) round out a small but actionable indicator set.
Collective assessment: Both pulses describe the same strategic reality — the barrier to mass exploitation and credential theft has collapsed. Red Heron shows what a disciplined actor does with commodity CVEs and a single VPS; BUGSTER shows what a low-skill actor achieves with AI augmentation. Enterprise defenders should treat internet-facing CMS platforms as the primary initial-access vector for credential and record theft in this cycle.
Threat Actor / Malware Profile
Red Heron (Operation Kapibala)
- Attribution: Suspected Chinese-speaking actor; operational tempo and timing analysis place activity in UTC+8. Linked to the Red Heron cluster by GreyNoise/OTX reporting.
- Distribution / Initial Access: Mass scanning and exploitation of vulnerable WordPress instances (plugin/theme CVEs), ZyXEL switch exploitation, and opportunistic enterprise platform attacks. No phishing component observed — this is pure infrastructure exploitation.
- Attack Chain: (1) Internet-wide scanning for vulnerable CMS versions → (2) exploitation of WordPress CVEs for unauthenticated access or file upload → (3) webshell deployment (PHP) for persistent command execution → (4) privilege escalation via CVE-2022-0847 (Dirty Pipe) to overwrite read-only files and gain root → (5) database credential extraction from
wp-config.php→ (6) bulk record exfiltration over HTTP(S). - Persistence: PHP webshells dropped into uploads and theme directories; potential rogue admin account creation in WordPress; root-level persistence following Dirty Pipe escalation (modified SUID binaries, injected SSH keys).
- C2 / Infrastructure: Operationally notable for single-IP discipline — 104.225.153.141 (US-hosted, AS25820, IT7 Networks) served as both scanning and exploitation origin across five months, making blocking and retro-hunting unusually high-fidelity.
- Anti-Analysis: Minimal malware used — living off the web stack. The actor relies on legitimate-looking HTTP POST traffic and webshell obfuscation (base64/gzinflate-encoded PHP) rather than traditional AV-evading payloads.
BUGSTER
- Attribution: Financially motivated individual, handle 'BUGSTER', operating against Indian education and telecommunications targets.
- Distribution / Initial Access: AI-assisted reconnaissance and exploit selection. The actor prompted a jailbroken Hermes Agent (DeepSeek V4 backend) to identify 'next exploit opportunities,' generate exploitation scripts, and troubleshoot errors iteratively — effectively using the LLM as a tier-1 exploit developer.
- Payload Behavior: AI-generated scripts (Python/Bash/PowerShell) with characteristic fingerprints: verbose inline comments, generic variable names, hardcoded target parameters, and naive error handling. Exploitation of CVE-2026-109618 and CVE-2026-109619 provided the initial foothold.
- Exfiltration: 5,200+ personal records from a university environment; exfil over standard web protocols to actor-controlled infrastructure at 104.238.38.202.
- Anti-Analysis: Reliance on script-based tooling leaves few compiled artifacts; however, AI-generated code has low operational security — scripts frequently contain hardcoded C2, comments revealing intent, and predictable file-naming conventions.
- Analyst Note: Expect this profile to proliferate. AI-enabled low-skill actors will generate high volumes of noisy, detectable — but numerous — intrusion attempts against education and telecom sectors.
IOC Analysis
The combined indicator set is compact but high-value:
| Type | Indicator | Context |
|---|---|---|
| IPv4 | 104.225.153.141 | Red Heron scanning/exploitation/exfil origin (AS25820) |
| IPv4 | 104.238.38.202 | BUGSTER C2 / exfil infrastructure |
| CVE | CVE-2022-0847 | Dirty Pipe — Linux privesc used post-WordPress compromise |
| CVE | CVE-2026-34908 / 34909 / 34910 | WordPress/plugin exploitation cluster (Kapibala) |
| CVE | CVE-2026-60004 / 60137 / 63030 / 7273 | Additional Kapibala exploitation surface |
| CVE | CVE-2026-109618 / 109619 | BUGSTER exploit chain |
Operationalization guidance for SOC teams:
- Network indicators: Push both IPv4s to perimeter block lists, proxy denylists, and EDR network IOC feeds immediately. Because Red Heron operated from a single IP for five months, retroactive hunting is the highest-value action — query NetFlow, firewall, and proxy logs for any historical connection to 104.225.153.141 since 2026-05-01. Any inbound connection from this IP to a web server followed by outbound data transfer should be treated as a confirmed compromise.
- CVE indicators: CVE-type IOCs are not blockable — they are vulnerability-management inputs. Cross-reference the CVE list against your external attack surface (WordPress versions, plugin inventories, ZyXEL device exposure). Prioritize internet-facing assets.
- Tooling: Decode/expand via the OTX DirectConnect API (
otxv2Python SDK), GreyNoise for IP context, and MISP for correlation. Import pulses into your TIP with TLP:WHITE handling. - Detection content: The behavioral detections below are more durable than the IPs — webshell execution patterns and Dirty Pipe artifacts will outlive the infrastructure.
Detection Engineering
---
title: PHP Webshell Spawned From Web Server Process (Kapibala / Red Heron)
id: 8f3a2c1e-9d4b-4e7a-b6c1-kapibala0001
status: experimental
description: Detects suspicious child processes spawned by web server or PHP processes, consistent with PHP webshell command execution following WordPress exploitation as observed in the Red Heron Kapibala campaign.
author: Security Arsenal Threat Intelligence
references:
- https://www.greynoise.io/blog/open-season-on-kapibala-attacker-steals-government-records-wordpress-exploitation
date: 2026/10/23
logsource:
category: process_creation
product: windows
definition: windows_web
service: null
detection:
selection_parent:
ParentImage|endswith:
- '\httpd.exe'
- '\php-cgi.exe'
- '\php.exe'
- '\w3wp.exe'
- '\nginx.exe'
ParentCommandLine|contains:
- 'wordpress'
- 'wp-content'
- 'htdocs'
selection_child:
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\pwsh.exe'
- '\net.exe'
- '\net1.exe'
- '\whoami.exe'
- '\certutil.exe'
condition: selection_parent and selection_child
falsepositives:
- Legitimate WordPress plugin updates invoking system commands (rare)
level: high
tags:
- attack.persistence
- attack.t1505.003
- attack.execution
- attack.t1059
---
title: Dirty Pipe CVE-2022-0847 Privilege Escalation Artifacts
id: 7b1e9f4a-2c8d-4a3f-9e2b-dirtpipe0002
status: experimental
description: Detects post-exploitation artifacts associated with CVE-2022-0847 (Dirty Pipe) privilege escalation as used by Red Heron to escalate from web server context to root following WordPress compromise.
author: Security Arsenal Threat Intelligence
date: 2026/10/23
logsource:
category: process_creation
product: linux
service: auditd
detection:
selection_execution:
type: 'EXECVE'
argc|contains:
- '/usr/bin/passwd'
- '/etc/passwd'
- '/etc/shadow'
selection_suid_mod:
type: 'PATH'
nametype: 'NORMAL'
name|endswith:
- '/usr/bin/su'
- '/usr/bin/sudo'
- '/usr/bin/passwd'
mode|contains: '4755'
selection_pipe_write:
syscall: 'splice'
success: 'yes'
condition: 1 of selection_*
falsepositives:
- Legitimate package management and SUID binary updates
level: critical
tags:
- attack.privilege_escalation
- attack.t1068
- cve.2022.0847
---
title: AI-Generated Attack Script Execution Indicators (BUGSTER Profile)
id: 4c8d2f1a-6e3b-4d9c-a7f2-bugster0003
status: experimental
description: Detects execution patterns characteristic of AI-generated attack scripts — encoded/obfuscated script content with verbose AI-style commenting patterns and hardcoded target parameters, as observed in BUGSTER operations leveraging Hermes Agent with DeepSeek.
author: Security Arsenal Threat Intelligence
date: 2026/10/23
logsource:
category: process_creation
product: windows
detection:
selection_download_cradle:
CommandLine|contains:
- 'DownloadString'
- 'Invoke-WebRequest'
- 'Invoke-RestMethod'
- 'curl.exe http'
- 'wget http'
selection_target_params:
CommandLine|contains:
- '104.238.38.202'
- '104.225.153.141'
- 'exfil'
- 'records'
- 'dump'
selection_encoded:
CommandLine|contains:
- ' -enc '
- ' -ec '
- 'FromBase64String'
condition: selection_download_cradle and (selection_target_params or selection_encoded)
falsepositives:
- Administrative automation scripts downloading tooling
- Software deployment frameworks
level: medium
tags:
- attack.execution
- attack.t1059.001
- attack.command_and_control
- attack.t1071.001
// Red Heron (Kapibala) + BUGSTER infrastructure hunt — retro and real-time
// Lookback extended to campaign start (May 2026) for Red Heron retro-hunting
let ThreatIPs = dynamic(["104.225.153.141", "104.238.38.202"]);
let LookbackStart = datetime(2026-05-01);
union isfuzzy=true
(DeviceNetworkEvents
| where TimeGenerated >= LookbackStart
| where RemoteIP in (ThreatIPs)
| project TimeGenerated, DeviceName, InitiatingProcessName, InitiatingProcessCommandLine,
RemoteIP, RemotePort, RemoteUrl, ActionType, Source = "DeviceNetworkEvents"),
(CommonSecurityLog
| where TimeGenerated >= LookbackStart
| where DestinationIP in (ThreatIPs) or SourceIP in (ThreatIPs)
| project TimeGenerated, DeviceName = DeviceName, InitiatingProcessName = ApplicationProtocol,
InitiatingProcessCommandLine = "", RemoteIP = DestinationIP,
RemotePort = DestinationPort, RemoteUrl = RequestURL, ActionType = DeviceAction,
Source = "Firewall/Proxy"),
(SigninLogs
| where TimeGenerated >= LookbackStart
| where IPAddress in (ThreatIPs)
| project TimeGenerated, DeviceName = UserPrincipalName, InitiatingProcessName = AppDisplayName,
InitiatingProcessCommandLine = "", RemoteIP = IPAddress, RemotePort = 0,
RemoteUrl = "", ActionType = Status, Source = "SigninLogs")
| sort by TimeGenerated asc
| summarize FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated),
HitCount = count(), Sources = make_set(Source),
Processes = make_set(InitiatingProcessName)
by DeviceName, RemoteIP
| extend Verdict = case(
HitCount > 100, "Likely bulk exfiltration — escalate to IR",
FirstSeen < datetime(2026-10-01), "Historical compromise window — full host triage required",
"Investigate — confirm business justification");
// Secondary hunt: webshell-style process lineage on web-tier hosts
DeviceProcessEvents
| where TimeGenerated > ago(180d)
| where InitiatingProcessFileName has_any ("httpd", "nginx", "php", "w3wp", "apache")
| where FileName in~ ("cmd.exe", "powershell.exe", "whoami.exe", "net.exe", "bash", "sh", "curl", "wget")
| project TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, AccountName
| order by TimeGenerated desc;
# Security Arsenal — Red Heron / BUGSTER IOC & Artifact Hunt
# Run elevated on web-tier and Linux-adjacent Windows hosts; adapt paths for your CMS layout.
$ThreatIPs = @("104.225.153.141", "104.238.38.202")
$Report = @{ Host = $env:COMPUTERNAME; Timestamp = (Get-Date -Format o); Findings = @() }
# 1. Active and historical network connections to threat infrastructure
$conns = Get-NetTCPConnection -ErrorAction SilentlyContinue | Where-Object { $ThreatIPs -contains $_.RemoteAddress }
if ($conns) { $Report.Findings += "[CRITICAL] Active connection to threat IP: $($conns | Out-String)" }
# 2. DNS cache evidence
$dns = Get-DnsClientCache -ErrorAction SilentlyContinue | Where-Object { $_.Data -match "104.225.153.141|104.238.38.202" }
if ($dns) { $Report.Findings += "[HIGH] DNS cache hit for threat infrastructure: $($dns | Out-String)" }
# 3. Webshell sweep — PHP files in WordPress upload/theme dirs modified recently or containing classic webshell functions
$wpPaths = @("C:\inetpub\wwwroot\wp-content\uploads", "C:\inetpub\wwwroot\wp-content\themes", "D:\websites\*\wp-content\uploads")
$shellPatterns = "eval\(","assert\(","base64_decode","gzinflate","shell_exec","passthru","system\(","preg_replace.*\/e"
foreach ($p in $wpPaths) {
Get-ChildItem -Path $p -Recurse -Filter *.php -ErrorAction SilentlyContinue | ForEach-Object {
$content = Get-Content $_.FullName -Raw -ErrorAction SilentlyContinue
if ($content -match ($shellPatterns -join "|")) {
$Report.Findings += "[CRITICAL] Suspected webshell: $($_.FullName) (Modified: $($_.LastWriteTime))"
}
}
}
# 4. WordPress credential file exposure — check wp-config.php for unexpected access timestamps
Get-ChildItem -Path "C:\inetpub\wwwroot\wp-config.php","D:\websites\*\wp-config.php" -ErrorAction SilentlyContinue | ForEach-Object {
if ($_.LastAccessTime -gt (Get-Date).AddDays(-30) -and $_.LastAccessTime -ne $_.LastWriteTime) {
$Report.Findings += "[HIGH] wp-config.php recently accessed without modification — possible credential harvesting: $($_.FullName)"
}
}
# 5. Rogue scheduled tasks / persistence
Get-ScheduledTask | Where-Object {
$_.Actions.Execute -match "powershell|cmd|certutil|mshta" -and
$_.Actions.Arguments -match "104.225.153.141|104.238.38.202|base64|-enc"
} | ForEach-Object { $Report.Findings += "[CRITICAL] Suspicious scheduled task: $($_.TaskName) -> $($_.Actions.Execute) $($_.Actions.Arguments)" }
# 6. Rogue local admin accounts (post-Dirty-Pipe / post-exploitation persistence)
Get-LocalGroupMember -Group "Administrators" -ErrorAction SilentlyContinue | Where-Object {
$_.Name -notmatch "Administrator|Domain Admins|Enterprise Admins"
} | ForEach-Object { $Report.Findings += "[MEDIUM] Non-standard admin account: $($_.Name)" }
if ($Report.Findings.Count -eq 0) { $Report.Findings += "[CLEAN] No indicators found" }
$Report | ConvertTo-Json -Depth 4 | Out-File "$env:TEMP\otx_hunt_$env:COMPUTERNAME.json"
$Report.Findings | ForEach-Object { Write-Output $_ }
Response Priorities
Immediate (0–4 hours):
- Block 104.225.153.141 and 104.238.38.202 at the perimeter firewall, web proxy, and EDR network-control layer.
- Execute the retro-hunt: any inbound connection from 104.225.153.141 to a web server since May 2026 followed by outbound transfer = treat as confirmed breach and trigger IR.
- Sweep WordPress estates for PHP files in
/uploads/and theme directories; run the webshell hunt script above. - Audit WordPress admin users for rogue accounts; force credential rotation on
wp-config.phpdatabase credentials if any suspicious access is found.
24 Hours:
- Because both campaigns targeted records and credentials, assume credential exposure on any host with threat-IP contact: force password resets for all accounts authenticated from affected systems, revoke active sessions and tokens, and check for MFA fatigue or bypass attempts.
- Review database query logs on WordPress-backed applications for bulk SELECT/export activity consistent with the 18,000-record exfiltration pattern.
- Check identity provider sign-in logs (Entra ID / Okta) for access from the flagged IPs or from UTC+8-aligned anomalous timing.
1 Week:
- Patch or isolate: remediate CVE-2022-0847 on all Linux kernels < 5.16.11 / 5.15.25 / 5.10.102, and address the WordPress plugin CVEs from the Kapibala cluster against your CMS inventory.
- Architectural hardening: remove direct internet exposure of WordPress admin panels (restrict
/wp-adminby IP or VPN), place CMS platforms behind a WAF with virtual patching, disable PHP execution in uploads directories, and enforce read-only filesystem mounts for theme directories. - ZyXEL and edge devices: confirm firmware currency and remove management interfaces from public exposure.
- Establish policy and monitoring for AI-enabled adversary volume: expect higher quantities of noisy, scripted exploitation attempts; tune WAF and rate-limiting to absorb them, and brief the SOC that low-sophistication scripts may still succeed against unpatched targets.
Related Resources
Security Arsenal Incident Response Managed SOC & MDR Services AlertMonitor Threat Detection From The Dark Side Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.