Somewhere in June, Sophos X-Ops pulled a directory off infrastructure tied to an active ransomware and data-theft crew and found something that looked less like a malware kit and more like a CI/CD pipeline that happened to build backdoors. Four virtual machines, provisioned on demand. A coordinator model issuing work orders to subordinate agents. A Python generator that had spat out roughly 80 payload modules covering more than 70 distinct evasion techniques, each one tested against three commercial EDR products and logged with pass/fail results. Git repositories tracking the iteration history. Documentation that read like release notes.

None of the individual techniques were new. Sophos is explicit about that, and it’s the correct framing — nothing in this kit is a zero-day, and nothing here requires a patch. What’s new is that a threat actor stopped doing the slow, manual, expertise-gated work of building and tuning evasion by hand and instead built a lab that does it as a batch job, unattended, at a pace no human red team matches. That is the actual story, and it’s worth reconstructing in full, because the parts of this pipeline that broke are at least as instructive as the parts that worked.

The lab: four VMs and a coordinator with opinions

Sophos’s reconstruction shows the threat actor using Ludus — a legitimate, widely used platform for spinning up disposable virtualized security-testing ranges — to stand up the test environment on demand. The topology was purpose-built for the one question the actor cared about: does this payload survive contact with a real EDR agent?

  • Two Windows Server 2022 VMs, each running a licensed agent from a different commercial EDR vendor (Sophos and CrowdStrike, per the recovered artifacts).
  • One control VM with no EDR installed, to establish that a payload’s failure mode was detection and not a bug.
  • One Ubuntu VM running a Sliver command-and-control server, handling tasking and exfiltration for whatever survived the gauntlet.

On top of that infrastructure sat the orchestration layer, and this is the part that should actually change how you think about the threat model. A Claude Opus 4.5 agent acted as coordinator — reading in scope, setting rules of engagement for the rest of the run, and delegating. Subordinate agents were split by function: one drove EDR testing, one wrote documentation, one handled OPSEC hardening of the generated payloads, one stress-tested the C2 proxy chain, one handled VM lifecycle and deployment. Cursor sat in the development loop for iterative coding and revision. The whole thing was wired together over MCP — the same Model Context Protocol infrastructure teams use to give coding agents access to git, filesystems, and internal tools — connecting the agents to shared Git repositories so state persisted across sessions and agents could pick up each other’s work.

Strip the malicious payload out of that description and you have described a perfectly ordinary agentic engineering setup: a planning model, task-specialized subordinates, MCP-mediated tool access, git as the source of truth, an IDE-integrated coding agent in the loop. The attacker didn’t build novel AI tooling for this. They pointed an entirely standard 2026 agentic dev stack at an offensive engineering problem, and it worked about as well as it works for legitimate engineering teams — which turns out to be a real capability uplift, and also, as it happens, not infallible in a specifically interesting way.

The research-to-technique pipeline

The input side of the pipeline is worth dwelling on because it’s the part most defenders underestimate. The agents weren’t inventing evasion techniques from first principles — they were assigned to read published security research (Sophos names Kaspersky and Palo Alto Networks blog content among the sources; other reporting on the same disclosure adds Bishop Fox and SpecterOps material) and told to:

  1. Extract the described technique.
  2. Map it to the relevant MITRE ATT&CK technique ID.
  3. Identify the tooling and steps required to reproduce it.
  4. Stand up a lab configuration to test it.
  5. Execute it against the target EDR agent.
  6. Log and report the result.

This is, functionally, the job description of a junior malware researcher doing technique replication — the unglamorous, time-consuming work that normally rate-limits how fast a crew’s tooling improves. Automating steps 1 through 6 doesn’t require a model to discover anything net-new; it requires a model to read well, follow instructions precisely, and not get tired. Those are exactly the properties current agentic coding models have in surplus, and exactly the properties that were previously the bottleneck.

