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

2024: 6 campaigns, 30 packages. 2025: 14 campaigns, 111 packages. 2026 H1: 37 campaigns, 497 packages.
2026 (to 15 Jul) = 52 campaigns, 1,500 IOCs. 2026 has already produced 1.5× the campaigns and roughly 4.8× the curated IOCs of all of 2025. 2025 itself was ~5× 2024.

2026 month-by-month — new campaigns and packages (Jan–Jun)

Jan: 2 campaigns 4 pkgs. Feb: 3/26. Mar: 6/21. Apr: 8/26. May: 14/346. Jun to 7th: 4/74.
May 2026 remains the peak (13 campaigns / 731 IOCs), driven by mass-propagation worms. June is now a full-month figure (7 / 227). The single July campaign is the AsyncAPI compromise — low package count, disproportionately high significance.

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

npm 79.3%, PyPI 9.0%, VSX 6.2%, others 5.5%.
npm — 1,582 packages, 66 campaigns (84.7%)
PyPI — 155 packages, 31 campaigns (8.3%)
VS Code / OpenVSX — 60 packages, 7 campaigns (3.2%)
Go / Rust / Cargo — 26 packages (1.4%)
GitHub Actions / NuGet / Docker / Other — 45 packages (2.4%)

The VS Code frontier — 0 to 7 campaigns in 18 months

VS Code / OpenVSX campaign chronology

VS Code malicious extension campaign timeline Oct 2024 to May 2026 Seven campaigns from VSCode Crypto impersonation in Oct 2024 through TeamPCP GitHub breach in May 2026, with detection counts rising from 27 to 105. Oct 2024 VSCode Crypto/Zoom Impersonation 18 extensions · AES PowerShell dropper Oct 2025 GlassWorm Wave 1 — Invisible Unicode 35,800 downloads · Solana C2 · self-propagating Jan 2026 MaliciousCorgi — AI Chatbot Spyware 1.5M installs · full file contents exfiltrated Feb 2026 OX Security VSCode CVEs 128M combined install exposure · 4 extensions Mar 2026 TeamPCP CI/CD Siege OpenVSX extensions inside 5-day attack chain Apr 2026 GlassWorm Wave 3 — 73 Clones + Zig Dropper Cross-IDE · 320+ artifacts since Dec 2025 May 2026 · CRITICAL TeamPCP — GitHub Internal Breach Detections 27 → 105 (4×)
ReversingLabs: malicious VS Code extension detections grew from 27 in 2024 to 105 in the first 10 months of 2025 — nearly quadrupled. The GitHub breach via poisoned VS Code extension is the highest-value confirmed impact in the corpus.

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)

VS Code / OpenVSX extensions
6.9%
flagged unhealthy / risky of those scanned
~34,300 indexed
11,909 scanned
820 flagged
AI-agent skills
15.6%
flagged unhealthy / risky of those scanned
~43,900 indexed
42,480 scanned
6,606 flagged
Deep-scan risk breakdown — 3,267 AI-agent skills (2026-05-24)
Critical
854 (26.1%)
High
74 (2.3%)
Medium
74 (2.3%)
Low
46 (1.4%)
Safe
2,219 (67.9%)

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 ruleHitsWhat it catches
CS-0093,603Command / shell execution — skill invokes OS shell, subprocess, or eval
NS-0022,075Network egress — outbound connections to unconfigured external endpoints
RD-0031,302Remote data read — fetches remote instructions or payloads at runtime
NS-0081,089Suspicious network pattern — C2-consistent beacon or exfiltration pattern
The skills attack model: an AI coding assistant (Claude Code, Cursor, Copilot) loads a project-level skill or MCP server. That skill contains hidden instructions — delivered via zero-width Unicode (TrapDoor), a malicious 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

Comparison of three supply chain attack surfaces: npm packages, IDE extensions, AI agent skills npm packages 79.3% of IOCs detonate at install time; IDE extensions 6.9% risk rate detonate at workspace open; AI agent skills 15.6% risk rate detonate at agent session start or context load. npm packages 79% of corpus IOCs Detonates: npm install postinstall / preinstall / binding.gyp IDE extensions 6.9% risk rate (of scanned) Detonates: workspace open tasks.json folderOpen / extension activation AI-agent skills 15.6% risk rate (of scanned) Detonates: agent session / load CLAUDE.md / .cursorrules / MCP tool call 2.3× higher risk rate than IDE extensions

Confirmed campaigns targeting AI agent tooling — Skills, MCP, and coding-assistant context

CampaignPeriodVectorTechnique
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
External validation: Snyk’s ToxicSkills research documents malicious AI-agent skills (ClawHub). Datadog’s open dataset now formally tracks “AI Skills” and “IDE extensions” as first-class malware ecosystems — independent confirmation of this attack class.
Zero CVEs across all 106 campaigns during active exploitation. CVE-feed scanners had no detection surface for any campaign in this corpus. The attack surface is a trust assumption — a maintained package, a trusted publisher, a legitimate CI identity — not a code defect. No CVE gets issued because there is no flawed code path to assign one to.
Phoenix Blue Shield
Detect malicious packages before a CVE exists

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.

