THREAT FILE // EYES ONLY // ACTIVE THREAT

TEAMPCP

The threat actor systematically dismantling open-source trust.
Nine campaigns. Six ecosystems. One self-spreading worm.

PCPcat DeadCatx3 PersyPCP ShellForce CipherForce MegaGame10418
0+
Infected Hosts
0GB
Data Stolen
0
Campaigns
0+
npm Packages
0+
Telegram Subs
CHAIN REACTION โ€” Interactive Lab 3 acts ยท 3 bosses ยท real forensic terminals
TeamPCP
ISSUE #1

Origin & Profile

ACTIVE SINCE SEP 2025

The Origin

Emerged targeting exposed cloud APIs โ€” Docker, Kubernetes, Ray, Redis. December 2025 pivot: mass-exploits React2Shell (CVE-2025-55182, CVSS 10.0), a critical RCE in React Server Components. Key operative MegaGame10418 exploited a PwnRequest vulnerability in Trivy's CI on Feb 27, 2026 โ€” stealing the PAT that seeded the entire supply chain campaign.

Financially MotivatedSupply Chain
SIGNATURE MOVE

Cascade Compromise

Compromise one trusted security scanner โ†’ harvest CI/CD tokens from thousands of pipelines โ†’ infect the downstream packages those developers maintain. Self-attribution in payload: "TeamPCP Cloud stealer". Anti-attribution: exits immediately if Russian locale detected.

ICP Blockchain C2Self-Spreading Worm
CRIMINAL NETWORK

The Alliance

Partnerships with CipherForce (proprietary ransomware), Vect ransomware group, and LAPSUS$ extortion network. Functions as an access generation engine feeding multiple ransomware ecosystems simultaneously. Telegram @teampcp grew 700 โ†’ 1,180+ during the March 2026 campaign wave.

Vect RansomwareCipherForceLAPSUS$
โšก REACT2SHELL โ€” CVE-2025-55182 โ€” CVSS 10.0

Critical unauthenticated RCE in React Server Components + Next.js. Single crafted POST triggers server-side deserialization โ†’ arbitrary Node.js execution. Port 666 used in exploit operations. TeamPCP mass-exploited in December 2025 to build criminal cloud infrastructure across Docker, Kubernetes, Ray, Redis globally โ€” the foundation for the 2026 supply chain series.

rescana.com โ†’
๐Ÿฑ nsa[.]cat + "TeamPCP Cloud stealer"

Attacker VPS nsa[.]cat identified in campaign infrastructure (ramimac.me). Self-attribution string "TeamPCP Cloud stealer" hardcoded in trivy-action payloads. Fallback: creates tpcp-docs repository in victim GitHub orgs as secondary exfil channel (Wiz). The cat-mask identity is consistent across artwork, social channels, and payload naming.

ramimac.me โ†’
ISSUE #2

The Attack Chain

One misconfigured GitHub Action. Eight campaigns. Six ecosystems. One blockchain that can't be shut down.

Entry Point Credential Harvest Worm Spread Payload Deployed C2 Infrastructure Victim Machine
ISSUE #3

Nine Campaigns

