The acceleration curve — June baseline vs July refresh
The Phoenix Security Malware Package Intelligence corpus now spans 106 tracked campaigns and 1,868 curated malicious-package IOCs, with a full-corpus population of 473,936 records. In the six weeks since the June baseline, the corpus roughly doubled. When you plot that corpus year by year, the curve does not look like growth — it looks like ignition.
Campaign and package volume by year — Phoenix MPI corpus
2026 month-by-month — new campaigns and packages (Jan–Jun)
Ecosystem breakdown
npm’s share has widened since the June baseline — from 79% to 85% as the Miasma and IronWorm npm waves landed. PyPI stays the steady second front. Python attacks are lower-volume and higher-precision (RATs, credential stealers, banking trojans); Node attacks are worm-driven cascades. The full-corpus population picture is even more npm-dominated: 93.2%.
IOC distribution by ecosystem — 657 indexed packages
The VS Code frontier — 0 to 7 campaigns in 18 months
VS Code / OpenVSX campaign chronology
AI agent skills and MCP — the dirtiest new surface
Beyond the package registries and the IDE extension marketplaces, the platform separately indexes and scans AI-agent skills. The numbers from a focused deep-scan run on 2026-05-24 are the clearest internal signal of the AI-shift thesis: skills carry a markedly higher risk rate than IDE extensions, and more than 1 in 4 deep-scanned skills triggered a critical-risk finding.
Risk rate comparison — AI-agent skills vs IDE extensions (knostic scan, Phoenix MPI)
AI-agent skills — detection rule hits driving critical findings
The most-triggered detection rules in critical-rated skills reveal a consistent pattern: shell command execution combined with network egress. These are skills that quietly run OS commands and phone home — the same primitive that defines postinstall-hook malware, now embedded in agent tooling. Popularity provides no safety signal: a setup-deploy skill in a 97,000-star repository appeared in the critical set.
| Detection rule | Hits | What it catches |
|---|---|---|
| CS-009 | 3,603 | Command / shell execution — skill invokes OS shell, subprocess, or eval |
| NS-002 | 2,075 | Network egress — outbound connections to unconfigured external endpoints |
| RD-003 | 1,302 | Remote data read — fetches remote instructions or payloads at runtime |
| NS-008 | 1,089 | Suspicious network pattern — C2-consistent beacon or exfiltration pattern |
CLAUDE.md entry (Miasma Wave 2), or a rogue MCP tool call (SANDWORM_MODE). The assistant executes the instruction as part of normal operation, exfiltrating secrets without the developer ever running a suspicious binary. The AI is not compromised — it is used as intended, against the developer.
Three attack surfaces — risk rate and detonation point
Confirmed campaigns targeting AI agent tooling — Skills, MCP, and coding-assistant context
| Campaign | Period | Vector | Technique |
|---|---|---|---|
| SANDWORM_MODE | Feb 2026 | MCP server injection | Git hook template abuse; AI MCP tool poisoning; Session P2P C2 |
| TrapDoor | May 2026 | Zero-width Unicode in .cursorrules / CLAUDE.md | Hidden instructions trick assistant into running “security scan” that exfiltrates secrets |
| Miasma Wave 2 | Jun 2026 | AI IDE config injection (Claude Code, Cursor, Gemini) | Drops backdoor configs into project dirs; binding.gyp detonation; future AI-generated code poisoned |
| GlassWorm (invisible Unicode) | Oct 2025– | OpenVSX extension → AI-agent context | Invisible-Unicode steganography born in VSX; technique jumped to AI-skill vector |
| Mini Shai-Hulud (SAP CAP wave) | Apr 2026 | Claude Code SessionStart hook + VS Code tasks.json folderOpen | Persistence survives package uninstall; re-runs credential harvest on every session |
Behavioral package scanning powered by PHX-Neural — our proprietary scoring model. Scored nicegui@3.12.0 at 100/100 risk with zero CVEs assigned, days before the registry acted. The only supply chain scanner operating in the zero-CVE gap where attackers live.
Threat actor breakdown
Actor archetypes — campaign count and operating model
Key campaigns — May/June 2026 (densest 6 weeks on record)
157-byte binding.gyp bypasses –ignore-scripts and all lifecycle monitors. Downloads Bun to evade Node.js EDR. AI IDE backdoors injected into Claude Code, Cursor, Gemini configs.
Full analysis on Phoenix Security blog86 env vars swept. eBPF rootkit hides process. Tor C2. OIDC tokenless self-propagation. Sweeps all 2026 AI provider keys. Generational step from JS post-install scripts.
Full analysis on Phoenix Security blogGCP/Azure identity enumeration (not just static extraction). EDR checks CrowdStrike/SentinelOne pre-execution. Unique per-infection encrypted payloads. Sigstore provenance forgery.
Full analysis on Phoenix Security blogworkflow_dispatch dormant backdoors activatable via GitHub API at any future time. Forged CI-bot identities with Sep 2001 timestamps. CISA issued advisory.
Full analysis on Phoenix Security blognpm + PyPI + Crates.io simultaneously. .cursorrules and CLAUDE.md injected with hidden Unicode instructions — AI assistant runs “security scan” that exfiltrates secrets. PRs to langchain, browser-use.
Full analysis on Phoenix Security blogGitHub fork tag-redirect — official repo appears clean. PHP autoload fires on every app boot. Self-deletes from disk. Targets 1Password, KeePass, HashiCorp Vault, AWS, CircleCI.
Full analysis on Phoenix Security blogTechnique frequency across 59 campaigns
Credential and token theft now appears in 41 of 59 campaigns — it is the fuel for self-propagation. A stolen npm token republishes the worm. A stolen GitHub PAT creates the dead-drop. Removing the token is the worm’s kill switch.
Technique frequency — campaigns using each TTP
| Technique | Campaigns | Trend |
|---|---|---|
| Credential / token theft (T1552) | ~80 | |
| Self-propagating worm (T1195.001) | 27 | |
| Crypto / wallet theft | 20 | |
| AI / LLM / agent tooling targeting | 56 | |
| CI/CD compromise (T1195.002) | 13 | |
| Typosquatting (T1036.004) | 13 | |
| VS Code / extension abuse | 12 | |
| Maintainer account takeover | 10 | |
| Invisible / zero-width Unicode | 6 | |
| Install / postinstall lifecycle hooks | 5 |
What attackers impersonate
The impersonation map confirms the AI shift. Modern front-end framework scopes and AI tooling now dominate, displacing the generic utility typosquatting that characterized earlier years.
Brand / library impersonation frequency in malicious package names
New techniques introduced 2025–2026
Each technique in this table bypasses a previously recommended mitigation. The Phantom Gyp bypass makes the –ignore-scripts guidance from September 2025 structurally incomplete by June 2026.
Novel attack techniques and what they bypass
| Technique | Campaign | Bypasses |
|---|---|---|
| Phantom Gyp (binding.gyp shell substitution) | Miasma Wave 2 | All –ignore-scripts + lifecycle monitors |
| AI tool config poisoning (.cursorrules / CLAUDE.md) | TrapDoor, Miasma Wave 2 | Developer review — AI assistant becomes exfiltrator |
| Python-to-JS execution bridge | PyTorch Lightning | PyPI signature verification (Python-only scope) |
| Bun runtime download | Mini Shai-Hulud, Miasma | Node.js process monitoring — EDR monitors node not bun |
| ICP canister C2 | CanisterWorm, Namastex | Conventional domain takedown |
| GitHub fork tag-redirect | Laravel-Lang, actions-cool | Official repo appears clean in any code view |
| SLSA Level 3 / Sigstore provenance forgery | TeamPCP Wave 3, Miasma | Sigstore-based artifact verification |
| EDR enumeration before execution | Miasma Wave 1 | Checks CrowdStrike / SentinelOne / Carbon Black pre-run |
| Unique per-infection encrypted payload | Miasma Wave 1 | Version-hash fingerprinting and detection |
Enriched malware families — top categories in human-attributed records
“Multi-stage AI toolchain poisoning” is the single most common enriched malware family in the corpus — the clearest internal signal of the AI-shift thesis. The near-even split between compromised legitimate packages and attacker-published packages confirms that maintainer account takeover is now as common as outright malicious publishing.
| Malware family | Records |
|---|---|
| Multi-stage AI toolchain poisoning | 9 |
| Browser-executed credential theft | 7 |
| Crypto-wallet hijackers | 6 |
| Scavenger (node-gyp.dll) | 5 |
| Cross-platform RAT | 4 |
| DanaBot / JarkaStealer (Java) | 4 |
| Linux backdoor (install-time) | 3 |
| TruffleHog + credential harvesting | 2 |
Behavioral package scanning powered by PHX-Neural — our proprietary scoring model. Scored nicegui@3.12.0 at 100/100 risk with zero CVEs assigned, days before the registry acted. The only supply chain scanner operating in the zero-CVE gap where attackers live.
Key detection IOCs — confirmed across corpus
216.126.225.129:8443 — MEGALODON_CI C2
t.m-kosche[.]com — atool/AntV fake OTel collector C2
zero.masscan[.]cloud:443/v1/telemetry — Mini Shai-Hulud C2
flipboxstudio[.]info — Laravel-Lang C2
ddjidd564.github[.]io — TrapDoor PyPI remote payload
binding.gyp SHA-256: ef641e956f91d501b748085996303c96a64d67f63bfeef0dda175e5aa19cca90
Repo pattern: "Miasma: The Spreading Blight" OR reversed "niagA oG eW ereH :duluH-iahS"
Commit identity: claude@users.noreply.github.com (spoofed automation)
GitHub search: Q0I9Imh0dHA6Ly8yMTYu (MEGALODON_CI injection marker)