TeamPCP — Software Supply-Chain Compromise (FBI FLASH-20260702-01)

Trojanized developer & security tooling (Trivy, KICS, LiteLLM, Telnyx Python SDK) delivering credential-stealing malware — CanisterWorm, SANDCLOCK, Mini Shai-Hulud, Miasma — that harvests cloud tokens, SSH keys, and Kubernetes secrets from CI/CD and developer hosts.
Threat
TeamPCP (campaign)
Severity
ACTIVE SUPPLY-CHAIN
Type
Supply chain / credential theft
Access
Trojanized package via CI/CD
Version
v0.2 · 2026-07-08
Author
HuntPack
Confidence
High (FBI FLASH)
01

Executive Summary

TeamPCP is a large-scale software supply-chain campaign flagged by the FBI in FLASH advisory FLASH-20260702-01 (2026-07-02), reportedly affecting 1,000+ organizations. The actors inject malicious code into legitimate developer and security packages — publicly named examples include Trivy, KICS, LiteLLM, and the Telnyx Python SDK — then publish trojanized versions through normal distribution channels and wait for CI/CD pipelines to pull them automatically.

Once installed, the tainted packages deploy credential-stealing malware — CanisterWorm (cloud access tokens, API keys, and credentials for AWS/GCP/Azure), SANDCLOCK (AWS credentials, Kubernetes ServiceAccount tokens, environment variables, and cryptocurrency wallet data), and the self-replicating Mini Shai-Hulud / Miasma worms that spread across npm and PyPI while harvesting secrets. Stolen data is exfiltrated to attacker-controlled GitHub repositories (tpcp-docs, docs-tpcp) and lookalike domains; the actors then extort victims and publish names on a leak site.

The attacker objective is credential harvesting at build time — a single tainted dependency yields cloud keys and cluster secrets that unlock downstream environments. The highest-value defensive angle is watching build/developer hosts and CI runners for package-manager processes that read cloud/SSH/Kubernetes credential material or make outbound connections to the published TeamPCP infrastructure.

Defender priority: Block the FBI-published C2 IPs and lookalike domains (Q1/Q2 — real atomic IOCs), then hunt build/dev hosts for package-install processes touching .aws/.ssh/kube credentials (Q3) and any egress to the attacker GitHub exfil repos (Q4). Rotate every credential exposed to an affected pipeline — assume harvested until proven otherwise.

02

Source Review & Web Hunter Notes

TierSourceKey findingCarry forward
1FBI FLASH-20260702-01 (IC3)Large-scale supply-chain compromise; trojanized dev/security tools; credential theft, persistence, extortion + leak site; published IOCs.Yes — campaign, IOCs
2SecurityAffairs — FBI TeamPCP reportTrojanized Trivy/KICS/LiteLLM/Telnyx SDK; malware CanisterWorm/SANDCLOCK/Mini Shai-Hulud/Miasma; targets AWS/GCP/Azure creds, SSH keys, K8s ServiceAccount tokens, env vars, crypto wallets; exfil via GitHub repos tpcp-docs/docs-tpcp; atomic IPs + lookalike domains.Yes — TTPs, IOCs
2gbhackers / cybernews / HSToday1,000+ firms affected; trojanized updates steal cloud tokens, SSH keys, Kubernetes secrets; automatic CI/CD pull is the delivery vector.Yes — scale, vector

Web-hunter note: The FBI FLASH lists 27 file hashes that are not enumerated in secondary reporting; this pack therefore uses only the IP and domain IOCs that appear verbatim in reliable secondary sources and leaves hash blocks as REPLACE_WITH_... placeholders to be filled from the FLASH PDF or your own findings. Do not substitute unverified hashes.

03

Hunt Brief & Attack Chain

