Back to Intelligence

KREMLIN Banking Extension, SysGoRAT Espionage & ARMORY CASTLE BeyondTrust Zero-Day: OTX Pulse Analysis — Enterprise Detection Pack

SA
Security Arsenal Team
October 16, 2026
12 min read

Three concurrent OTX pulses published on 2026-10-16 reveal a cross-section of the modern intrusion landscape: financially motivated browser-level session theft, AI-assisted nation-state espionage against Linux infrastructure, and zero-day exploitation of enterprise remote access appliances. While the campaigns differ in motive and tradecraft, they share a common thread — abuse of trust boundaries that traditional perimeter controls assume are safe: browser extension integrity checks, legitimate Linux binaries, and vendor remote support appliances.

Pulse 1 — REF9334 / KREMLIN: A Brazilian banking malware operation active since May 2025 deploys malicious Chrome extensions that the victim never knowingly installs. The toolkit forges Chromium's own integrity protections by manipulating the Secure Preferences file and regenerating the required HMACs, allowing a rogue extension to appear legitimately installed. The chain uses multi-stage JavaScript loaders and a custom C++ installer, ultimately delivering Remcos RAT capability and hijacking live banking sessions. Uniquely, its infrastructure leverages Ethereum smart contracts as a dead-drop resolver, making C2 takedown-resistant.

Pulse 2 — CL-UNK-1211 / SysGoRAT: An unattributed espionage cluster targeted government and state-affiliated Linux environments between October 2025 and April 2026. Forensic analysis of payloads found conversational annotations embedded in the code — strong indicators of LLM-generated or AI-agent-assisted development. The campaign deploys web shells, the cross-platform SysGoRAT backdoor, and chains CVE-2025-55182 (initial access) with CVE-2021-4034 (PwnKit) for local privilege escalation to root, culminating in database exfiltration.

Pulse 3 — ARMORY CASTLE: Mandiant attributes exploitation of CVE-2026-102764 — an arbitrary file upload flaw in BeyondTrust Remote Support appliances disclosed October 15, 2026 — to a suspected PRC-nexus espionage actor. Exploitation began in late August 2026 as a zero-day. Post-exploitation, the actor deployed the SAWFLY webshell and BARECLAW tunneler, then escalated privileges via SUID bit manipulation. The pulse also references CVE-2023-46805 and CVE-2024-21887 (Ivanti), suggesting the actor's pattern of targeting edge and remote access appliances.

Collectively: assume your browser estates, Linux servers, and remote access gateways are all contested terrain this quarter.


Threat Actor / Malware Profiles

REF9334 — KREMLIN Toolkit (Financially Motivated, Brazil)

  • Distribution: Malicious Chrome extensions sideloaded via multi-stage JavaScript loaders and a custom C++ installer; no Chrome Web Store presence required.
  • Payload behavior: Injected extension monitors browser sessions to Brazilian financial institutions, steals session tokens and banking credentials in real time, and can manipulate transactions in-session.
  • Integrity bypass: Writes to Chrome's Secure Preferences file and regenerates the HMACs Chrome uses to detect tampering — the extension appears cryptographically legitimate to the browser.
  • C2 communication: Ethereum smart contract dead-drop resolution for C2 addresses; staged payloads fetched from throwaway codec-themed domains (codecaudiog.site, codecvideowin.online). Associated tooling includes Remcos (S0332) and legacy DoublePulsar references.
  • Persistence: The forged extension persists across browser restarts because Chrome's own verification mechanism has been subverted; removal requires profile-level remediation.

CL-UNK-1211 — SysGoRAT (Espionage, Government Linux)

  • Distribution: Exploitation of internet-facing services via CVE-2025-55182; web shells dropped as initial footholds.
  • Payload behavior: SysGoRAT cross-platform backdoor providing remote shell, file staging, and database exfiltration. Payloads contain conversational code annotations characteristic of LLM-assisted generation — expect rapid variant turnover.
  • Privilege escalation: CVE-2021-4034 (PwnKit / pkexec) for root on unpatched Linux hosts.
  • C2 communication: Outbound beaconing from compromised Linux hosts to infrastructure including 88.119.167.57.
  • Defense evasion: Living-off-the-land on Linux, web shell blending with legitimate web directories, AI-generated code that defeats signature-based family clustering.

