Back to reports
highPhishing

OPERATION KLEIN CHANGES — Breakglass Intelligence Report

InvestigatedApril 3, 2026PublishedApril 3, 2026
Threat Actors:evolution (Jan 14 → Apr 2, 2026)'s full tunnel rotation historyOPSEC Failures4. Submit all IOCs to MalwareBazaar, ThreatFox, URLhaustunnel rotation patterns (new tunnel every 3-7 days)
trycloudflarekleinchangesratdll-sideloadingcloudflarewsfwsgidavtor

TLP: WHITE Date: 2026-04-03 Analyst: GHOST (Breakglass Intelligence) Classification: Cybercrime — Multi-Stage Malware via Cloudflare Tunnel Network Status: 3 TUNNELS LIVE / 2 TUNNELS DEAD (as of 2026-04-03T18:22Z) Related: Operation Crest Snake (2026-04-03), Operation Nutten Tunnel (2026-04-02)


Executive Summary

This investigation documents the klein-changes-slim-starter Cloudflare tunnel, which serves as the WSF dropper hosting node in a multi-tunnel malware delivery network previously identified in Operations Crest Snake and Nutten Tunnel. The tunnel hosts 6 Windows Script Files (WSF) that span the actor's operational history from January 14, 2026 through April 2, 2026, revealing a clear daily evolution in TTPs. The latest payload (UKApr02.wsf, deployed April 2) references a new staging tunnel (chubby-resident-airlines-converter) not previously documented, and shows the actor removing native DLL payloads in favor of a Python-only attack chain — a significant tactical shift within 24 hours. All 6 WSF files, 4 BAT stagers, and associated payloads have zero detections on VirusTotal and no prior reporting on any threat intelligence platform.

This is the same actor as Operations Crest Snake and Nutten Tunnel, confirmed by shared infrastructure (wet-envelope-beam-laser tunnel), identical SID (S-1-5-21-3343087317-1842942590-547433828-500), identical WsgiDAV platform, and consistent targeting patterns.

Key Findings

  • 6 WSF droppers spanning 4 months of actor evolution (Jan 14 → Apr 2, 2026)
  • NEW tunnel discovered: chubby-resident-airlines-converter[.]trycloudflare[.]com — BAT stager host for April campaigns (LIVE)
  • Tactical shift observed: April 1 campaign uses Python RATs + DLL sideloading; April 2 campaign drops the DLL entirely — Python-only
  • XOR decryption key extracted: vGTemXQ2PUmLBCzOAPieOYoLGTonlAQ4 (32-byte key for magde.dat shellcode blob)
  • Decrypted shellcode: 350,924 bytes with CALL+POP loader (337KB encrypted data blob + 13.5KB PEB-walking loader)
  • DLL compiled with GCC 15.1.0 (MinGW-Builds) — unusually current compiler version
  • 5 total tunnels referenced in WSF files, mapping the actor's full tunnel rotation history
  • ZERO prior detections — all IOCs completely novel

What Was Found vs. What Was Known

AspectPrior Reporting (Crest Snake)New Findings (Klein Changes)
WSF droppers1 (UKApr02.wsf reference)6 complete files with full source code
Tunnels mapped8 tunnels2 confirmed (triangle-county, peace-ray dead) + chubby-resident NEW
DLL analysisjopfgl.dll identified, magde.dat notedXOR key extracted, shellcode decrypted, GCC 15.1.0 compiler identified
Actor evolutionDLL→Python shift notedDaily evolution documented: DLL+Python (Apr 1) → Python-only (Apr 2)
Historical payloadsBack to Sep 2025Jan 14, 2026 WSF using triangle-county tunnel (now dead)
DLL namingjopfgl.dll, pnljjd.dllemand.dll (Apr 1 stager), 4 DLL names from Mar 26 WSF
PersistenceStartup BAT documentedTwo persistence scripts analyzed (1Mar23SU.bat + 1Mar23SU.txt) with 4 execution paths

Attack Chain Evolution — Timeline

January 14, 2026 — 1PhJ14.wsf (Earliest Klein Changes Payload)

1PhJ14.wsf → triangle-county-dangerous-soon.trycloudflare.com (DEAD)
  ├─ Downloads PhA1.txt → PhA1.bat → Executes (Stage 1)
  ├─ Sleeps 90 seconds
  └─ Downloads PhA2.txt → PhA2.bat → Executes (Stage 2)
  Staging dir: %USERPROFILE%\Contacts\