Hunt hypotheses (fidelity-ordered)

  1. H1 (high): A host connects to a published TeamPCP C2 IP — direct atomic-IOC match.
  2. H2 (high): A host resolves a TeamPCP lookalike domain (checkmarx.zone, models.litellm.cloud, git-tanstack.com, recv.hackmoltrepeat.com).
  3. H3 (high): A package-manager / interpreter process (npm, node, pip, python, bun, yarn) reads cloud/SSH/Kubernetes credential material during or after an install — the SANDCLOCK/CanisterWorm harvest behavior.
  4. H4 (medium): Outbound push or reference to the attacker GitHub exfil repos tpcp-docs / docs-tpcp.
  5. H5 (medium): The Bun runtime is fetched and executed on a build/dev host — the Mini Shai-Hulud / Miasma bootstrap.
  6. H6 (medium): A security-scanner binary (trivy, kics) or LiteLLM spawns a shell or makes unexpected egress — trojanized-tool post-install behavior.

Attack chain

#StepTelemetryHunt angle
1CI/CD auto-pulls a trojanized packageProcess (npm/pip install)H5, H6
2Post-install script fetches Bun / stage-2ProcessRollup2 · NetworkConnectIP4H5, H1
3Harvest AWS/GCP/Azure/SSH/K8s creds + envProcessRollup2 (CommandLine)H3
4Exfil to GitHub repos / lookalike domainsDnsRequest · NetworkConnectIP4H2, H4
5Worm re-publishes to npm/PyPI (self-spread)Process (npm publish)H5
6Downstream access with stolen cloud keysCloud audit logsNative §7
04

Consolidated IOC Table

Provenance: IPs and domains below appear verbatim in FBI-derived secondary reporting (SecurityAffairs). File hashes (27 in the FLASH) are not reproduced here and are left as placeholders — pull them from the IC3 FLASH PDF before blocking.

TypeValueConfidenceActionContextExpiry
IPv483.142.209.11HighdetectTeamPCP C2 infrastructure2027-01-08
IPv483.142.209.194HighdetectTeamPCP C2 infrastructure2027-01-08
IPv483.142.209.203HighdetectTeamPCP C2 infrastructure2027-01-08
IPv445.148.10.212HighdetectTeamPCP C2 infrastructure2027-01-08
IPv494.154.172.43HighdetectTeamPCP C2 infrastructure2027-01-08
IPv467.217.57.240HighdetectTeamPCP C2 infrastructure2027-01-08
Domaincheckmarx.zoneHighdetectVendor-lookalike (Checkmarx typosquat)2026-10-08
Domainmodels.litellm.cloudHighdetectLiteLLM-lookalike delivery/C22026-10-08
Domaingit-tanstack.comHighdetectGitHub/TanStack-lookalike2026-10-08
Domainrecv.hackmoltrepeat.comHighdetectExfil receiver2026-10-08
GitHub repotpcp-docs, docs-tpcpMediumhuntAttacker exfil repositories2026-10-08
Trojanized pkgTrivy · KICS · LiteLLM · Telnyx Python SDKMediumhuntNamed affected packages (verify installed versions)n/a
SHA256REPLACE_WITH_FLASH_HASH (27 in FLASH)MediumdetectMalware payloads — pull from IC3 FLASH PDF2027-01-08
05

Affected Surface & Telemetry Matrix

SurfaceRequired telemetryPriorityGap risk
CI/CD runners (Linux)SyntheticProcessRollup2, NetworkConnectIP4, DnsRequestCriticalHigh — runners often lack an EDR sensor
Developer workstationsProcessRollup2, DnsRequestCriticalLow
Build/artifact serversProcessRollup2, NetworkConnectIP4HighMed
Cloud control plane (AWS/GCP/Azure)CloudTrail / audit logsHighHigh — post-theft use is off-endpoint
Kubernetes clustersAPI server audit logsMediumHigh — ServiceAccount token abuse
06

ATT&CK Mapping