00
React / Node.js
PRE-CAMPAIGN ยท DEC 2025
React2Shell โ€” The Origin
CVSS 10.0 critical unauthenticated RCE in React Server Components + Next.js (CVE-2025-55182 + CVE-2025-29927). Single crafted POST triggers server-side deserialization โ†’ arbitrary Node.js code execution. TeamPCP mass-exploited at scale against Docker, Kubernetes, Ray, Redis deployments globally. Port 666 used in exploitation operations. This campaign built the criminal cloud infrastructure deployed in the 2026 supply chain series. Simultaneously, operative MegaGame10418 exploited a PwnRequest vulnerability in Trivy's CI on February 27, 2026, exfiltrating Aqua Security's Personal Access Token โ€” the key that unlocked every campaign that followed.
CVE-2025-55182CVE-2025-29927MegaGame10418Port 666
01
GitHub Actions
MARCH 19, 2026 ยท 17:43 UTC
Trivy Scanner Hijacked
PAT stolen via pull_request_target misconfiguration. Force-push over 75/76 trivy-action tags + 7 setup-trivy tags. Every CI/CD pipeline running Trivy that day had secrets harvested. Memory scraping via /proc/<pid>/mem bypasses GitHub secret masking. C2 typosquat: scan.aquasecurtiy[.]org. Fallback: tpcp-docs repo created in victim orgs. Trivy v0.69.5โ€“v0.69.6 pushed to Docker Hub. CVE-2026-33634 (CVSS 9.4).
scan.aquasecurtiy[.]org45.148.10.212CVE-2026-33634tpcp.tar.gznsa[.]cat
Mend.io ยท Wiz ยท Unit42 ยท ramimac.me
02
npm
MARCH 20 ยท 20:45 UTC
CanisterWorm
First npm worm with ICP blockchain C2. Canister tdtqy-oyaaa-aaaae-af2dq-cai serves rotating payloads โ€” no takedown point. Kill-switch returns YouTube URL. 66+ packages infected: @emilgroup (28), @opengov (16), @teale.io, @airtm, @pypestream. April 21 second wave: @automagik/genie, pgserve, @fairwords/websocket โ€” second canister ID. pgmon systemd backdoor disguised as PostgreSQL monitor; 5-min sandbox delay, 50-min C2 poll.
tdtqy-oyaaa-aaaae-af2dq-caipgmon.service
03
PyPI
MARCH 24
LiteLLM Poisoned
Trivy-poisoned CI handed TeamPCP PYPI_PUBLISH_PASSWORD for krrishdholakia. v1.82.7 + v1.82.8 (~95M monthly downloads). v1.82.8 escalates to .pth file in site-packages โ€” fires on every Python startup even after uninstall. AES-256-CBC + RSA-2048. Kubernetes cluster escape via privileged pod (hostPID:true). Also: KICS (35 tags), Checkmarx AST v2.3.28.
models.litellm.cloudcheckmarx.zonelitellm_init.pth
04
PyPI
MARCH 27
Telnyx โ€” WAV Steganography
telnyx v4.87.1 + v4.87.2. Novel delivery: payload XOR-encoded inside fake .wav audio files fetched live at runtime โ€” ringtone.wav (Linux/macOS), hangup.wav (Windows). Same C2 IP as LiteLLM: 83.142.209.203:8080, identical RSA key, same exfil archive name. Windows: msbuild.exe dropped into Startup folder, CREATE_NO_WINDOW, hidden lock file โ€” no admin required. Linux: detached subprocess with start_new_session=True. Same wave: Checkmarx VS Code extensions (checkmarx.ast-results v2.53) published to Open VSX (ReversingLabs).
83.142.209.203:8080ringtone.wavhangup.wavmsbuild.exe (Startup)
05
PyPI
APRIL 22, 2026
Xinference โ€” "That Wasn't Us"
xinference 2.6.0โ€“2.6.2 targeting AI inference infrastructure. Fire-and-forget: no persistence, no encryption โ€” data gzipped as love.tar.gz, POSTed raw with custom header X-QT-SR: 14 to whereisitat.lucyatemysuperbox.space. Full AWS Sig4 implementation queries Secrets Manager + SSM Parameter Store directly. Exhaustive crypto wallet sweep including Solana validator keypairs. First decoded line of payload: # hacked by teampcp. Plot twist: @pcpcats publicly denied responsibility on Twitter โ€” "if you're this copycat using our team name, DM me." First time a TeamPCP-attributed payload was publicly disputed by the group itself. Possible copycat, false flag, or deniability operation. KICS Docker images also compromised the same day (Socket.dev).
whereisitat.lucyatemysuperbox.spaceX-QT-SR: 14love.tar.gz# hacked by teampcp@pcpcats denial
06
npm
APRIL 23, 2026
@bitwarden/cli โ€” The CI Chain
Chain: KICS Docker โ†’ Bitwarden pull_request_target (id-token: write) โ†’ stolen GitHub OIDC โ†’ unsigned commit impersonating iinuwa@bitwarden.com โ†’ double-base64 npm token leaked in CI logs โ†’ @bitwarden/cli@2026.4.0 published 4 minutes later. C2 typosquat: audit.checkmarx.cx (named after the entry tool, vs real checkmarx.com). Test account helloworm00@proton.me validated beautifulcastle GitHub dead-drop channel 2 days prior. 9.7MB obfuscator.io payload: 43,436-entry string table, PBKDF2 S-box cipher for 58 sensitive strings, 6 gzip blobs. New capability: AI assistant poisoning writes invisible payload to shell configs that surface in AI context windows.
audit.checkmarx.cxhelloworm00@proton.mebeautifulcastle C2api.cloud-aws.adc-e.uk
Mend.io ยท JFrog ยท Socket.dev
07
npm
APRIL 29, 2026 ยท 11:23 UTC
Shai-Hulud โ€” SAP cap-js via Claude Code
Most novel vector yet: malware detected Claude Code's GitHub integration running on an infected SAP developer machine and hijacked it โ€” committing as claude@users.noreply.github.com with no token theft required. 11:23 UTC malicious commit 0a3dd44d. Modified release-please.yml to extract short-lived npm OIDC tokens โ€” stripped SLSA provenance. By 11:25 UTC four packages published: @cap-js/sqlite@2.2.2, @cap-js/postgres@2.2.2, @cap-js/db-service@2.10.1, mbt@1.2.48. 12:12 UTC: persistence deployed via .claude/settings.json SessionStart hook re-running .vscode/setup.mjs dropper on every future IDE launch. Payload: preinstall hook โ†’ setup.mjs dropper; obfuscation upgraded to 49,093-entry string table + PBKDF2/SHA256 S-box cipher + 6 gzip blobs; 39 target paths including ~/.claude.json and ~/.kiro/settings/mcp.json. Python memory dumper targets Runner.Worker process in CI. Self-propagation: enumerates npm tokens โ†’ injects into accessible packages โ†’ republishes as package-updated.tgz. Repo descriptions read: "A Mini Shai-Hulud has Appeared" (Dune universe naming). SAP emergency response 13:33 UTC; clean releases by 13:45.
claude@github.claude/settings.jsonNo SLSA provenancesetup.mjsapi.cloud-aws.adc-e.ukpackage-updated.tgz
08
PyPI ยท npm ยท Packagist
APRIL 30, 2026 โ€” CROSS-ECOSYSTEM
Mini Shai-Hulud โ€” Three Ecosystems, One Day
Three ecosystems hit simultaneously on April 30. Root cause: an Intercom developer installed pyannote-audio, which pulled in compromised lightning@2.6.2 (PyPI) as a transitive dependency โ€” giving attackers a GitHub token. From there: intercom-client@7.0.4 (npm, ~360K weekly downloads) trojanized via compromised GitHub account nhur using fake Dependabot commit conventions. Within hours: intercom/intercom-php@5.0.2 (Packagist, ~285K installs/month) converted to a Composer plugin executing on post-install-cmd. All three share the same 11.7 MB obfuscated router_runtime.js payload โ€” bootstrapped by Bun v1.3.13 downloaded from GitHub, exfiltrating via GitHub API (RSA-encrypted) with fallback to zero.masscan.cloud:443. New targets: crypto wallets (Bitcoin, Monero, Exodus, Ledger), VPN configs (NordVPN, ProtonVPN), Discord/Slack sessions. Repository poisoning injects .claude/router_runtime.js + .claude/settings.json into up to 50 branches per repo, committed as claude@users.noreply.github.com. Payload strings: "A Mini Shai-Hulud has Appeared", "EveryBoiWeBuildIsAWormyBoi", "Exiting as russian language detected!" (same anti-attribution geofence as CanisterWorm). Attribution: onion link in GitHub disclosures claimed TeamPCP + LAPSUS$ involvement.
lightning@2.6.2/2.6.3intercom-client@7.0.4intercom/intercom-php@5.0.2zero.masscan.cloudrouter_runtime.jsnhur (GitHub)claude@github commits
ISSUE #4