Note: 90-second sleep between stages (later reduced to 10 seconds by Mar 27).

March 25-26, 2026 — TheDll.wsf + UKMar26.wsf (DLL Sideloading Era)

TheDll.wsf + theDll.js → wet-envelope-beam-laser.trycloudflare.com (LIVE)
  ├─ regsvr32 /s pmgime.dll (silent DLL registration)
  └─ start rechung.pdf (German invoice decoy)

UKMar26.wsf → peace-ray-unnecessary-dave.trycloudflare.com (DEAD)
  ├─ regsvr32 /s As/dmmnknAsy.dll     (AsyncRAT?)
  ├─ regsvr32 /s An/pdmemeAna.dll     (AnyDesk?)
  ├─ regsvr32 /s Hv/klnaicHvvv.dll   (HVNC?)
  ├─ regsvr32 /s UK_vio/bgpdpduk-vio.dll (UK-targeted variant?)
  └─ start rechung.pdf (via wet-envelope, decoy)

Critical: 4 DLLs deployed simultaneously, categorized by subdirectories (As, An, Hv, UK_vio).

March 27, 2026 — UKMar27.wsf (Shift to BAT Stagers)

UKMar27.wsf → rover-earlier-baseline-karen.trycloudflare.com (DEAD)
  ├─ UKM301.txt → UKM301.bat → Execute → Wait 10s
  ├─ UKM302.txt → UKM302.bat → Execute → Wait 10s
  └─ UKM303.txt → UKM303.bat → Execute → Wait 10s
  Staging dir: %USERPROFILE%\Contacts\

Shift: Actor moves from direct DLL registration to multi-stage BAT downloaders. Three stages instead of two.

April 1, 2026 — UKA01 via chubby-resident (Python + DLL Hybrid)

UKApr02.wsf (Apr 1 variant) → chubby-resident-airlines-converter (LIVE)
  ├─ UKA011.txt → UKA011.bat (Stage 1: Downloader)
  │   ├─ Downloads 1Mar23MA.zip (16.7MB) → Python 3.12 x64 + 5 obfuscated .py RATs
  │   ├─ Downloads 1Mar23ST.zip (16.7MB) → Backup/stealer Python payload set
  │   ├─ Downloads 1MaDLL.zip (350KB) → jopfgl.dll + magde.dat (Early Bird injection DLL)
  │   └─ Downloads 1Mar23SU.txt → Startup persistence
  │   Source: highland-trend-src-distinct.trycloudflare.com
  │
  └─ UKA012.txt → UKA012.bat (Stage 2: Executor)
      ├─ Launches all .py in Python312x64\ directory
      ├─ regsvr32 /s %APPDATA%\TokenSys\emand.dll  ← NEW DLL NAME
      ├─ Kills Python parents of explorer.exe via WMI
      ├─ Hides directories (attrib +h)
      └─ Deletes all .bat files from Contacts (anti-forensics)

April 2, 2026 — UKA02 via chubby-resident (Python ONLY)

UKApr02.wsf → chubby-resident-airlines-converter (LIVE)
  ├─ UKA021.txt → UKA021.bat (Stage 1: Downloader)
  │   ├─ Downloads 1Mar23MA.zip (16.7MB) → Python 3.12 x64 + 5 obfuscated .py RATs
  │   ├─ Downloads 1Mar23ST.zip (16.7MB) → Backup/stealer Python payload set
  │   ├─ ** NO DLL DOWNLOAD ** ← DLL COMPONENT REMOVED
  │   └─ Downloads 1Mar23SU.txt → Startup persistence
  │
  └─ UKA022.txt → UKA022.bat (Stage 2: Executor)
      ├─ Launches all .py in Python312x64\ directory
      ├─ ** NO DLL REGISTRATION ** ← DLL STEP REMOVED
      ├─ Kills Python parents of explorer.exe via WMI
      ├─ Hides directories (attrib +h)
      └─ Deletes all .bat files from Contacts (anti-forensics)

CRITICAL EVOLUTION: The actor removed the DLL component between April 1 and April 2. This suggests either: (a) the DLL was being detected/flagged, (b) the Python payloads proved sufficient, or (c) the actor is testing which approach has better success rates.

