CI/CD Under Active Siege: Two Credential-Theft Campaigns Running Simultaneously
What Happened
Two supply-chain compromises are actively exfiltrating credentials from enterprise build pipelines. TeamPCP backdoored the Checkmarx Jenkins AST Scanner plugin, version 2026.5.09, via the Jenkins Marketplace. This is the third vector tied to the actor since the Trivy breach in February. Separately, a Bun-based npm worm tracked as 'Mini Shai-Hulud' poisoned 169 package names across 373 versions, including dependencies in the Mistral AI and TanStack ecosystems, and stole GitHub tokens, npm publish tokens, cloud IAM keys, and CI secrets via prepare hooks on optionalDependencies.
TeamPCP Campaign Arc
The chain is straightforward. Trivy (Feb) → GitHub Actions + OpenVSX (Mar) → Checkmarx Jenkins plugin (May). Three developer-tool distribution channels in three months. The plugin runs at build-runner privilege, which puts SCM tokens, artifact registry keys, cloud credentials, and code-signing keys in scope. Checkmarx has not published IOCs for the modified plugin, so defenders are working from worst-case assumptions.
Mini Shai-Hulud Mechanics
The worm abuses GitHub Actions weaknesses: unpinned third-party actions, overly permissive GITHUB_TOKEN scopes, and pull_request_target with untrusted checkout. It steals npm publishing credentials and injects payloads into release workflows. TanStack deprecated 84 malicious versions across 42 packages. Several of those packages carry 12M+ weekly downloads — react-query, router, table, form. Trusted publishing did not stop it. The abused workflows minted valid tokens on demand.
Trusted publishing died this week. The npm worm ran inside install, not at publish. Any CI pipeline that touched a tainted package should be treated as credential-compromised until rotated.
Cross-Source Pattern
Six independent sources describe the same operational picture. The attack surface is the build environment itself, and every credential reachable from it is compromised. What separates this week from last quarter is that both campaigns bypass the controls the industry put in place after the previous round — marketplace publisher verification and trusted publishing provenance.
Why This Matters Now
The gap between disclosure and opportunistic scanning is measured in hours. TeamPCP has shown persistence across three vectors in three months. The npm worm self-propagates using stolen publish tokens, so the exposure is not bounded by the two named packages. It extends to anything a compromised maintainer could push.
What to do
Audit all Jenkins controllers for Checkmarx AST Scanner plugin v2026.5.09; roll back to 2.0.13-829.vc72453fa_1c16 and rotate every credential accessible from affected runners
Scan all lockfiles, CI caches, and container images for the 169 affected npm package versions (TanStack May 10-12 window is priority); purge GitHub Actions caches on affected repos
Rotate all GitHub PATs, npm tokens, cloud IAM keys, and CI secrets that touched affected pipelines in the last 30 days
Enforce --ignore-scripts on CI npm installs, pin GitHub Actions to commit SHAs, set GITHUB_TOKEN to read-only by default, and deploy outbound egress allowlisting during build phase
Hunt for TeamPCP IOCs across GitHub Actions, OpenVSX, and Jenkins installs — including Dune-themed repository names — going back to March 2026