Cybersecurity image illustrating threat vectors in supply chains, highlighting data protection across Checkmarx, Bitwarden, xinference.

When attackers compromise the software tools that developers trust, the damage ripples outward like a stone thrown into still water. The TeamPCP campaign's return from its 26-day pause with three simultaneous supply chain attacks demonstrates why these intrusions represent a fundamentally different threat than traditional breaches. Unlike attacks that target individual organizations, supply chain compromises turn trusted software into weapons against every organization that uses them. (Source: Isc)

Key Insight: The TeamPCP campaign's return from its 26-day pause with three simultaneous supply chain attacks demonstrates why these intrusions represent a fundamentally different threat than traditional breaches.

The April 21-22 attack cluster hit critical infrastructure that millions of developers rely on daily. Checkmarx KICS, downloaded over 10 million times from Docker Hub, scans infrastructure-as-code for security misconfigurations. When TeamPCP pushed malicious images to the official repository, they didn't just compromise Checkmarx—they poisoned a tool that organizations worldwide use to verify their cloud security. The trojanized versions operated normally while silently exfiltrating scan results containing AWS credentials, Kubernetes tokens, and internal network topology to attacker-controlled infrastructure.

The cascading nature of modern software dependencies transformed this single compromise into multiple breaches within hours. Bitwarden's automated Dependabot system pulled the poisoned KICS image into its CI/CD pipeline at 5:57 PM ET on April 22, resulting in the publication of a malicious Bitwarden CLI version 2026.4.0 to npm. In the 93 minutes before detection, 334 downloads occurred—each representing a potential enterprise breach, as Bitwarden CLI manages credentials for over 100,000 organizations globally.

The xinference PyPI package compromise, affecting a popular AI inference framework with 600,000 cumulative downloads, demonstrates how attackers target the entire modern development stack. Organizations building AI applications pulled malicious versions that harvested Google Cloud configurations, AWS credentials, and API keys the moment the package loaded. The payload executed automatically on import, meaning developers triggered the breach simply by running their normal workflows.

"Three concurrent compromises across three different ecosystems (npm, PyPI, Docker Hub) ends that pause and demonstrates the operators retained the access, the publishing-credential foothold, and the operational tempo to mount synchronized multi-ecosystem operations."

The business implications extend far beyond the directly compromised packages. Every organization running infrastructure scans with KICS between 14:17 and 15:41 UTC on April 22 potentially leaked their entire cloud configuration to attackers. Companies using Bitwarden CLI for credential management may have exposed their GitHub tokens, npm publishing credentials, and SSH keys. The CanisterSprawl worm, spreading across at least 16 npm packages, demonstrates self-propagating capability—it jumps from npm to PyPI when it discovers publishing tokens, potentially compromising entire development teams through a single infected workstation.

Traditional security boundaries become meaningless when the tools inside those boundaries are compromised. Your firewall doesn't block updates from Checkmarx. Your endpoint detection doesn't flag the official Bitwarden CLI as malicious. Your developers trust these tools implicitly because they must—modern software development depends on thousands of third-party components. TeamPCP exploits this necessary trust, using valid publisher credentials stolen in previous attacks to push malicious updates through official channels.

The simultaneous nature of these attacks suggests coordination and operational maturity. After spending April in what analysts called "credential-monetization mode" following their Cisco source code theft, TeamPCP demonstrated they maintained full compromise capability across multiple ecosystems. They chose their moment, struck three times in 48 hours, and generated enough chaos that even automated security systems struggled to keep pace with the cascading compromises.

TeamPCP Supply Chain Attack Timeline
April 21-22
Initial Compromise
TeamPCP pushes malicious images to Checkmarx KICS Docker Hub repository
10M+ downloads at risk
Ongoing
Data Exfiltration
Trojanized versions harvest AWS credentials, Kubernetes tokens, and network topology while appearing to function normally
Silent credential theft
April 22, 5:57 PM ET
Cascade Effect
Bitwarden's Dependabot pulls poisoned image, publishes malicious CLI v2026.4.0 to npm
334 downloads in 93 min
Concurrent
Multi-Ecosystem Attack
Simultaneous compromises across npm, PyPI (xinference), and Docker Hub ecosystems
100,000+ orgs affected

Attack Chain: From Compromise to Distribution Across Three Platforms

The coordinated April 21-22 attack sequence reveals sophisticated operational planning that exploited trusted automation systems across the software development ecosystem. Understanding the precise mechanics of these compromises exposes fundamental weaknesses in how modern CI/CD pipelines handle dependency updates.