DLL Analysis — jopfgl.dll (from 1MaDLL.zip)

PropertyValue
SHA2563ea83adc47138478ed646170b88581af441f24feeee7f8472868286aadb132fd
TypePE32+ DLL (x86-64), stripped
Size16,896 bytes
Compiled2026-03-30T10:03:18 UTC
CompilerGCC 15.1.0 (MinGW-Builds, x86_64-posix-seh-rev0)
ExportsDllRegisterServer, DllUnregisterServer, get_payload, inject_early_bird, xor_decrypt
XOR KeyvGTemXQ2PUmLBCzOAPieOYoLGTonlAQ4 (32 bytes, embedded in .rdata)

Decrypted Shellcode (magde.dat XOR decrypted)

PropertyValue
SHA256 (encrypted)f30b89d5fea624867c603d97de819f64e1eb18882d5fda157c877c89f82723e7
SHA256 (decrypted)22752253be3a10a4598bc8fc0a80810d397a32c0cd27637db92122dc28c95878
Size350,924 bytes
StructureCALL +0x525c0 → 337,344-byte encrypted data blob + 13,575-byte PEB-walking loader
Loader EntryPOP RCX; PUSH RBP; MOV RBP, RSP (x64 function prologue)
PatternIdentical to Nutten Tunnel shellcode architecture (CALL+POP, PEB walk)

Persistence Analysis — Dual Script System

1Mar23SU.txt (Current, Mar 27 2026)

Executes Python payloads from 4 locations on startup:

  1. %APPDATA%\Winic\30.3.0rc50\Python312x32\ — 32-bit Python, Mode 2 (kills explorer + nslookup parents)
  2. %USERPROFILE%\Contacts\Str\python312x64\ — 64-bit Python, Mode 1 (kills explorer parent only)
  3. %USERPROFILE%\Contacts\Str\python312x644\ — 64-bit Python duplicate
  4. Uses DiscordDial.vbs WMI helper for parent process termination

1Mar23SU.bat (Original, Dec 15 2025)

Earlier version using PowerShell for process killing instead of VBS/WMI:

  1. %USERPROFILE%\Videos\3DAus\python312x32\ — 32-bit Python
  2. %USERPROFILE%\Contacts\Str\python312x64\ — 64-bit Python

Evolution: Actor moved from PowerShell-based process termination (detectable by EDR) to VBS+WMI approach (stealthier).

Infrastructure Map — All Tunnels Referenced

#Tunnel SubdomainStatusRoleFirst SeenReferenced By
1klein-changes-slim-starterLIVEWSF dropper hosting2026-01-14Direct investigation target
2chubby-resident-airlines-converterLIVEBAT stager hosting (Apr 1-2)2026-04-01UKApr02.wsf, UKMar27.wsf→UKA01
3wet-envelope-beam-laserLIVEDLL + LNK + PDF decoy hosting2025-03-25TheDll.wsf, UKMar26.wsf, FSL_DE LNK
4highland-trend-src-distinctLIVEZIP payload hosting (Python+DLL)2025-11-28UKA011.txt, UKA021.txt
5triangle-county-dangerous-soonDEADHistorical BAT stager (Jan 2026)2026-01-141PhJ14.wsf
6peace-ray-unnecessary-daveDEADHistorical DLL host (Mar 2026)2026-03-26UKMar26.wsf
7rover-earlier-baseline-karenDEADHistorical BAT stager (Mar 2026)2026-03-27UKMar27.wsf
8crest-ind-snake-dublinLIVELure WSH hosting2026-04-02Crest Snake investigation
9requires-fortune-nutten-eligibleLIVEGerman lure campaign2026-03-23Nutten Tunnel investigation

Total mapped tunnels across all 3 investigations: 9

DLL Naming Pattern Analysis

The actor uses distinct DLL names across campaigns, suggesting modular payloads:

