GEM-4C 558 -4%
GPT-61S 555 -3.8%
CL-SN55 553 -3.8%
CL-OP55 551 -4%
GPT-61TERR 547 -3.5%
GEM-4CM 546 -4%
CL-OP55EH 542 -3.9%
GPT-61SOLXH 541 -3.6%
GPT-61SOLH 527 -3.7%
CL-SN55XH 523 -3.5%
GEM-4CL 520 -3.9%
GPT-61TERRXH 507 -3.4%
CL-OP55H 506 -4%
GPT-61SOLM 500 -3.5%
KIMI-K31P 499 -3.5%
GEM-4AR 498 -3.9%
GPT-61TERRH 490 -3.2%
CL-OP55M 483 -3.6%
MUSE-WONDFUL 479 -3.8%
CL-SN55H 467 -3.3%
CL-HK55 463 -2.9%
GPT-61TERRM 462 -3.1%
GPT-6A 451 -4.7%
MUSE-WOND 451 -3.6%
CL-HK55XH 450 -3%
GPT-6ASTRXH 440 -4.8%
GROK-47 440 -3.1%
GROK-47H 438 -2.9%
GPT-6ASTRH 437 -4.8%
DSK-V-340615 436 -2.9%
QWEN-38X 428 -2.9%
GPT-61SOLL 423 -3.2%
GLM-53 420 -3%
MIMO-V26P 420 -2.6%
CL-HK55H 419 -2.8%
LING-31F1019 417 -2.6%
GEM-38F 416 -2.8%
GPT-6ASTRM 415 -4.6%
MMAX-M31F 414 -2.8%
GEM-38FM 412 -2.8%
GPT-61TERRNO 411 -2.8%
GROK-47L 410 -2.8%
DSK-V-3E48BD 410 -2.6%
GPT-6L 407 -2.6%
GLM-53F 407 -2.6%
STEP-5 405 -2.6%
CL-FABL51XH 403 -4.7%
GPT-61TERRL 403 -2.9%
MIMO-V26F 401 -2.4%
CL-FABL51 399 -4.5%
CL-SN55M 395 -2.9%
CL-OP55L 393 -3.4%
MIST-LARG4 390 -2.7%
CL-FABL51H 386 -4.5%
CL-HK55M 386 -2.3%
GPT-6LUNAXH 377 -2.6%
MUSE-SPAROPE 375 -2.6%
MIST-LARG4M 371 -2.4%
DSK-V4P 365 -2.4%
GPT-6LUNAH 365 -2.1%
GLM-53L 364 -2.4%
CL-SN55L 362 -2.7%
GEM-38FL 361 -2.4%
GPT-6ASTRL 359 -4.5%
CL-FABL51M 359 -4.5%
QWEN-827B 349 -2.2%
CL-HK55L 347 -2%
MMAX-M3 345 -2%
GPT-6LUNAM 344 -2.3%
DSK-V-02811D 344 -2%
K2-HORI375BA 342 -2%
REFL-BEAM 338 -2%
QWEN-827BM 332 -1.8%
CL-FABL51L 329 -4.4%
QWEN-827BL 320 -1.8%
NEMO-35SUPEV 313 -1.9%
INKL 295 -1.7%
NVID-NEMO3UL 295 -1.3%
GEM-35FLITE 295 -1.3%
GPT-6LUNAL 287 -1.4%
GPT-6LUNANON 286 -1%
NANB-333B 285 -2.7%
QWEN-827BNON 282 -1.4%
COMM-APLUS 266 -1.1%
MUSE-GLIM 263 -1.1%
NEMO-35LIGH 261 -0.8%
GRAN-428B 258 -0.8%
MIST-SMAL4 252 -0.4%
INKL-SM 235 -2.5%
GEMM-431B 225 —
GEMM-4E4B 225 —
GEMM-4E4BNON 225 —
LING-30TINY 225 —
MINI-33B 225 —
NORT-MCODE 225 —
NOVA-MICR 225 —
NVID--ADE3B4 225 —
QWEN-54B 225 —
QWEN-54BNONR 225 —
TINY-AYAGLOB 225 —
GEM-4C 558 -4%
GPT-61S 555 -3.8%
CL-SN55 553 -3.8%
CL-OP55 551 -4%
GPT-61TERR 547 -3.5%
GEM-4CM 546 -4%
CL-OP55EH 542 -3.9%
GPT-61SOLXH 541 -3.6%
GPT-61SOLH 527 -3.7%
CL-SN55XH 523 -3.5%
GEM-4CL 520 -3.9%
GPT-61TERRXH 507 -3.4%
CL-OP55H 506 -4%
GPT-61SOLM 500 -3.5%
KIMI-K31P 499 -3.5%
GEM-4AR 498 -3.9%
GPT-61TERRH 490 -3.2%
CL-OP55M 483 -3.6%
MUSE-WONDFUL 479 -3.8%
CL-SN55H 467 -3.3%
CL-HK55 463 -2.9%
GPT-61TERRM 462 -3.1%
GPT-6A 451 -4.7%
MUSE-WOND 451 -3.6%
CL-HK55XH 450 -3%
GPT-6ASTRXH 440 -4.8%
GROK-47 440 -3.1%
GROK-47H 438 -2.9%
GPT-6ASTRH 437 -4.8%
DSK-V-340615 436 -2.9%
QWEN-38X 428 -2.9%
GPT-61SOLL 423 -3.2%
GLM-53 420 -3%
MIMO-V26P 420 -2.6%
CL-HK55H 419 -2.8%
LING-31F1019 417 -2.6%
GEM-38F 416 -2.8%
GPT-6ASTRM 415 -4.6%
MMAX-M31F 414 -2.8%
GEM-38FM 412 -2.8%
GPT-61TERRNO 411 -2.8%
GROK-47L 410 -2.8%
DSK-V-3E48BD 410 -2.6%
GPT-6L 407 -2.6%
GLM-53F 407 -2.6%
STEP-5 405 -2.6%
CL-FABL51XH 403 -4.7%
GPT-61TERRL 403 -2.9%
MIMO-V26F 401 -2.4%
CL-FABL51 399 -4.5%
CL-SN55M 395 -2.9%
CL-OP55L 393 -3.4%
MIST-LARG4 390 -2.7%
CL-FABL51H 386 -4.5%
CL-HK55M 386 -2.3%
GPT-6LUNAXH 377 -2.6%
MUSE-SPAROPE 375 -2.6%
MIST-LARG4M 371 -2.4%
DSK-V4P 365 -2.4%
GPT-6LUNAH 365 -2.1%
GLM-53L 364 -2.4%
CL-SN55L 362 -2.7%
GEM-38FL 361 -2.4%
GPT-6ASTRL 359 -4.5%
CL-FABL51M 359 -4.5%
QWEN-827B 349 -2.2%
CL-HK55L 347 -2%
MMAX-M3 345 -2%
GPT-6LUNAM 344 -2.3%
DSK-V-02811D 344 -2%
K2-HORI375BA 342 -2%
REFL-BEAM 338 -2%
QWEN-827BM 332 -1.8%
CL-FABL51L 329 -4.4%
QWEN-827BL 320 -1.8%
NEMO-35SUPEV 313 -1.9%
INKL 295 -1.7%
NVID-NEMO3UL 295 -1.3%
GEM-35FLITE 295 -1.3%
GPT-6LUNAL 287 -1.4%
GPT-6LUNANON 286 -1%
NANB-333B 285 -2.7%
QWEN-827BNON 282 -1.4%
COMM-APLUS 266 -1.1%
MUSE-GLIM 263 -1.1%
NEMO-35LIGH 261 -0.8%
GRAN-428B 258 -0.8%
MIST-SMAL4 252 -0.4%
INKL-SM 235 -2.5%
GEMM-431B 225 —
GEMM-4E4B 225 —
GEMM-4E4BNON 225 —
LING-30TINY 225 —
MINI-33B 225 —
NORT-MCODE 225 —
NOVA-MICR 225 —
NVID--ADE3B4 225 —
QWEN-54B 225 —
QWEN-54BNONR 225 —
TINY-AYAGLOB 225 —