ARMORY CASTLE (Suspected PRC-Nexus Espionage)

  • Distribution: Zero-day exploitation of BeyondTrust Remote Support appliances (CVE-2026-102764, arbitrary file upload). Historical pattern includes Ivanti Connect Secure flaws (CVE-2023-46805, CVE-2024-21887).
  • Payload behavior: SAWFLY webshell for persistent appliance-level access; BARECLAW tunneler for pivoting from the appliance into internal networks.
  • Privilege escalation: SUID bit manipulation on the appliance OS for root-equivalent execution.
  • Objective: Long-dwell espionage via trusted remote access infrastructure — appliances that are, by design, authenticated pathways into the enterprise.

IOC Analysis

Indicator composition across the pulses:

TypeExamplesOperationalization
File hashes (SHA256/SHA1/MD5)44e83f84...b879, 1f19b9a2...a462, 00ea1da4...bbabBlock via EDR custom indicators; sweep historical execution telemetry; note several MD5/SHA1 entries are hashes-of-hashes from sample submissions — pivot on all listed values
Domainscodecaudiog.site, codecvideowin.onlineDNS sinkhole + proxy block; alert on retroactive DNS resolution in the last 90 days
IPv488.119.167.57Egress firewall block; hunt netflow/proxy logs for any session, including short TLS handshakes
CVEsCVE-2026-102764, CVE-2025-55182, CVE-2021-4034, CVE-2023-46805, CVE-2024-21887Vulnerability scanner re-baseline; these are exploited CVEs — treat any unpatched exposed asset as presumptively compromised
Anomalous IOCsubprocess.callNot a network indicator — this is a code-level artifact from AI-generated Python payloads. Hunt for it in script contents and EDR file-content scanning, not in DNS

Tooling guidance: Hashes operationalize directly into Microsoft Defender, CrowdStrike, or SentinelOne custom IOC lists. Domain/IP retro-hunts are fastest in your SIEM's DNS and proxy tables. The Ethereum dead-drop channel means DNS-layer blocking alone is insufficient for KREMLIN — detection must focus on the extension installation and Secure Preferences tampering behavior, not just C2 resolution.


Detection Engineering

YAML
---
title: Chrome Secure Preferences Tampering - KREMLIN Extension Forgery
id: 9f1c2a44-7b3e-4d21-9a8f-kremlin0001
description: Detects modification of Chromium Secure Preferences or Preferences files by non-browser processes, consistent with REF9334 KREMLIN forging browser integrity HMACs to install malicious extensions.
status: experimental
date: 2026/10/16
author: Security Arsenal Threat Intelligence
references:
    - https://www.elastic.co/security-labs/threat-command/malicious-browser-extension-kremlin-banking-malware
logsource:
    category: file_event
    product: windows
detection:
    selection_path:
        TargetFilename|contains:
            - '\AppData\Local\Google\Chrome\User Data\'
            - '\AppData\Local\Chromium\User Data\'
            - '\AppData\Local\Microsoft\Edge\User Data\'
        TargetFilename|endswith:
            - '\Secure Preferences'
            - '\Preferences'
    filter_browser:
        Image|contains:
            - '\chrome.exe'
            - '\msedge.exe'
            - '\GoogleUpdate.exe'
            - '\MicrosoftEdgeUpdate.exe'
    condition: selection_path and not filter_browser
fields:
    - Image
    - TargetFilename
    - User
falsepositives:
    - Enterprise policy deployment tools modifying browser preferences
level: high
tags:
    - attack.persistence
    - attack.defense_evasion
    - attack.t1176
---
title: PwnKit pkexec Privilege Escalation on Linux - CL-UNK-1211
id: 3b7d91e2-5c4a-4f18-8d2a-sysgorat002
description: Detects anomalous pkexec execution patterns consistent with CVE-2021-4034 (PwnKit) exploitation used by CL-UNK-1211 to escalate privileges on government Linux systems.
status: experimental
date: 2026/10/16
author: Security Arsenal Threat Intelligence
references:
    - https://unit42.paloaltonetworks.com/ai-campaign-targets-linux-infrastructure/