Infrastructure & Arsenal

C2 ARCHITECTURE

Command & Control

  • tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io โ€” ICP blockchain canister. No takedown. Methods: get_latest_link, update_link.
  • checkmarx[.]zone โ€” LiteLLM backdoor polling (~50 min interval)
  • 83.142.209.203:8080 โ€” LiteLLM + Telnyx exfil server
  • scan.aquasecurtiy[.]org โ†’ 45.148.10.212 โ€” Trivy C2 typosquat
  • audit.checkmarx[.]cx โ€” Bitwarden C2 typosquat
  • whereisitat.lucyatemysuperbox[.]space โ€” Xinference exfil
  • api.cloud-aws.adc-e[.]uk โ€” Fake AWS SDK partition
  • nsa[.]cat โ€” Attacker VPS (ramimac.me)
  • Cloudflare Tunnels โ€” GitHub Actions exfil (Unit42)
  • tpcp-docs โ€” Fallback repo in victim GitHub orgs
  • zero[.]masscan[.]cloud:443/v1/telemetry โ€” Mini Shai-Hulud exfil (AES-256-GCM + RSA-OAEP)
PERSISTENCE

Foothold Mechanisms

  • ~/.local/share/pgmon/service.py + systemd โ€” CanisterWorm. 5-min delay, 50-min poll.
  • litellm_init.pth in site-packages โ€” fires on Python start after uninstall
  • ~/.config/sysmon/sysmon.py + systemd โ€” LiteLLM polling backdoor
  • %APPDATA%\...\Startup\msbuild.exe โ€” Telnyx Windows, no admin
  • .claude/settings.json SessionStart hook โ€” re-infects on IDE open
  • .vscode/setup.mjs โ€” dropper paired with Claude Code hook