Delayed ticker data. Last calculated 5 Nov 2026, 11:04 pm Sydney time.

← Back to feed

TeamPCP's npm Worm Hits Mistral AI SDK, TanStack, and 170 Packages in 6 Minutes — With Fake Provenance

At 19:20 UTC on May 11, 2026, a self-propagating npm worm began publishing malicious package versions across 42 TanStack namespaces. Six minutes later, 84 compromised artifacts were live. Within hours, the campaign had spread to Mistral AI’s npm and PyPI packages, UiPath, the AWS-maintained OpenSearch JavaScript client, Guardrails AI, and over a dozen other namespaces. By the time npm quarantine ran, 373 malicious versions across 169 package names were in the wild.

TeamPCP, the threat group attributed by StepSecurity, named the campaign “Mini Shai-Hulud.” It has been assigned CVE-2026-45321 with a CVSS score of 9.6 Critical.

What the Worm Did

The entry point was not a phished maintainer credential. It was an orphaned commit in a TanStack CI workflow that still had OIDC trust federation configured with npm. The attacker extracted an OIDC token from the GitHub Actions runner process mid-execution, then exchanged it for authenticated publish access to the entire TanStack namespace.

Every infected CI run became a new publisher. Each compromised version carried a preinstall hook that downloaded the Bun JavaScript runtime, then launched a 2.3 MB obfuscated payload (router_init.js). The payload swept CI secrets, cloud credentials, Kubernetes service account tokens, and Vault secrets. On runners with active OIDC federation, it minted fresh npm tokens and republished infected versions under stolen maintainer identities.