TacticTechniqueBehaviorQuery / Control
Initial AccessT1195.002 — Compromise Software Supply ChainTrojanized Trivy/KICS/LiteLLM/Telnyx pulled by CI/CDQ5 · Q6 · pin deps
ExecutionT1059.004 / T1059.006 — Shell / PythonPost-install script runs, fetches Bun stage-2Q5 · Q6
Credential AccessT1552.001 / T1552.005 — Creds in Files / Cloud metadataReads .aws/.ssh/kube creds, env varsQ3
CollectionT1530 — Data from Cloud Storage / SecretsHarvest cloud tokens, K8s ServiceAccount tokens, walletsQ3
Command & ControlT1071.001 / T1568 — Web / lookalike domainsC2 to published IPs and typosquat domainsQ1 · Q2
ExfiltrationT1567.001 — Exfil to Code RepositoryPush stolen data to GitHub tpcp-docs/docs-tpcpQ4
07

Native Audit-Log Hunts (non-CQL)

  • Dependency audit: Enumerate installed versions of Trivy, KICS, LiteLLM, and the Telnyx Python SDK across build images and lockfiles; compare against vendor advisories and pin to known-good versions.
  • AWS CloudTrail: Hunt for GetCallerIdentity, ListBuckets, or STS activity from CI/CD credentials originating from unfamiliar source IPs (correlate with the C2 IPs) or new user agents shortly after a build.
  • GCP / Azure audit: Review service-account key usage and token grants from non-pipeline locations after 2026-06-01.
  • Kubernetes API audit: Look for ServiceAccount tokens used from outside the cluster / from developer or unknown IPs.
  • GitHub org audit log: Search for pushes to or creation of repos named tpcp-docs / docs-tpcp, and for outbound data pushes from CI tokens.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · Connection to TeamPCP C2 IP infrastructure
CONF HIGHFP LOWCOST LOW

Looks for: any endpoint connecting to a published TeamPCP command-and-control IP — a direct atomic-IOC match. FP: near-zero; investigate every hit.

// HUNT: outbound to published TeamPCP C2 IPs (FBI FLASH-20260702-01)
// MITRE: T1071.001 | CONF: high  FP: low  COST: low
// REQUIRES: NetworkConnectIP4 | FALSE POSITIVES: none expected
#event_simpleName=/NetworkConnectIP4/
| RemoteAddressIP4=/^(83\.142\.209\.11|83\.142\.209\.194|83\.142\.209\.203|45\.148\.10\.212|94\.154\.172\.43|67\.217\.57\.240)$/
| table([ComputerName, aid, ContextBaseFileName, RemoteAddressIP4, RemotePort, UserName, Timestamp], limit=max)
Q2 · DNS resolution of TeamPCP lookalike domains
CONF HIGHFP LOWCOST LOW

Looks for: resolution of the vendor-lookalike / exfil domains named in the campaign. FP: negligible — these are typosquats with no legitimate use.

// HUNT: DNS for TeamPCP lookalike / exfil domains
// MITRE: T1568, T1071.001 | CONF: high  FP: low  COST: low
// REQUIRES: DnsRequest | FALSE POSITIVES: none expected
#event_simpleName=/DnsRequest/
| DomainName=/checkmarx\.zone|models\.litellm\.cloud|git-tanstack\.com|recv\.hackmoltrepeat\.com/i
| table([ComputerName, aid, DomainName, ContextBaseFileName, UserName, Timestamp], limit=200)
Q3 · Package-install process reading cloud/SSH/K8s credentials
CONF HIGHFP MEDCOST MED

Looks for: an interpreter / package-manager process (node, npm, python, pip, bun, yarn) whose child command line references cloud, SSH, or Kubernetes credential material — the SANDCLOCK/CanisterWorm harvest step. FP: legit tooling (aws-cli, kubectl, terraform) reads these paths; scope to package-manager parents and exclude known IaC/admin accounts.