The Checkmarx KICS compromise began at 12:35 UTC on April 22 when attackers authenticated to Docker Hub using valid Checkmarx publisher credentials - not through vulnerability exploitation, but through credentials harvested from earlier TeamPCP campaigns. The attackers overwrote five existing Docker tags (latest, v2.1.20, v2.1.20-debian, alpine, debian) and created two new ones (v2.1.21, v2.1.21-debian) during a critical 14:17:59 to 15:41:31 UTC window.

Key Insight: The Checkmarx KICS compromise began at 12:35 UTC on April 22 when attackers authenticated to Docker Hub using valid Checkmarx publisher credentials - not through vulnerability exploitation, but through credentials harvested from earlier TeamPCP campaigns.

The malicious KICS binary maintained legitimate scanning functionality while adding a covert telemetry path. When organizations ran infrastructure-as-code scans, the trojanized tool silently exfiltrated scan outputs to hxxps://audit.checkmarx[.]cx/v1/telemetry using the User-Agent string "KICS-Telemetry/2.0". Since IaC scan results routinely contain AWS keys, Kubernetes secrets, and internal network topology, each scan delivered a treasure trove of sensitive data directly to the attackers.

The xinference PyPI compromise followed a different injection pattern. Between versions 2.6.0 and 2.6.2, attackers pushed malicious code directly into the package's __init__.py file using a bot account. The payload executed automatically on package import through double base64 encoding and a detached subprocess - meaning developers triggered the malware simply by importing xinference into their Python projects. The code swept for AWS credentials, Google Cloud configurations, Kubernetes tokens, SSH keys, and database credentials, transmitting everything to hxxps://whereisitat[.]lucyatemysuperbox[.]space/.

The CanisterSprawl worm demonstrated yet another distribution method: self-propagation through npm's postinstall hooks. When developers installed infected packages from @automagik, pgserve, @fairwords, or @openwebconcept namespaces, the worm executed immediately after installation. It harvested approximately 40 credential categories through regex sweeps and established dual-channel command-and-control using Internet Computer Protocol canisters - the same C2 architecture from earlier TeamPCP campaigns.

Most critically, CanisterSprawl contains cross-ecosystem jumping capability. When it discovers PyPI publish tokens on infected systems, it attempts to spread from npm to PyPI repositories. This represents an evolution from static package poisoning to dynamic, self-spreading contamination across language ecosystems.

The Bitwarden CLI compromise at 5:57 PM ET showcased cascade vulnerability through trusted automation. Bitwarden's Dependabot system automatically pulled the poisoned checkmarx/kics:latest image during its regular dependency update cycle. The malicious KICS image injected code into Bitwarden's CI/CD pipeline, which then published @bitwarden/cli version 2026.4.0 containing the bw1.js payload. Within 334 downloads before removal at 7:30 PM ET, the malware had exfiltrated GitHub tokens, npm tokens, and cloud credentials to attacker-controlled GitHub repositories.

The Dune-themed payload strings ("Shai-Hulud: The Third Coming", "atreides", "fremen", "sandworm") suggest operational continuity with late 2025's Shai-Hulud npm campaigns. More concerning is the demonstration that compromising one security tool can automatically poison downstream consumers through standard dependency management - turning the software industry's efficiency mechanisms into attack vectors.

April 21-22 Coordinated Supply Chain Attack Sequence

Checkmarx KICS
April 22, 12:35 UTC
Method: Docker Hub credential compromise
Data Exfiltrated: AWS keys, Kubernetes secrets, network topology via trojanized IaC scanner sending telemetry to fake Checkmarx domain
xinference PyPI
Versions 2.6.0 - 2.6.2
Method: Direct code injection via bot account
Data Exfiltrated: Cloud credentials, SSH keys, database tokens via double base64 encoded payload executing on package import
CanisterSprawl
Multiple npm namespaces
Method: Self-propagating worm via postinstall hooks
Data Exfiltrated: 40+ credential categories with cross-ecosystem jumping capability using ICP canisters for C2

Immediate Detection and Response: What to Do in the Next 24-48 Hours

Security teams managing environments with Checkmarx KICS, Bitwarden CLI, or xinference need to execute specific containment and verification actions within the next 24-48 hours. The window for undetected compromise has already extended beyond 5 days since the initial April 21-22 attacks, meaning credential harvesting may have already occurred in affected environments.

For Checkmarx KICS Docker deployments, immediately verify which image digests your systems pulled between April 22 14:17:59 UTC and 15:41:31 UTC. The compromised tags include latest, v2.1.20, v2.1.20-debian, alpine, debian, v2.1.21, and v2.1.21-debian. Run docker images checkmarx/kics --digests to identify potentially malicious images. Any KICS container that executed during this window has potentially exfiltrated your infrastructure-as-code scan results to the attacker-controlled endpoint at audit.checkmarx[.]cx.