logsource:
    category: process_creation
    product: linux
detection:
    selection_pkexec:
        Image|endswith: '/pkexec'
    selection_suspicious_parent:
        ParentImage|endswith:
            - '/bash'
            - '/sh'
            - '/python'
            - '/python3'
            - '/perl'
            - '/php'
    selection_env_abuse:
        CommandLine|contains:
            - 'GCONV_PATH'
            - 'CHARSET'
    condition: selection_pkexec and (selection_suspicious_parent or selection_env_abuse)
fields:
    - Image
    - ParentImage
    - CommandLine
    - User
falsepositives:
    - Legitimate administrative pkexec usage (rare from script interpreters)
level: critical
tags:
    - attack.privilege_escalation
    - attack.t1068
    - cve.2021.4034
---
title: Webshell Drop and Tunneler Execution on Remote Access Appliances - ARMORY CASTLE
id: 7e2a5c19-1d8b-4c33-a6f4-armorycastle003
description: Detects web server processes spawning shells or tunneling binaries, consistent with SAWFLY webshell and BARECLAW tunneler deployment following BeyondTrust CVE-2026-102764 exploitation. Also detects suspicious SUID bit modification.
status: experimental
date: 2026/10/16
author: Security Arsenal Threat Intelligence
references:
    - https://cloud.google.com/blog/topics/threat-intelligence/armory-castle-exploits-beyondtrust
logsource:
    category: process_creation
    product: linux
detection:
    selection_web_parent:
        ParentImage|contains:
            - 'nginx'
            - 'apache'
            - 'httpd'
            - 'tomcat'
            - 'lighttpd'
    selection_shell_child:
        Image|endswith:
            - '/sh'
            - '/bash'
            - '/dash'
            - '/curl'
            - '/wget'
            - '/nc'
            - '/ncat'
    selection_suid:
        Image|endswith: '/chmod'
        CommandLine|contains:
            - 'u+s'
            - '4755'
            - '4711'
    condition: (selection_web_parent and selection_shell_child) or selection_suid
fields:
    - Image
    - ParentImage
    - CommandLine
    - User
falsepositives:
    - Appliance vendor update scripts (verify against BeyondTrust maintenance windows)
level: critical
tags:
    - attack.persistence
    - attack.t1505.003
    - attack.privilege_escalation
    - attack.t1548.001
    - cve.2026.102764
KQL — Microsoft Sentinel / Defender
// Security Arsenal Hunt: KREMLIN extension forgery, SysGoRAT C2, ARMORY CASTLE appliance exploitation
// Scope: last 30 days across endpoint and network telemetry
let KremlinDomains = dynamic(["codecaudiog.site", "codecvideowin.online"]);
let SysGoRAT_IP = "88.119.167.57";
let KnownHashes = dynamic([
    "44e83f84a5d5219e2f7c3cf1e4f02489cae81361227f46946abe4b8d8245b879",
    "d94f75a70b5cabaf786ac57177ed841732e62bdcc9a29e06e5b41d9be567bcfa",
    "1f19b9a27d79c11bda00a1e8faf74a7fdd683d38ccef1b60df2fd0307e3aa462",
    "dc14e215269a93fdbc4c1a80b984c23faf7af0911c6dbb85309796a6f2ae95fb"
]);
// 1. Network indicators: KREMLIN staging domains + SysGoRAT C2
let NetHits = DeviceNetworkEvents
| where TimeGenerated > ago(30d)
| where RemoteUrl in (KremlinDomains) or RemoteIP == SysGoRAT_IP
| project TimeGenerated, DeviceName, InitiatingProcessFileName, RemoteUrl, RemoteIP, RemotePort, ActionType
| extend HuntType = "NetworkIOC";
// 2. File hash hits across all three campaigns
let HashHits = DeviceFileEvents
| where TimeGenerated > ago(30d)
| where SHA256 in (KnownHashes)
| project TimeGenerated, DeviceName, FileName, FolderPath, SHA256, InitiatingProcessFileName
| extend HuntType = "HashMatch";
// 3. Behavioral: non-browser process writing Chrome Secure Preferences (KREMLIN forgery)
let SecurePrefTamper = DeviceFileEvents
| where TimeGenerated > ago(30d)
| where FolderPath has_any ("Chrome\\User Data", "Chromium\\User Data", "Edge\\User Data")
| where FileName in ("Secure Preferences", "Preferences")
| where InitiatingProcessFileName !in~ ("chrome.exe", "msedge.exe", "GoogleUpdate.exe", "MicrosoftEdgeUpdate.exe", "msedgeupdate.exe")
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, FolderPath, FileName
| extend HuntType = "SecurePreferencesTamper";
// 4. Behavioral: pkexec / SUID abuse (SysGoRAT PwnKit + ARMORY CASTLE escalation) via imported Linux logs
let PrivEsc = DeviceProcessEvents
| where TimeGenerated > ago(30d)
| where FileName in~ ("pkexec", "chmod")
| where ProcessCommandLine has_any ("GCONV_PATH", "u+s", "4755", "4711")
| project TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, AccountName
| extend HuntType = "LinuxPrivEsc";
union NetHits, HashHits, SecurePrefTamper, PrivEsc
| sort by TimeGenerated desc
PowerShell
# Security Arsenal IOC Hunt - REF9334 KREMLIN / ARMORY CASTLE artifacts
# Run elevated on Windows endpoints; outputs findings to CSV
$ErrorActionPreference = 'SilentlyContinue'
$findings = @()