// HUNT: credential harvest under a package-manager parent
// MITRE: T1552.001, T1552.005, T1530 | CONF: high  FP: med  COST: med
// REQUIRES: ProcessRollup2 | FALSE POSITIVES: aws-cli/kubectl/terraform
// TUNING: exclude approved IaC service accounts & CI images that legitimately read creds
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(node|npm|npx|yarn|pnpm|bun|python[0-9.]*|pip[0-9]*)(\.exe)?$/i
| CommandLine=/credentials|id_rsa|id_ed25519|\.aws|\.ssh|\.kube|kubeconfig|serviceaccount|access[_-]?key|secret[_-]?key|\.npmrc|\.env|aws_session_token/i
| table([ComputerName, aid, ParentBaseFileName, FileName, CommandLine, UserName, ProcessStartTime], limit=200)
Q4 · Exfil reference to attacker GitHub repos
CONF MEDFP LOWCOST LOW

Looks for: any process command line referencing the attacker exfil repositories tpcp-docs / docs-tpcp (git push, curl to the GitHub API). FP: low — these repo names are attacker-specific.

// HUNT: exfil to attacker GitHub repos tpcp-docs / docs-tpcp
// MITRE: T1567.001 | CONF: med  FP: low  COST: low
// REQUIRES: ProcessRollup2 | FALSE POSITIVES: rare — attacker-specific names
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| CommandLine=/tpcp-docs|docs-tpcp/i
| table([ComputerName, aid, ParentBaseFileName, FileName, CommandLine, UserName, ProcessStartTime], limit=200)
Q5 · Bun runtime fetched/executed on a build host
CONF MEDFP MEDCOST LOW

Looks for: the Bun JavaScript runtime being downloaded or executed by a Python/Node parent — the Mini Shai-Hulud / Miasma bootstrap that fetches Bun to run its payload. FP: teams that legitimately use Bun; baseline expected Bun usage and alert on Bun spawned by an unexpected package-install parent.

// HUNT: Bun runtime bootstrap (Mini Shai-Hulud / Miasma)
// MITRE: T1059.006, T1195.002 | CONF: med  FP: med  COST: low
// REQUIRES: ProcessRollup2 | FALSE POSITIVES: legit Bun adopters
// TUNING: allowlist hosts/repos that legitimately build with Bun
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(python[0-9.]*|node|npm|pip[0-9]*|sh|bash)(\.exe)?$/i
| FileName=/^bun(\.exe)?$/i OR CommandLine=/bun\.sh|install.*\bbun\b|curl.*bun/i
| table([ComputerName, aid, ParentBaseFileName, FileName, CommandLine, UserName], limit=200)
Q6 · Security scanner / LiteLLM spawning shell or egress
CONF MEDFP MEDCOST LOW

Looks for: a trojanized security tool (Trivy, KICS) or LiteLLM process spawning a shell or network utility — behavior these scanners should not exhibit. FP: some scanners shell out for plugins; scope to shells/download utilities and correlate with Q1–Q3.

// HUNT: trojanized dev/security tool spawns shell or downloader
// MITRE: T1195.002, T1059 | CONF: med  FP: med  COST: low
// REQUIRES: ProcessRollup2 | FALSE POSITIVES: scanner plugin exec
// TUNING: correlate with Q1/Q2/Q3; exclude documented plugin behavior
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(trivy|kics|litellm)(\.exe)?$/i
| FileName=/^(sh|bash|dash|cmd|powershell|pwsh|curl|wget|nc|ncat)(\.exe)?$/i
| table([ComputerName, aid, ParentBaseFileName, FileName, CommandLine, UserName], limit=200)
09

CrowdStrike Custom IOA Recommendations