The malicious KICS binary maintained legitimate scanning functionality while adding covert telemetry exfiltration. Hunt for outbound HTTPS connections to audit.checkmarx[.]cx with User-Agent string "KICS-Telemetry/2.0" in your proxy logs or network monitoring tools. These connections would contain base64-encoded payloads of your IaC scan outputs, which routinely include cloud credentials, API tokens, and internal network topology.

Bitwarden CLI users face a narrower but equally critical exposure window. Version 2026.4.0, published between 5:57 PM and 7:30 PM ET on April 22, contained the malicious bw1.js payload. Organizations using automated Bitwarden CLI deployments should immediately audit any secrets or credentials accessed by CI/CD pipelines during this timeframe. The payload's "Shai-Hulud: The Third Coming" marker and Dune-themed identifiers (atreides, fremen, sandworm, sardaukar) provide unique hunting signatures in process memory or temporary files.

The Bitwarden compromise specifically targeted GitHub tokens, npm tokens, SSH material, AWS/GCP/Azure secrets, GitHub Actions secrets, and AI tooling configuration files. Check your GitHub organization for unexpected public repositories created under service accounts or CI/CD identities - the malware exfiltrated stolen credentials by creating public repos rather than using traditional C2 channels. Bitwarden's clean version 2026.4.1 (a re-release of 2026.3.0) should replace any 2026.4.0 installations immediately.

For xinference PyPI installations, versions 2.6.0, 2.6.1, and 2.6.2 contain malicious code injected directly into __init__.py that executes on package import. The payload performs an exhaustive credential sweep targeting AWS credentials, Google Cloud configurations, Kubernetes tokens, environment variables, SSH keys, API keys, and database credentials. Monitor for outbound connections to whereisitat[.]lucyatemysuperbox[.]space - this is the primary exfiltration endpoint.

The xinference payload uses double base64 encoding and spawns detached subprocesses on import, making it persist even after the parent Python process terminates. Search for Python processes with unusually encoded command-line arguments or processes that remain running after your xinference-dependent applications stop. The "# hacked by teampcp" comment in the malicious code provides a grep-able signature, though the group has publicly denied this specific compromise.

CanisterSprawl worm detection requires checking npm packages from the @automagik, pgserve, @fairwords, and @openwebconcept namespaces. The worm executes via npm postinstall hooks and harvests approximately 40 credential categories through regex sweeps. Look for unexpected network connections to Internet Computer Protocol (ICP) canisters - this novel C2 architecture distinguishes CanisterSprawl from traditional npm malware. If you discover PyPI publish tokens on infected systems, assume cross-ecosystem propagation has occurred and audit your PyPI packages immediately.

Supply Chain Risk Assessment: Evaluating Your Exposure

Understanding your organization's exposure to the TeamPCP campaign requires mapping your dependency chains beyond direct package usage. The cascading nature of these attacks means organizations may be vulnerable through multiple indirect paths they haven't considered.

Start with your CI/CD pipeline dependencies. The Bitwarden compromise occurred not through direct attack but through Dependabot automation pulling the poisoned KICS image. Organizations using GitHub Actions, GitLab CI, Jenkins, or CircleCI with automated dependency updates face similar cascade risks. Check your pipeline logs for any Docker pulls from checkmarx/kics between April 22 14:17:59 UTC and 15:41:31 UTC - even if you don't directly use KICS, your build tools might have fetched it as a transitive dependency.

The CanisterSprawl worm introduces a different exposure vector through its self-propagating capability across npm packages. Organizations using packages from the @automagik, pgserve, @fairwords, or @openwebconcept namespaces face immediate risk, but the worm's ability to spread means any npm package with a postinstall hook becomes a potential carrier. The worm specifically targets organizations with cross-ecosystem publishing capabilities - if your developers maintain both npm and PyPI packages from the same workstations, CanisterSprawl can jump between ecosystems using discovered PyPI publish tokens.

VS Code and Open VSX extension users face a separate attack surface. The trojanized cx-dev-assist (versions 1.17.0 and 1.19.0) and ast-results (versions 2.63.0 and 2.66.0) extensions silently download second-stage payloads from backdated GitHub commits. Organizations that standardize on specific VS Code extension sets through workspace recommendations or enterprise policies may have distributed these compromised extensions to hundreds of developers without realizing it. The extensions execute payloads through the Bun runtime without integrity verification, meaning they bypass standard extension sandboxing.