# --- 1. KREMLIN: Chrome extensions present on disk but absent from Secure Preferences master list ---
$chromePaths = @(
    "$env:LOCALAPPDATA\Google\Chrome\User Data",
    "$env:LOCALAPPDATA\Chromium\User Data",
    "$env:LOCALAPPDATA\Microsoft\Edge\User Data"
)
foreach ($base in $chromePaths) {
    $profiles = Get-ChildItem -Path $base -Directory | Where-Object { $_.Name -match '^(Default|Profile)' }
    foreach ($profile in $profiles) {
        $securePref = Join-Path $profile.FullName 'Secure Preferences'
        $extDir = Join-Path $profile.FullName 'Extensions'
        if ((Test-Path $securePref) -and (Test-Path $extDir)) {
            $prefContent = Get-Content $securePref -Raw | ConvertFrom-Json
            $registered = $prefContent.extensions.settings.PSObject.Properties.Name
            $onDisk = Get-ChildItem $extDir -Directory | Select-Object -ExpandProperty Name
            foreach ($ext in $onDisk) {
                if ($registered -notcontains $ext) {
                    $findings += [PSCustomObject]@{
                        Hostname  = $env:COMPUTERNAME
                        Check     = 'UnregisteredExtension-KREMLIN'
                        Detail    = "Extension $ext on disk but not in Secure Preferences: $extDir"
                        Severity  = 'CRITICAL'
                        Timestamp = (Get-Date).ToString('o')
                    }
                }
            }
        }
    }
}

# --- 2. KREMLIN: Secure Preferences modified by non-browser process (file timestamp anomaly) ---
foreach ($base in $chromePaths) {
    Get-ChildItem -Path $base -Recurse -Filter 'Secure Preferences' | ForEach-Object {
        $age = (New-TimeSpan -Start $_.LastWriteTime -End (Get-Date)).TotalHours
        $browserRunning = Get-Process -Name chrome, msedge
        if ($age -lt 1 -and -not $browserRunning) {
            $findings += [PSCustomObject]@{
                Hostname  = $env:COMPUTERNAME
                Check     = 'SecurePrefsModifiedNoBrowser'
                Detail    = "$($_.FullName) modified $($_.LastWriteTime) with no browser process running"
                Severity  = 'HIGH'
                Timestamp = (Get-Date).ToString('o')
            }
        }
    }
}

# --- 3. Network: active/recent connections to SysGoRAT C2 and KREMLIN staging ---
$badIPs = @('88.119.167.57')
$conns = Get-NetTCPConnection | Where-Object { $badIPs -contains $_.RemoteAddress }
foreach ($c in $conns) {
    $proc = Get-Process -Id $c.OwningProcess
    $findings += [PSCustomObject]@{
        Hostname  = $env:COMPUTERNAME
        Check     = 'MaliciousC2Connection'
        Detail    = "$($proc.ProcessName) (PID $($c.OwningProcess)) -> $($c.RemoteAddress):$($c.RemotePort) [$($c.State)]"
        Severity  = 'CRITICAL'
        Timestamp = (Get-Date).ToString('o')
    }
}