IOA namePatternExclusionsAction
TeamPCP-C2-NetworkConnection to any published TeamPCP C2 IP / lookalike domainNoneBlock (via Falcon Custom IOC, not IOA)
PkgMgr-Cred-Readnode/npm/python/pip/bun parent; child cmdline reads .aws/.ssh/.kube credsApproved IaC service accounts & CI imagesDetect
Scanner-Spawns-Shelltrivy/kics/litellm parent → sh/bash/curl/wget childDocumented plugin execDetect → Block after tuning

The network indicators (Q1/Q2) are best deployed as Falcon Custom IOCs (block) rather than IOAs. Keep Q3/Q6 as detect-only IOAs until the IaC/plugin exclusions are baselined.

10

Machine-Readable IOC Appendix

IPs and domains are ready to import. Hashes are placeholders — pull the 27 from the IC3 FLASH PDF before enabling the SHA256 block.

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
ipv4,83.142.209.11,detect,critical,2027-01-08,TeamPCP C2,campaign:TeamPCP
ipv4,83.142.209.194,detect,critical,2027-01-08,TeamPCP C2,campaign:TeamPCP
ipv4,83.142.209.203,detect,critical,2027-01-08,TeamPCP C2,campaign:TeamPCP
ipv4,45.148.10.212,detect,critical,2027-01-08,TeamPCP C2,campaign:TeamPCP
ipv4,94.154.172.43,detect,critical,2027-01-08,TeamPCP C2,campaign:TeamPCP
ipv4,67.217.57.240,detect,critical,2027-01-08,TeamPCP C2,campaign:TeamPCP
domain,checkmarx.zone,detect,critical,2026-10-08,Checkmarx lookalike,campaign:TeamPCP
domain,models.litellm.cloud,detect,critical,2026-10-08,LiteLLM lookalike,campaign:TeamPCP
domain,git-tanstack.com,detect,critical,2026-10-08,GitHub lookalike,campaign:TeamPCP
domain,recv.hackmoltrepeat.com,detect,critical,2026-10-08,Exfil receiver,campaign:TeamPCP
sha256,REPLACE_WITH_FLASH_HASH,detect,critical,2027-01-08,TeamPCP payload (from IC3 FLASH),campaign:TeamPCP
Behavioral Signaturesdetection logic
Parent(node|npm|python|pip|bun) -> cmdline reads .aws|.ssh|.kube|serviceaccount|.env
Parent(trivy|kics|litellm) -> Child(sh|bash|curl|wget|nc)
Bun runtime fetched/executed by a package-install parent
cmdline references tpcp-docs | docs-tpcp
Egress to any TeamPCP C2 IP or lookalike domain
Named Malware / Toolingreference
Campaign: TeamPCP (FBI FLASH-20260702-01, 2026-07-02)
Malware: CanisterWorm (cloud tokens/keys AWS/GCP/Azure)
         SANDCLOCK (AWS creds, K8s ServiceAccount tokens, env, wallets)
         Mini Shai-Hulud / Miasma (self-replicating npm/PyPI worms)
Trojanized: Trivy, KICS, LiteLLM, Telnyx Python SDK
Exfil repos: tpcp-docs, docs-tpcp
Dependency / Secret Auditexposure check
1. Inventory Trivy/KICS/LiteLLM/Telnyx SDK versions in build images + lockfiles
2. Pin to vendor known-good; rebuild affected images
3. Rotate ALL secrets reachable from affected pipelines:
   - AWS/GCP/Azure keys & STS tokens
   - SSH keys (id_rsa, id_ed25519)
   - Kubernetes ServiceAccount tokens
   - npm/PyPI publish tokens, .npmrc, .env
4. Review cloud + GitHub audit logs since 2026-06-01
11

Detection Validation Gates

GateCheckPass criteria
Telemetry readyDnsRequest + NetworkConnectIP4 on dev/build hosts; CI runners have a sensorRunners visible in Falcon; if not, note the gap
Benign baselineRun Q3/Q5/Q6 over 7–14 daysDocument IaC/Bun/plugin usage as exclusions
Positive testIn a lab: package-install parent reads a dummy .aws/credentials; resolve a test domainQ2 and Q3 fire
PromotionImport IPs/domains as Custom IOCs (block); Q3/Q6 FP acceptableNetwork IOCs blocking; behavioral IOAs detect-only
12