For organizations using xinference for AI model inference, the exposure extends beyond the package itself. The malicious payload in versions 2.6.0, 2.6.1, and 2.6.2 executes automatically on import, meaning any Python application that imports xinference - including Jupyter notebooks, data science pipelines, or ML training scripts - triggers credential harvesting. The payload specifically targets AWS credentials, Google Cloud configurations, Kubernetes tokens, environment variables, SSH keys, API keys, and database credentials, then exfiltrates to whereisitat.lucyatemysuperbox.space.

The blast radius calculation must account for shared infrastructure. If a single developer workstation running compromised KICS scanned your infrastructure-as-code repositories, the telemetry exfiltration to audit.checkmarx.cx/v1/telemetry has already transmitted your cloud topology, embedded credentials, and service configurations. Those credentials provide access to production systems, meaning a developer tool compromise becomes a production breach.

Organizations using managed security service providers or DevOps consultancies face amplified risk. If your MSSP uses any compromised tools in their environment while managing your infrastructure, your credentials and configurations may be exposed through their compromise. The "Shai-Hulud: The Third Coming" payload in Bitwarden CLI specifically created public GitHub repositories under victim accounts to store exfiltrated data, meaning your secrets could be publicly accessible without your knowledge.

TeamPCP Campaign Exposure Vectors

CI/CD Pipeline Dependencies
Automated dependency updates create cascade risks through tools like Dependabot pulling poisoned Docker images.
checkmarx/kics (Docker)
Apr 22: 14:17:59 - 15:41:31 UTC
Critical Window
CanisterSprawl Worm
Self-propagating npm worm with cross-ecosystem jumping capability between npm and PyPI packages.
@automagik, pgserve, @fairwords, @openwebconcept
Active Propagation
VS Code Extensions
Trojanized extensions bypass sandboxing through Bun runtime execution, downloading payloads from backdated commits.
cx-dev-assist (1.17.0, 1.19.0)
ast-results (2.63.0, 2.66.0)
Enterprise Distribution Risk
AI/ML Inference Libraries
Malicious payload executes on import, targeting AWS credentials through Python applications and Jupyter notebooks.
xinference (2.6.0, 2.6.1, 2.6.2)
Auto-execution on Import

Long-Term Mitigation: Hardening Against Supply Chain Attacks

Organizations that survived the TeamPCP attacks unscathed shared common architectural decisions that security teams should implement before the next wave hits. The difference between detecting malicious behavior in minutes versus days comes down to foundational supply chain defenses that most enterprises haven't deployed.

Software Bill of Materials (SBOM) tracking would have exposed the poisoned dependencies within hours instead of days. Organizations need machine-readable SBOM generation integrated directly into build pipelines using SPDX or CycloneDX formats. Configure your CI/CD systems to automatically generate SBOMs for every build artifact, then feed these into vulnerability management platforms that can cross-reference against threat intelligence feeds.

For the Checkmarx KICS scenario specifically, SBOM tracking would have immediately flagged when the Docker image digest changed from a known-good hash to the malicious replacement. Set up automated alerts when any security tool's cryptographic signature changes - legitimate updates follow predictable release cycles and signing patterns.

Runtime behavior monitoring for privileged tools represents the second critical layer. Security scanners like KICS operate with elevated permissions to analyze infrastructure configurations. Deploy runtime security controls using tools like Falco or Sysdig that baseline normal behavior for these privileged processes.

Configure specific detection rules for security tools attempting network connections to non-vendor domains. The malicious KICS binary maintained legitimate scanning behavior while adding covert telemetry to audit.checkmarx[.]cx - runtime monitoring would have caught this unexpected outbound connection immediately. Set alerts for any security tool that suddenly starts exfiltrating data to new endpoints or downloading second-stage payloads like the mcpAddon.js component.

Credential manager segmentation limits blast radius when tools like Bitwarden face compromise. Deploy password managers in isolated network segments with strict egress filtering. The malicious Bitwarden CLI version 2026.4.0 exfiltrated credentials to public GitHub repositories - proper network segmentation would have blocked these unauthorized uploads.

Implement credential vaulting architecture where password managers never directly touch production systems. Use privileged access management (PAM) solutions as intermediaries, with session recording and anomaly detection. When the Bitwarden CLI tried harvesting GitHub tokens, npm tokens, and cloud provider secrets, PAM analytics would have detected the abnormal access patterns.

Vendor security assessment criteria must evolve beyond questionnaires to continuous validation. Before adopting developer tools, require vendors to provide:

  • Cryptographic signing of all release artifacts with published verification procedures
  • Transparency logs showing all publishing events to package repositories
  • Incident response commitments with defined SLAs for compromise notification
  • Multi-party authorization requirements for publishing to production repositories
  • Automated rollback capabilities when malicious packages are detected