DLL NameCampaignSuspected PurposeTunnel
pnljjd.dllMar 25 (German LNK)Unknown (sideloaded via regsvr32)wet-envelope
pmgime.dllMar 25-26 (TheDll.wsf)Unknown (sideloaded via regsvr32)wet-envelope
dmmnknAsy.dllMar 26 (UKMar26)AsyncRAT variant (name contains "Asy")peace-ray
pdmemeAna.dllMar 26 (UKMar26)AnyDesk RAT (name contains "Ana")peace-ray
klnaicHvvv.dllMar 26 (UKMar26)HVNC (name contains "Hvvv")peace-ray
bgpdpduk-vio.dllMar 26 (UKMar26)UK-targeted variant (name contains "uk-vio")peace-ray
jopfgl.dllMar 30 (1MaDLL.zip)Early Bird APC injection loaderhighland-trend
emand.dllApr 1 (UKA012.bat)Unknown (extracted to TokenSys)highland-trend→local

Actor OPSEC Failures

  1. SID embedded in LNK: S-1-5-21-3343087317-1842942590-547433828-500 — Administrator account, consistent across campaigns
  2. VPS build environment: Machine name vps-756346 — numbered VPS, likely cloud instance
  3. XOR key in plaintext: vGTemXQ2PUmLBCzOAPieOYoLGTonlAQ4 — hardcoded in DLL .rdata section
  4. DLL naming reveals payload purpose: Asy=AsyncRAT, Ana=AnyDesk, Hvvv=HVNC, uk-vio=UK variant
  5. Date-based WSF naming: UKMar26, UKMar27, UKApr02 — reveals operational calendar
  6. Anonymous read-write WebDAV: All tunnels allow unauthenticated writes
  7. Evolution artifacts preserved: All 6 WSF files remain on klein-changes tunnel, showing full TTP evolution
  8. Compiler version: GCC 15.1.0 — very recent (released 2025), narrows developer profile

MITRE ATT&CK Mapping

TacticTechniqueIDApplication
Initial AccessPhishing: Spearphishing LinkT1566.002LNK files disguised as PDFs with Edge icon
ExecutionWindows Script HostT1059.005WSF/WSH/JS chain execution
ExecutionCommand and Scripting: BatchT1059.003Multi-stage BAT downloaders
ExecutionPythonT1059.006Kramer-obfuscated Python RAT payloads
ExecutionRegsvr32T1218.010DLL registration via regsvr32 /s
PersistenceBoot/Logon Autostart: Startup FolderT1547.001BAT files in Windows Startup
Defense EvasionDeobfuscate/Decode FilesT1140XOR decryption of shellcode, Kramer Python obfuscation
Defense EvasionHidden Files/DirectoriesT1564.001attrib +h on payload directories
Defense EvasionProcess Injection: Early Bird APCT1055.004inject_early_bird export in jopfgl.dll
Defense EvasionIndicator RemovalT1070.004Deletes all BAT files from Contacts after execution
Defense EvasionMasqueradingT1036.005Edge browser icon on LNK, .PDF extension
Command and ControlWeb ProtocolsT1071.001WebDAV over HTTPS via Cloudflare tunnels
Command and ControlProxy: External ProxyT1090.002Cloudflare CDN proxying hides origin
Lateral MovementLateral Tool TransferT1570WebDAV file copying between tunnels

IOC Summary

Network Indicators

IOCTypeStatus
klein-changes-slim-starter[.]trycloudflare[.]comDomainLIVE
chubby-resident-airlines-converter[.]trycloudflare[.]comDomainLIVE
wet-envelope-beam-laser[.]trycloudflare[.]comDomainLIVE
highland-trend-src-distinct[.]trycloudflare[.]comDomainLIVE
triangle-county-dangerous-soon[.]trycloudflare[.]comDomainDEAD
peace-ray-unnecessary-dave[.]trycloudflare[.]comDomainDEAD
rover-earlier-baseline-karen[.]trycloudflare[.]comDomainDEAD

File Indicators

WSF Droppers (from klein-changes tunnel)

SHA256FilenameDate
13a6420822dab0d4ca6c1b422c66e5dd3a59637588279097efe47f7e553eb8491PhJ14.wsf2026-01-14
f38cd6aa26981ba1eea4fb0ec8f9db212e518f65f28556e108ef74d92e4809b6TheDll.wsf2026-03-26
bd3a7e2805d2f6f371366d6847998843b98298a748c45dd3ef6014b85697c4aeUKMar26.wsf2026-03-27
6b45e1a38609b9b7f2f2508b0b38f700a75ee1ea9b6c548d1a086bd91863efc3UKMar27.wsf2026-03-30
79eb3a25e8cd93bda05e3f86897de2d057a776be68a95586eedad6566c79c2c4UKApr02.wsf2026-04-02
f2caaf774ab4ac5e7b5d9299117eb1bad22e025a2e530ffc29496456760390b6theDll.js2026-03-26