Hardening — Tiered

Immediate (this week)
  • Block the published IPs and domains at the proxy/firewall and import as Falcon Custom IOCs (M1037 — Filter Network Traffic).
  • Rotate all pipeline-reachable secrets — cloud keys, SSH keys, K8s ServiceAccount tokens, npm/PyPI publish tokens — and revoke long-lived cloud keys (M1027 / M1015 — Credential + Active Directory/SSO hygiene).
  • Pin and rebuild any image using Trivy/KICS/LiteLLM/Telnyx SDK to a vendor-verified known-good version (M1051 — Update Software).
Near term (1–4 weeks)
  • Egress-restrict CI/CD runners to an allowlist of package registries and required endpoints; deny arbitrary outbound (M1037 — Filter Network Traffic; CIS Software Supply Chain Security Guide).
  • Short-lived, workload-scoped cloud credentials — OIDC federation for CI instead of static keys; per-job Kubernetes ServiceAccounts with minimal RBAC (M1026 — Privileged Account Management).
  • Lockfile + integrity enforcement — require pinned hashes (`npm ci`, `pip --require-hashes`); block install-time scripts where feasible (`npm --ignore-scripts`) (M1016 — Vulnerability Scanning / supply-chain policy).
Strategic (1–3 months)
  • Build-provenance / SLSA — signed artifacts and verified provenance across the pipeline; internal registry mirror with admission control (M1045 — Code Signing).
  • Secretless CI — remove static secrets from runners entirely; broker all access through short-lived identity (M1027 — Password/Secret Policies).
  • Continuous dependency monitoring — SCA + typosquat/lookalike-domain detection wired into alerting (⚠ best-practice; align to CIS Supply Chain guidance).
13

Deployable Playbooks

1 · Inventory affected packages (shell)

# Find the named tools + versions across the fleet / build images
for t in trivy kics litellm; do command -v "$t" >/dev/null 2>&1 && printf '%s: %s\n' "$t" "$($t --version 2>/dev/null | head -1)"; done
# Python SDK check
pip show telnyx 2>/dev/null | grep -E '^(Name|Version)'
# Grep lockfiles for the named packages
grep -REn 'trivy|kics|litellm|telnyx' --include=package-lock.json --include=requirements*.txt --include=poetry.lock . 2>/dev/null

2 · Harden npm/pip installs (CI config)

# npm: deterministic install, no lifecycle scripts, verified integrity
npm ci --ignore-scripts
# pip: require hashes so a swapped artifact fails closed
pip install --require-hashes -r requirements.txt
# Restrict runner egress (example: default-deny + registry allowlist at the network layer)
#   allow: registry.npmjs.org, pypi.org, files.pythonhosted.org, internal mirror
#   deny:  everything else (block the TeamPCP IPs/domains explicitly)

3 · Rotate exposed cloud/K8s credentials (CLI)

# AWS: deactivate + rotate any key used by CI
aws iam list-access-keys --user-name ci-deployer
aws iam update-access-key --access-key-id AKIAEXAMPLE --status Inactive --user-name ci-deployer
# Kubernetes: rotate a compromised ServiceAccount token (delete the secret; controller reissues)
kubectl -n build delete secret ci-deployer-token
# GitHub: revoke and reissue CI/publish tokens from org settings (audit tpcp-docs/docs-tpcp first)
14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateBlock TeamPCP IPs/domains; network-contain any host with Q1/Q2 hits; freeze affected CI pipelinesSOCQ1/Q2 hits, block rules
EradicateRemove trojanized package versions; rebuild images from pinned known-good; kill malicious install processesDevOps + IRLockfile diffs, Q5/Q6 timeline
RotateRotate ALL pipeline-reachable secrets (cloud keys, SSH, K8s tokens, publish tokens); revoke static keysIAM / CloudRotation log
Assess exposureReview cloud/GitHub/K8s audit logs since 2026-06-01 for stolen-credential use from C2 IPsIRCloudTrail / audit findings
RecoverRe-enable pipelines only after provenance verification; add lookalike-domain + SCA monitoringPlatformRebuild + validation record
15