The Docker Hub monitoring that detected the KICS push within 30 minutes demonstrates what platform-level detection can achieve. Demand similar capabilities from all critical tool vendors - if Docker can detect suspicious publishing patterns, so should npm, PyPI, and other ecosystem operators.

Organizations using these hardening strategies would have detected the TeamPCP compromises through multiple independent signals: SBOM hash mismatches, runtime behavior anomalies, blocked exfiltration attempts, and vendor transparency logs. Defense-in-depth means any single detection mechanism can fail while others maintain coverage.

Critical Defense Layers Against Supply Chain Attacks

1
SBOM Tracking
Machine-readable SBOM generation in CI/CD pipelines using SPDX/CycloneDX formats. Cross-references against threat intelligence feeds.
Would have detected poisoned dependencies within hours
2
Runtime Monitoring
Deploy Falco/Sysdig to baseline privileged tool behavior. Alert on unexpected network connections to non-vendor domains.
Catches covert telemetry & data exfiltration attempts
3
Credential Segmentation
Isolate password managers in network segments with strict egress filtering. Implement vaulting architecture without direct production access.
Blocks unauthorized credential uploads to external repos

TeamPCP's Expanding Scope: Pattern Recognition and Attribution

The TeamPCP campaign's operational fingerprints reveal a threat actor with sophisticated understanding of developer workflows and security tool dependencies. Google GTIG's formal designation of the operators as UNC6780 provides critical context for understanding their evolving tactics. The group's credential stealer, designated SANDCLOCK, represents just one component of a broader operational toolkit that now includes self-propagating worms and cascading compromise capabilities.

The targeting pattern across the campaign demonstrates deliberate selection of security and infrastructure tooling rather than opportunistic compromise. TeamPCP consistently targets tools that developers and security teams trust implicitly: Trivy for vulnerability scanning, KICS for infrastructure-as-code analysis, and now Bitwarden for credential management. This focus on security tooling creates a particularly dangerous paradox - the very tools organizations deploy to improve security become vectors for compromise.

The CanisterSprawl worm introduces a new dimension to TeamPCP's capabilities. Unlike previous static compromises that required manual propagation, CanisterSprawl self-replicates across npm packages through postinstall hooks. The worm's ability to jump ecosystems - from npm to PyPI when it discovers publish tokens - represents an evolution from single-ecosystem attacks to cross-platform propagation. The worm's use of Internet Computer Protocol (ICP) canisters for command-and-control mirrors TeamPCP's earlier CanisterWorm, suggesting shared development resources or operational knowledge.

Attribution complexity emerged as a defining characteristic during this attack wave. TeamPCP claimed responsibility for the Checkmarx compromise while simultaneously denying involvement in the xinference attack that bore their signature comment "# hacked by teampcp". Both attacks share identical technical markers: double base64 encoding, detached subprocess execution on import, and exhaustive credential sweeping across approximately 40 categories. This selective claiming pattern suggests either operational discipline in maintaining plausible deniability or the emergence of copycat actors using leaked TeamPCP tooling.

The Dune-themed identifiers in the Bitwarden compromise - "Shai-Hulud: The Third Coming" along with references to atreides, fremen, sandworm, and sardaukar - connect to prior Shai-Hulud npm worm campaigns from late 2025. This cultural consistency across campaigns suggests either the same operator group or deliberate mimicry intended to complicate attribution. The exfiltration method, creating public GitHub repositories under victim accounts, demonstrates operational creativity in using legitimate platforms for data staging.

TeamPCP's monetization ecosystem reveals a complex affiliate structure. ShinyHunters, CipherForce, and Vect all participate in credential monetization attempts, though with limited success. Three consecutive lapsed publication deadlines - ShinyHunters/Cisco around April 3, CipherForce/Sportradar around April 10-11, and Vect/Guesty around April 24 - suggest either operational constraints or strategic patience. The ADT breach claimed by ShinyHunters, while using different initial access (vishing against Okta SSO rather than stolen Trivy credentials), demonstrates the broader ecosystem remains operationally active even when TeamPCP's direct extortion attempts fail.

The campaign's evolution from credential harvesting to cascading automation compromise represents a maturation in supply chain attack methodology. Where SolarWinds required months of careful implant development and 3CX involved trojanized installers, TeamPCP achieves similar reach through simpler means: poisoning widely-used development tools and letting automated dependency systems spread the compromise. The Bitwarden incident proves this theory - Dependabot's routine update pulled the malicious KICS image, creating downstream compromise without additional attacker intervention.

Table of contents

Top hits