BAT Stagers (from chubby-resident tunnel)

SHA256FilenameDate
a05ca4e0e257ee5bd584ddd8dfdb3d5c9f6d87dbc46b7afe1c1e6a0ab6467c4eUKA011.txt2026-04-01
7fd6934f8fd8ef0e78ae37ab04f31aed8543a8bd2a1dac0b388ce8fe074c3086UKA012.txt2026-04-01
53dfef40de6d91c71ff6ae676a609bd1e82a70c6cf9478a89909ee7e258b516eUKA021.txt2026-04-02
218628edc95f7c425fad294048adca65e235ae3024f084c9afaf483f66f71b6cUKA022.txt2026-04-02

DLL Payloads

SHA256FilenameDescription
3ea83adc47138478ed646170b88581af441f24feeee7f8472868286aadb132fdjopfgl.dllEarly Bird APC injection DLL (GCC 15.1.0)
f30b89d5fea624867c603d97de819f64e1eb18882d5fda157c877c89f82723e7magde.datXOR-encrypted shellcode (350KB)
22752253be3a10a4598bc8fc0a80810d397a32c0cd27637db92122dc28c95878magde_decrypted.binDecrypted shellcode (CALL+POP loader)
314c2cb202e4cea8d63051325abe326dfb75ae2995e843f6e8eea247290f59a11MaDLL.zipDLL payload archive

LNK Lure

SHA256FilenameDescription
5e112f4229dd70373d9d348fc649a1de971243c610f83e80b95a24910375b28eFSL_DE_INV_24032026_238969_EML.PDF.lnkGerman invoice lure (Edge icon disguise)

Persistence Scripts

SHA256FilenameDescription
766ab64ffd028972b40e7c171525891b1f06a9d381b3f5072de82d77b29f7682init.cmdDLL self-registration script

Behavioral Indicators

  • Staging directory: %USERPROFILE%\Contacts\ (all campaigns)
  • Python install: %USERPROFILE%\Contacts\MainRingtones\python312x64\
  • Backup Python: %USERPROFILE%\Contacts\str\python312x64\
  • 32-bit Python: %APPDATA%\Winic\30.3.0rc50\Python312x32\
  • DLL staging: %APPDATA%\TokenSys\ (Apr 1 only)
  • Persistence: Random-named .bat in %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\
  • VBS helper: %USERPROFILE%\Contacts\DiscordDial.vbs (WMI process termination)
  • VBS launcher: %USERPROFILE%\Contacts\rhn.vbs / rhnE.vbs (hidden window relaunch)
  • Temp directory: %USERPROFILE%\Contacts\docuts\ (ZIP extraction, deleted after)
  • XOR Key: vGTemXQ2PUmLBCzOAPieOYoLGTonlAQ4
  • SID: S-1-5-21-3343087317-1842942590-547433828-500
  • Machine Name: vps-756346

Immediate (24-48 hours)

  1. Block all 9 trycloudflare tunnel domains at DNS/proxy level
  2. Hunt for %USERPROFILE%\Contacts\MainRingtones\ and %USERPROFILE%\Contacts\str\ directories
  3. Check Windows Startup folder for unknown .bat files
  4. Search for DiscordDial.vbs and rhn.vbs in Contacts folder
  5. Monitor regsvr32 execution with WebDAV UNC paths

Short-term (1-2 weeks)

  1. Deploy YARA rules for WSF dropper patterns and DLL exports
  2. Deploy Suricata rules for WsgiDAV WebDAV traffic patterns
  3. Monitor Cloudflare Quick Tunnel DNS for new subdomains by this actor
  4. Submit all IOCs to MalwareBazaar, ThreatFox, URLhaus

Medium-term (1-3 months)

  1. Monitor highland-trend tunnel for payload updates (refreshed daily)
  2. Track actor tunnel rotation patterns (new tunnel every 3-7 days)
  3. Watch for GCC 15.1.0 MinGW-built DLLs with similar export patterns

References

Share