# --- 4. DNS cache retro-check for KREMLIN staging domains ---
$badDomains = @('codecaudiog.site', 'codecvideowin.online')
$dnsCache = Get-DnsClientCache | Where-Object { $d = $_.Entry; $badDomains | Where-Object { $d -like "*$_*" } }
foreach ($d in $dnsCache) {
    $findings += [PSCustomObject]@{
        Hostname  = $env:COMPUTERNAME
        Check     = 'DNSCache-KremlinDomain'
        Detail    = "$($d.Entry) resolved to $($d.Data)"
        Severity  = 'HIGH'
        Timestamp = (Get-Date).ToString('o')
    }
}

# --- 5. Scheduled tasks / Run keys with suspicious script-interpreter persistence ---
$susTasks = Get-ScheduledTask | Where-Object {
    $_.Actions.Execute -match '(mshta|wscript|cscript|powershell|rundll32|regsvr32)' -and
    $_.Actions.Arguments -match '(http|\.ps1|\.js|\.vbs|temp|appdata)'
}
foreach ($t in $susTasks) {
    $findings += [PSCustomObject]@{
        Hostname  = $env:COMPUTERNAME
        Check     = 'SuspiciousScheduledTask'
        Detail    = "$($t.TaskName): $($t.Actions.Execute) $($t.Actions.Arguments)"
        Severity  = 'MEDIUM'
        Timestamp = (Get-Date).ToString('o')
    }
}

if ($findings.Count -gt 0) {
    $out = "$env:TEMP\arsenal_hunt_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv"
    $findings | Export-Csv -Path $out -NoTypeInformation
    Write-Host "[ALERT] $($findings.Count) findings written to $out" -ForegroundColor Red
    $findings | Format-Table -AutoSize
} else {
    Write-Host '[CLEAN] No indicators of KREMLIN, SysGoRAT, or ARMORY CASTLE artifacts found.' -ForegroundColor Green
}

Response Priorities

Immediate (0–4 hours)

  • Block codecaudiog.site, codecvideowin.online, and 88.119.167.57 at DNS, proxy, and egress firewall layers.
  • Push all listed SHA256/SHA1/MD5 hashes to EDR block lists and sweep 90 days of historical execution telemetry.
  • Identify every BeyondTrust Remote Support appliance in your environment. If unpatched against CVE-2026-102764, isolate from the network immediately and treat as presumptively compromised — this was exploited as a zero-day for ~7 weeks before disclosure.
  • Deploy the three Sigma rules and run the KQL union hunt across the full retention window.

24 Hours

  • Credential and session invalidation for KREMLIN exposure: any Brazilian banking sessions or financial portal credentials used from endpoints with unregistered extensions must be revoked and re-issued. KREMLIN steals live session tokens — password resets alone are insufficient; invalidate active sessions at the IdP and banking portal level.
  • Audit all Chrome/Edge extensions across the managed fleet; flag any extension ID on disk that does not appear in the browser's registered extension manifest.
  • For Linux estates: verify pkexec patch status (CVE-2021-4034) and scan web root directories for unauthorized files (web shells). Review database access logs for anomalous bulk reads.
  • For BeyondTrust appliances: collect forensic images before patching; look for SAWFLY webshell artifacts, BARECLAW tunneler processes, and binaries with unexpected SUID bits.

1 Week

  • Browser hardening: enforce enterprise extension allowlisting via Chrome Browser Cloud Management or Intune; block sideloading; alert on Secure Preferences modifications at the fleet level.
  • Appliance architecture: move BeyondTrust and similar remote access gateways behind a management plane unreachable from the internet; require jump-host access; enable full session recording.
  • Linux detection maturity: deploy auditd rules for pkexec invocation, SUID changes, and web-server-spawned shells; forward to SIEM. CL-UNK-1211's AI-generated payloads mean signatures will rot fast — behavioral detections are the durable investment.
  • Threat model update: add "AI-assisted adversary with rapid payload turnover" and "edge appliance zero-day" as named scenarios in tabletop exercises this quarter.

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.