Poisoned Pipeline

Poisoned Pipeline / Incidents / AS17

AS17 · 2026-03

Team PCP CI/CD secrets campaign

GitHub ActionsPyPICI/CD SaaSGitLab CIAzure PipelinesJenkinsBitbucketCircleCIAzureGitLabKubernetesMCP

Between 19 and 24 March 2026, Team PCP compromised trusted components
(including 76 of 77 version tags of the Trivy GitHub Action, the Checkmarx
KICS Action, the telnyx PyPI package, and LiteLLM), planted credential
stealers on CI runners, and collected secrets those runners had in memory.
CloudSEK later published the victim set: 78,330 distinct secrets from
2,186 organizations across GitLab, GitHub Actions, Azure DevOps, Jenkins,
Bitbucket, and CircleCI. The same month included a related axios npm
compromise dropping a RAT.

Mapped techniques

supply-chain Trusted CI components (Trivy Action, KICS, telnyx, LiteLLM)

T0122 · Initial Access · Vulnerability in third-party CI/CD actions

76 of 77 Trivy Action version tags were poisoned; the Checkmarx KICS
Action was hit with the same tag-repoint pattern.

T0121 · Resource Development · Compromised legitimate artifact

telnyx on PyPI and LiteLLM were trusted packages whose next versions
carried the stealer.

T0109 · Resource Development · Publish malicious artifact

Poisoned Action tags and package versions were published under real names.

T0181 · Initial Access · Malicious module injection

The telnyx PyPI stealer was hidden in a WAV file (steganography) inside
the package, not as an obvious install script.

post-supply-chain Victim CI/CD runners

T0132 · Privilege Escalation · Overprivileged CI/CD Runners

Runners held cloud keys, signing keys, and source-control tokens more
privileged than a phished laptop typically reaches.

T0140 · Credential Access · Harvest tokens from environment variables

Secrets loaded into the job environment were scraped from runner memory.

T0193 · Collection · Sensitive information in environment variables

JWTs, PATs, AWS keys, and OpenAI keys were present as env on the runner.

T0162 · Credential Access · Passwords in CI/CD logs

Pipeline logs and runner output were part of the credential surface
alongside in-memory env.

T0145 · Exfiltration · Bypass of outbound traffic control

Open outbound network from runners was the exfil path to attacker C2.

T0156 · Exfiltration · Exfiltration over webhooks

129 organizations leaked Slack webhooks; stolen webhooks are both loot
and an outbound channel.

T0199 · Impact · Secret leak

78,330 distinct secrets left 2,186 organizations in five days.

T0201 · Impact · Customers compromised

Downstream CI users of Trivy/KICS/telnyx/LiteLLM were the blast radius.

Framework gaps noted

Sources