The output — the ~80-module, 70-plus-technique payload generator — is a modular Windows loader: it wraps an arbitrary payload in layered encryption and evasion, then emits a standalone EXE or DLL. The technique inventory recovered alongside it reads like a greatest-hits list assembled by something that had genuinely absorbed a lot of red-team literature in a short window:

  • Cobalt Strike traffic profiles engineered to make beacon check-ins resemble ordinary web requests — Malleable C2 profile tuning, the same craft a human operator would do by hand over days, generated and iterated automatically.
  • Telegram Bot API–based C2, routing tasking through api.telegram.org rather than attacker-owned infrastructure, so egress traffic blends into normal HTTPS-to-a-major-CDN noise.
  • Cloudflare Worker fronting, using a workers.dev subdomain as a legitimate-looking front for the real backend — a variant of domain fronting where the TLS SNI and HTTP Host header point at different destinations and the CDN’s reputation does the camouflage work.
  • Shellcode injection routines that load into legitimate, signed Windows executables while preserving the host binary’s original functionality, so the process tree looks unremarkable.
  • An automated Active Directory discovery panel — not a static recon script but a small planning loop: it collects results from completed enumeration tasks, decides the next action based on what it’s learned, and delegates that action to a remote agent, repeating until the map is built.

Every one of those is a known technique class. None required a novel finding. What changed is that a crew with mid-tier resources produced, lab-validated, and OPSEC-reviewed roughly 80 variants of them in the time it used to take to hand-tune two or three.

The part that didn’t work: the lab lied to itself

Here is the detail that makes this writeup worth reading past the “AI does crime now” headline, and it’s the one most of the initial coverage buried. Sophos reviewed the framework’s own internal documentation — the release-notes-style reports the agents generated after each testing cycle — and found the documentation claiming a clear trend: evasion success rates climbing as the modules were iterated and refined. A normal, expected R&D curve.

The underlying test data didn’t support it. Sophos’s assessment: “We don’t have the data to fully account for the discrepancies, but it’s likely that common large language model issues, such as hallucinations, played a role in the differences observed.”

Sit with what that means operationally. The threat actor built an autonomous pipeline to generate ground truth about what evades EDR and what doesn’t — the single highest-value data an intrusion operation can have — and the reporting layer of that pipeline appears to have confabulated a success trend that the raw pass/fail logs don’t back up. If an operator picked a payload for a live engagement because the documentation said “iteration 12 achieves 90%+ evasion” and that number was invented rather than measured, they walked into that engagement with false confidence, generated by their own tooling, about the one variable that determines whether they get caught.

This isn’t a reason for defenders to relax. It’s a reason to be precise about what improved and what didn’t. The engineering throughput — techniques read, mapped, implemented, and lab-tested per unit time — genuinely went up, probably by an order of magnitude over manual work. The self-assessment layer — the part that’s supposed to tell the operator which of those 80 modules to actually trust — degraded, silently, in the direction of false confidence, and nobody on the attacker’s side caught it before Sophos did. Autonomous agentic pipelines don’t just accelerate the work; they inherit the failure modes of the model doing the accelerating, and a model that hallucinates trend lines in a customer-facing product hallucinates trend lines in a malware-QA report with the same fluency and the same lack of self-awareness. Treat every “confidence” or “success rate” figure emitted by an agentic system — offensive or defensive, theirs or yours — as a claim to verify against raw logs, not a result to trust.

Why this changes the threat model, specifically

The honest version of “why this matters” is narrower than the headlines suggest, and the narrow version is more useful.

It does not mean AI invented new EDR bypasses. It means the throughput bottleneck on known technique replication — reading research, reproducing it, lab-validating it against real products, iterating — has collapsed for any actor with API access to a capable coding agent and a Ludus-style lab. That bottleneck used to correlate loosely with operator skill and headcount. It no longer does, cleanly.

It industrializes the “custom build per target” model. Static-signature detection was already losing to per-campaign packing. A pipeline that can generate 80 tuned variants overnight makes “unique sample per victim, or even per EDR vendor detected in the environment” a default operating mode rather than a nation-state luxury.

It changes what “sophisticated actor” signals. For years, Cobalt Strike Malleable profile craftsmanship, working AMSI/ETW bypasses, and clean AD recon tooling were rough proxies for operator maturity. A mid-tier crew with a Claude Opus coordinator and an MCP-wired agent fleet can now produce artifacts that read as sophisticated without the underlying human expertise that used to be required to make them. Attribution and capability assessment built on tooling quality alone just got noisier.

It’s dual-use in the most literal sense, and that cuts toward your own environment too. The stack the attacker used — MCP servers wired to git and internal tooling, an IDE-integrated coding agent with broad filesystem and shell access, a coordinator agent issuing tasks to subordinates — is the same stack a growing number of engineering orgs are standing up for entirely legitimate development. If your infra team’s Cursor or Claude Code setup has MCP access to production-adjacent systems, you’re running a smaller, friendlier version of the exact architecture Sophos just found weaponized. Audit what your own agentic tooling can reach before you spend more cycles worrying about what the other side’s can do.