Detection Coverage Map

TechniqueBehaviorCQLIOA/IOCCoverage
T1195.002Trojanized package pulledQ5, Q6Dependency auditPartial — pre-install pull not on endpoint
T1552.x / T1530Credential harvestQ3PkgMgr-Cred-ReadGood
T1071.001 / T1568C2 to IPs / lookalike domainsQ1, Q2Custom IOC (block)Good
T1567.001Exfil to GitHub reposQ4Partial
T1059.006Bun bootstrapQ5Partial
Post-theft cloud/K8s useStolen-key abuseNative §7 audit logsGAP — off-endpoint

Known gaps: The initial trojanized-package pull and the downstream use of stolen cloud/Kubernetes credentials happen off the endpoint (in the registry and in the cloud control plane) — those require dependency auditing and cloud/K8s/GitHub audit-log review (§7), not EDR telemetry. CI/CD runners frequently have no Falcon sensor, which is the single biggest coverage risk for this campaign; deploy sensors to runners or compensate with runner egress control. File hashes are unenumerated pending the IC3 FLASH PDF.

16

Hunt Summary Ticket

TITLE:      TeamPCP — Software Supply-Chain Credential-Theft Campaign (FBI FLASH-20260702-01)
SEVERITY:   Critical (active, 1,000+ orgs, cloud/K8s credential theft)
SCOPE:      CI/CD runners, developer workstations, build/artifact servers using Trivy/KICS/LiteLLM/Telnyx SDK
HYPOTHESIS: A trojanized dependency harvested cloud/SSH/K8s creds and exfiltrated them to TeamPCP infra
QUERIES:    Q1 C2 IPs | Q2 lookalike domains | Q3 cred harvest | Q4 GitHub exfil | Q5 Bun bootstrap | Q6 scanner spawns shell
DO FIRST:   Block IPs/domains (Custom IOC); run Q1+Q2 fleet-wide; inventory Trivy/KICS/LiteLLM/Telnyx versions
FINDINGS:   <record hits>
GAPS:       package pull + stolen-key use are off-endpoint; CI runners may lack a sensor; 27 FLASH hashes not yet imported
ACTIONS:    Rotate ALL pipeline secrets; pin/rebuild images; egress-restrict runners; review cloud/GitHub audit logs
OWNER:      HuntPack
VERSION:    v0.2 · 2026-07-08
17

Changelog

v0.22026-07-24CQL correctness pass. All table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.
v0.12026-07-08Initial HuntPack — 6 CQL queries (2 atomic-IOC network hunts + 4 behavioral), 3 IOA/IOC recs, tiered supply-chain hardening, credential-rotation playbooks, containment runbook. IPs/domains cited to FBI-derived reporting; 27 FLASH hashes left as placeholders pending the IC3 PDF.
18

References

TierSourceUsed forAccess date
1FBI FLASH-20260702-01 (IC3)Campaign confirmation, IOCs, mitigations2026-07-08
2SecurityAffairs — FBI TeamPCP reportTrojanized packages, malware families, IP/domain IOCs, exfil repos2026-07-08
2gbhackers — trojanized updates steal cloud tokens/SSH/K8s secretsCredential targets, delivery vector2026-07-08
2Cybernews — 1,000+ firms hitScale, extortion/leak-site context2026-07-08
2HSToday — FBI warns of TeamPCP supply-chain attacksCorroboration2026-07-08