The packages it reached:

NamespaceVersionsWeekly Downloads
@tanstack/react-router1.169.5, 1.169.812.7M
@opensearch-project/opensearch3.5.3–3.8.01.3M
@mistralai/mistralai2.2.2–2.2.4 (npm + PyPI)—
@uipath66 versions—
guardrails-ai0.10.1 (PyPI)—
@squawk87 versions—

The SLSA Problem

The technically significant detail is not the scale. Wave two of the Shai-Hulud campaign in November 2025 compromised 492 packages and 25,000 repositories. What makes wave four different: for the first time, the malicious packages were published with valid SLSA Build Level 3 provenance attestations.

SLSA Build Level 3 provenance is generated by Sigstore — Fulcio certificate authority, Rekor transparency log, in-toto attestations. The provenance signature is meant to be a final trust anchor: proof that a package was built from a specific source commit using a trusted pipeline. TeamPCP’s worm produced these certificates legitimately, because it hijacked the legitimate build pipeline itself. Sigstore verified the process correctly. SLSA does not verify that the code being built was safe.

This is a category escalation. Defenders who’ve moved beyond “lock down credentials” to “verify provenance” now have a documented attack that defeats that layer too.

AI Tool Persistence

One operational detail that matters for AI developer environments: exfiltration ran through the Session P2P messaging network, not standard HTTP C2. The traffic is encrypted IM protocol, indistinguishable from legitimate messaging at the network layer.

Persistence was planted in two locations that standard npm uninstall does not touch: Claude Code hook directories (.claude/settings.json) and VS Code task runners (.vscode/tasks.json). On systems where Claude Code or VS Code is invoked regularly, the worm fires again on every tool invocation until those hook files are explicitly removed.

This is the third consecutive TeamPCP campaign to use AI developer tooling as a persistence surface. Wave three in April targeted .claude/settings.json explicitly. The Mistral AI SDK compromise means the attack is now inside the client libraries that AI applications call directly.

What Teams Should Do

Any team that ran npm install on a @tanstack, @mistralai, or @opensearch-project package between May 11 19:20 UTC and npm quarantine should treat the install environment as compromised. Rotate every secret accessible from that host — npm tokens, GitHub tokens, cloud credentials, Kubernetes service accounts. Check for .claude/settings.json and .vscode/tasks.json entries that were not explicitly set by your team.

The full affected package list, with specific version numbers and remediation steps, is published by Snyk (CVE-2026-45321) and Aikido Security.