ghtier
← Back to Organization plane incidents
OrganizationMarch – April 2026

TeamPCP tag force-overwrite campaign

The most complete demonstration of tag-write as a permission tier. On 19 March 2026 (CVE-2026-33634), continuing an attack that began in late February, the actors used credentials with tag-write privileges to publish Trivy v0.69.4 and force-overwrite 76 of 77 tags in aquasecurity/trivy-action and all seven in aquasecurity/setup-trivy, redirecting trusted versions to malicious commits with no visible change in release metadata. Checkmarx's KICS GitHub Action followed on 23 March, when all 35 of its tags were moved through a compromised service account, and on 24 March LiteLLM versions 1.82.7 and 1.82.8 were uploaded straight to PyPI with credentials taken from LiteLLM's own CI, where Trivy ran. Researchers traced at least seven waves through to @bitwarden/cli hijacked with stolen KICS npm tokens, and elementary-data via Actions script injection. Each compromised environment yielded the credentials for the next.

Permissions abused

Tag-write privilege (mass tag rewrite)Stolen PATs/npm tokens chained across projects

On the permission reference

Reported by: Trend Micro

How it unfolded

  1. 1

    Tag-write privilege force-overwrites 76 of 77 trivy-action tags

    Using credentials with tag-write access, the actors force-overwrote almost every release tag in aquasecurity/trivy-action (76 of 77) and all seven tags in aquasecurity/setup-trivy, redirecting every consumer pinning by tag to malicious commits — with no visible change in release metadata.

  2. 2

    Checkmarx's KICS Action is compromised via stolen PATs

    Days later, on March 23, the actors used stolen personal access tokens to compromise Checkmarx's KICS GitHub Action the same way, alongside OpenVSX extensions and LiteLLM on PyPI.

  3. 3

    Stolen npm tokens chain into the next project

    Credentials harvested from the KICS compromise — specifically npm tokens — were reused to hijack @bitwarden/cli.

  4. 4

    A separate wave uses plain script injection

    elementary-data was compromised through ordinary Actions script injection, a different technique from the tag-overwrite chain used elsewhere in the campaign.

  5. 5

    Each compromised project funds the next wave

    Researchers traced at least seven distinct waves, with each compromise's stolen credentials chaining directly into the next target rather than the campaign relying on a single initial foothold.

Mitigations

  • Apply tag-protection rulesets — release tags can't be force-moved after publication

  • Pin third-party Actions to a full commit SHA rather than a tag — a retargeted upstream tag can't silently change what your workflow runs

  • Set an organization-wide maximum PAT lifetime and rotate on schedule — stolen long-lived PATs were the mechanism chaining each wave to the next

  • Audit and revoke stale PATs and npm tokens on a recurring basis

  • Write and rehearse a credential-rotation runbook — this class of campaign rewards whoever rotates slowest

Frameworks

Part of

Contained. First seen March 2026, last seen April 2026. Mapping by ghtier, not yet reviewed. Threat landscape