Get protected Download full PDF report
1,868
IOCs indexed
0
CVEs needed
106
Campaigns caught

Threat actor breakdown

Actor archetypes — campaign count and operating model

Threat actor comparison: TeamPCP 26 campaigns automated, Shai-Hulud lineage 14 self-replicating, DPRK 9 social-engineering, IronWorm 1 nation-state capability Four threat actor groups shown as horizontal bars comparing campaign count and operating model. TeamPCP (UNC6780) 19 campaigns · automated, multi-ecosystem 26 Shai-Hulud lineage (incl. Mini variants) 14 campaigns · self-replicating npm worms 20 DPRK (Lazarus / Contagious Interview) 9 campaigns · social-engineering, fake recruits 14 IronWorm (Jun 2026) — Rust · eBPF rootkit · Tor C2 · OIDC self-propagation — generational capability jump

Key campaigns — May/June 2026 (densest 6 weeks on record)

Miasma / Shai-Hulud derivative
Miasma Wave 2 — Phantom Gyp binding.gyp Bypass
Jun 2–3, 2026 57 packages 286 malicious versions Under 2 hours

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 blog
Unknown / Nation-state capability level
IronWorm — Rust eBPF Rootkit, Tor C2, OIDC Self-Propagation
Jun 2026 37 packages 9 organizations 976 KB Rust binary

86 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 blog
Unknown / Shai-Hulud derivative
Miasma Wave 1 — Red Hat @redhat-cloud-services npm
Jun 1, 2026 32+ packages 116,991 weekly DLs

GCP/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 blog
Unknown
Megalodon — Mass GitHub Actions Backdoor (5,561 Repos)
May 18, 2026 5,718 commits 6 hours CISA advisory

workflow_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 blog
Unknown / ddjidd564 cluster
TrapDoor — AI Coding Assistant Poisoning via Zero-Width Unicode
May 19–22, 2026 34 packages 384 versions 3 ecosystems

npm + 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 blog
Unknown
Laravel-Lang Composer — 233 Versions, 700 Repos, 15 Minutes
May 22, 2026 Packagist/PHP 15 credential modules

GitHub 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 blog

Technique 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

TechniqueCampaignsTrend
Credential / token theft (T1552)~80
Self-propagating worm (T1195.001)27
Crypto / wallet theft20
AI / LLM / agent tooling targeting56
▲ fastest growing
CI/CD compromise (T1195.002)13
Typosquatting (T1036.004)13
VS Code / extension abuse12
Maintainer account takeover10
Invisible / zero-width Unicode6
▲ new in 2026
Install / postinstall lifecycle hooks5
73%
of indexed packages carry a pinned malicious version — precise, exact-version blockable IOCs
9 / 59
campaigns are cross-ecosystem — attackers no longer specialise in one registry (TrapDoor hit npm + PyPI + Crates.io simultaneously)

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

TanStack 108 occurrences, UiPath 67, SolidJS 26, React 25, Mistral AI 19, ESLint 17, Vue 14, Tailwind 12.
TanStack (108) and UiPath (67) lead. AI tooling — Mistral, LiteLLM — clusters in the top tier alongside modern front-end frameworks. Attackers follow install volume.

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

TechniqueCampaignBypasses
Phantom Gyp (binding.gyp shell substitution)Miasma Wave 2All –ignore-scripts + lifecycle monitors
AI tool config poisoning (.cursorrules / CLAUDE.md)TrapDoor, Miasma Wave 2Developer review — AI assistant becomes exfiltrator
Python-to-JS execution bridgePyTorch LightningPyPI signature verification (Python-only scope)
Bun runtime downloadMini Shai-Hulud, MiasmaNode.js process monitoring — EDR monitors node not bun
ICP canister C2CanisterWorm, NamastexConventional domain takedown
GitHub fork tag-redirectLaravel-Lang, actions-coolOfficial repo appears clean in any code view
SLSA Level 3 / Sigstore provenance forgeryTeamPCP Wave 3, MiasmaSigstore-based artifact verification
EDR enumeration before executionMiasma Wave 1Checks CrowdStrike / SentinelOne / Carbon Black pre-run
Unique per-infection encrypted payloadMiasma Wave 1Version-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 familyRecords
Multi-stage AI toolchain poisoning9
Browser-executed credential theft7
Crypto-wallet hijackers6
Scavenger (node-gyp.dll)5
Cross-platform RAT4
DanaBot / JarkaStealer (Java)4
Linux backdoor (install-time)3
TruffleHog + credential harvesting2
Human-enriched records only. Phoenix campaign research layer.
Compromised (takeover)
238,543
~51% of full corpus — legit packages taken over
Malicious (attacker-published)
226,701
~49% — packages authored and published by attackers
Account and maintainer compromise is now as common as outright malicious publishing. Scanning for new or unknown packages is not enough — the attack surface includes legitimate, established packages under new control.
Phoenix Blue Shield
Detect malicious packages before a CVE exists

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.

Get protected Download full PDF report
1,868
IOCs indexed
0
CVEs needed
106
Campaigns caught
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)