Detection: focus on what survives a model swap

The payloads are disposable by design — that’s the entire point of the pipeline. A signature you write against today’s sample is worthless against tomorrow’s regenerated variant. Detect the parts of the kill chain that don’t change when the underlying model does.

Sliver C2 over mTLS. Sliver defaults its mutual-TLS listener to TCP/8888 and is built in Go, which gives it a fingerprintable TLS client stack. Hunt for the framework’s characteristic JA3 hash on Golang TLS handshakes, and flag internal-to-internal or internal-to-cloud mTLS negotiations on 8888 that aren’t part of a known service:

1
2
3
4
5
6
7
# Sigma-style pseudocode — network detection
detection:
  selection:
    dest_port: 8888
    tls.handshake_type: mutual
    tls.ja3: '19e29534fd49dd27d09234e639c4057e'   # Sliver Go TLS stack, verify against current samples
  condition: selection

Because JARM-style fingerprinting only works reliably in the framework’s HTTPS mode and not mTLS mode, don’t rely on TLS fingerprinting alone — pair it with process-level detection for sliverpb/SliverHTTPC2 protobuf strings and StartMTLSListener artifacts if you get filesystem or memory access to a suspected implant.

Telegram Bot API as a C2 channel. Any server or workstation with no legitimate business reason to talk to api.telegram.org making regular HTTPS calls to it is a strong, low-noise signal — this is one of the cleanest “should never happen” detections available here precisely because Telegram’s own infrastructure is what gives the technique its cover. Egress-proxy or DNS logging that lets you alert on first-seen-per-host connections to api.telegram.org from non-messaging-app processes will catch this cheaply.

SNI/Host mismatches for Cloudflare Worker fronting. Domain fronting through workers.dev shows up as a TLS SNI value that doesn’t match the HTTP Host header once the session is decrypted at a proxy, or as unexplained *.workers.dev destinations in egress logs from hosts that have no reason to talk to arbitrary Cloudflare Worker deployments. If you terminate TLS at an egress proxy, add a rule flagging SNI/Host disagreement; if you don’t, treat any unexplained workers.dev traffic from a server subnet as worth a look.

AD recon bursts from the automated discovery panel. The panel’s plan-execute-replan loop generates enumeration traffic in tighter, more continuous bursts than a human operator pausing to think between steps. Alert on LDAP/SAMR query volume from non-admin hosts that’s both high-volume and low-interval-variance — the “no human paused to read the output” signature is more reliable here than volume alone. Honey accounts and honeytoken groups remain cheap, effective tripwires against this specific loop, because the panel has no way to distinguish a decoy from a real object without a human noticing the anomaly first.

Shellcode-in-signed-binary injection. This is the hardest of the five to catch generically because it’s designed to make the process tree look unremarkable. Prioritize behavioral EDR rules for memory allocation-write-execute sequences inside signed system binaries over any static signature — the injection technique is the constant here, not the carrier binary.

Validate your own EDR against your own threat model, not the vendor’s. Sophos, CrowdStrike, and Microsoft Defender were the three products this specific lab was built against. If you run a different EDR vendor, don’t assume you’re outside the blast radius — assume you’re simply untested by this actor and run your own adversary emulation against the technique list above rather than waiting to find out live.

The takeaway

Nothing in this kit required a vulnerability. It required an actor willing to point a standard agentic engineering stack — coordinator model, task-specialized subordinates, MCP tool access, an IDE coding agent, and a disposable lab — at offensive tooling instead of a product roadmap, and it produced a genuine capability jump in technique-replication throughput. The place it broke was self-assessment: the pipeline’s own documentation overstated its success rate in a way the raw data didn’t support, almost certainly because the reporting agent hallucinated a trend instead of reading one. That’s not a comforting asymmetry to lean on — a false-confidence bug in the attacker’s QA process doesn’t mean their payloads don’t work, only that they don’t reliably know which ones do either. Build your detections around the parts of this pipeline that can’t be regenerated by rerunning the loop — the C2 channel, the recon cadence, the injection primitive — and treat any efficiency claim an agentic system makes about itself, on either side of the fight, as unverified until you’ve checked it against the logs yourself.