CUSTOM ARSENAL

Toolset

  • Bun v1.3.13 โ€” from GitHub CDN, keeps dropper clean
  • obfuscator.io โ€” 43Kโ€“49K string tables, PBKDF2 S-box, gzip blobs
  • WAV steganography โ€” XOR-encoded payload in audio frames
  • TruffleHog โ€” post-exfil credential validation (Wiz)
  • Nord Stream tool โ€” branch: dev_remote_ea5Eu/test/v1
  • Mullvad VPN โ€” 138.199.15.172, 154.47.29.12, 170.62.100.245
  • Russian locale exit โ€” LANG/LC_ALL anti-attribution geofencing
  • AI poisoning โ€” shell config writes that land in AI context
ISSUE #5

Indicators of Compromise

Domain / URLPurposeCampaign
scan.aquasecurtiy[.]orgTrivy C2 (typosquat aquasecurity)Trivy
checkmarx[.]zoneKICS/LiteLLM C2 polling + VSX exfilLiteLLM
models.litellm[.]cloudLiteLLM primary exfilLiteLLM
audit.checkmarx[.]cxBitwarden C2 (typosquat checkmarx.com)Bitwarden
whereisitat.lucyatemysuperbox[.]spaceXinference exfilXinference
api.cloud-aws.adc-e[.]ukFake AWS SDK partition redirectBitwarden / cap-js
tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0[.]ioICP canister C2 โ€” no takedownCanisterWorm
nsa[.]catAttacker VPSCampaign infra
zero[.]masscan[.]cloudMini Shai-Hulud exfil (:443/v1/telemetry)Mini Shai-Hulud
IPNotesSource
45.148.10.212TECHOFF SRV LIMITED, Amsterdam โ€” Trivy C2Wiz
83.142.209.203LiteLLM + Telnyx exfil (:8080)Mend.io
83.142.209.11checkmarx[.]zone resolutionSysdig
23.142.184.129TeamPCP infrastructureUnit42
63.251.162.11TeamPCP infrastructureUnit42
195.5.171.242TeamPCP infrastructureUnit42
138.199.15.172Mullvad VPN (Datacamp Ltd)Wiz
154.47.29.12Mullvad VPN exitWiz
170.62.100.245Mullvad VPN exitWiz
193.32.126.157Mullvad VPN exitWiz
105.245.181.120Vodacom callback proxyWiz
PackageVersion(s)Ecosystem
aquasecurity/trivy-action75/76 tags hijackedGitHub Actions
aquasecurity/setup-trivy7 tags hijackedGitHub Actions
checkmarx/kics-github-actionAll 35 tagsGitHub Actions
checkmarx/ast-github-actionv2.3.28GitHub Actions
litellm1.82.7, 1.82.8PyPI
telnyx4.87.1, 4.87.2PyPI
xinference2.6.0, 2.6.1, 2.6.2PyPI
@bitwarden/cli2026.4.0npm
@cap-js/sqlite2.2.2npm
@cap-js/postgres2.2.2npm
@cap-js/db-service2.10.1npm
mbt1.2.48npm
checkmarx.ast-resultsv2.53Open VSX
checkmarx.cx-dev-assistv1.7.0Open VSX
@emilgroup/* (28 pkgs)Worm-infectednpm
@opengov/* (16 pkgs)Worm-infectednpm
@automagik/genie4.260421.33โ€“39npm (Apr 21)
pgserve1.1.11โ€“1.1.13npm (Apr 21)
@fairwords/websocket1.0.38, 1.0.39npm (Apr 21)
lightning2.6.2, 2.6.3PyPI (Apr 30)
intercom-client7.0.4npm (Apr 30)
intercom/intercom-php5.0.2Packagist (Apr 30)
Path / ArtifactDescription
~/.local/share/pgmon/service.pyCanisterWorm C2 backdoor (pgmon masquerade)
~/.config/systemd/user/pgmon.serviceCanisterWorm systemd persistence
litellm_init.pth (site-packages)Fires on every Python start after uninstall
~/.config/sysmon/sysmon.pyLiteLLM polling backdoor
/tmp/pglogPayload execute target (both backdoors)
/tmp/.pg_stateC2 state tracking file
tpcp.tar.gzSelf-referential exfil archive
love.tar.gzXinference exfil archive
%APPDATA%\...\Startup\msbuild.exeTelnyx Windows startup, hidden lock
.claude/settings.jsonSAP cap-js SessionStart hook re-fires on IDE open
.vscode/setup.mjsShai-Hulud dropper copy paired with Claude Code hook
package-updated.tgzWorm self-republish artifact (SAP wave)
tmp.987654321.lockAnti-double-execution lock (Shai-Hulud)
config.mjsBun runtime download logic (Shai-Hulud)
tpcp-docs (GitHub repo)Fallback exfil in victim GitHub org
.claude/router_runtime.jsMini Shai-Hulud 11.7 MB obfuscated payload (repo-poisoning)
.claude/settings.json (Mini Shai-Hulud)Injected into up to 50 branches per repo
setup-intercom.shPackagist dropper โ€” downloads Bun 1.3.13, runs router_runtime.js
src/composerPlugin.phpConverts intercom-php into Composer plugin for post-install execution
SHA256Notes
30015DD1E2CF4DBD49FFF9DDEF2AD4622DA2E60E5C0B6228595325532E948F14Self-signed TLS cert (Telnyx wave)
41C4F2F37C0B257D1E20FE167F2098DA9D2E0A939B09ED3F63BC4FE010F8365CSelf-signed TLS cert (Telnyx wave)
D8CAF4581C9F0000C7568D78FB7D2E595AB36134E2346297D78615942CBBD727Self-signed TLS cert (Telnyx wave)
Account / IdentityDetails
@pcpcatsTwitter/X โ€” posted xinference denial; monitor for campaign announcements
@teampcp (Telegram)Primary channel โ€” grew 700 โ†’ 1,180+ during March 2026 wave
@Persy_PCP (Telegram)Earlier/secondary Telegram identity (Flare.io, ramimac.me)
MegaGame10418Operative who exploited Feb 27 PwnRequest to steal Aqua PAT
helloworm00@proton.meGitHub test account โ€” validated beautifulcastle C2 channel Apr 20
claude@users.noreply.github.comClaude Code identity hijacked to commit to SAP cap-js
aqua-botCompromised Aqua service account used in Trivy tag spoofing
iinuwa@bitwarden.comReal Bitwarden developer impersonated in unsigned CI commit
krrishdholakiaLiteLLM PyPI maintainer โ€” credentials stolen via Trivy-poisoned CI
nhurCompromised GitHub account โ€” used to publish intercom-client@7.0.4
tdtqy-oyaaa-aaaae-af2dq-caiICP canister ID โ€” CanisterWorm primary C2
cjn37-uyaaa-aaaac-qgnva-caiICP canister ID โ€” April 21 wave (The Register)
ISSUE #6

MITRE ATT&CKยฎ

ISSUE #7

Sources

If your research was used here and isn't credited, I want to fix that โ€” please reach out: