Trivy v0.69.4 Software Supply Chain Attack: What You Need To Know

By
Artur Oleyarsh
March 23, 2026

Recently, the open-source software community joined forces to help investigate an attack campaign against Aqua’s Trivy open-source security scanner. A threat actor was able, by compromising credentials, to generate a malicious version of Trivy and a few additional projects that were affected, which we will mention in this blog post.

Because the Trivy scanner is widely used by security teams, we want affected clients and readers to be aware of this issue. This post goes over incident details and what to do if you are affected. 

As of writing this, the investigation is still in process and details are subject to change.

Trivy v0.69.4 Compromise: What happened?

In March 2026, a threat actor initiated a software supply chain attack campaign against a number of Aqua’s Trivy projects across the open-source software ecosystem. By compromising credentials, the threat actor was able to publish a malicious Trivy v0.69.4 release, force-push 76/77 version tags in aquasecurity/trivy-action to infostealer malware, and replace 7 tags in aquasecurity/setup-trivy with malicious commits.

Prior Trivy GitHub Actions Workflow Attack: Early March 2026

Aqua assumes that the current campaign is a follow up of an incident that happened in early March 2026, where Trivy was attacked via GitHub Actions WorkFlow (which was fixed), however this information is not yet confirmed.

During the earlier incident:

  1. The repository visibility was changed to private and renamed to aquasecurity/private-trivy
  2. GitHub releases between 0.27-0.69.1 were deleted, including associated Discussions and Assets for those releases
  3. A malicious artifact was created for Trivy’s VSCode extension which was pushed to Open VSIX marketplace (the artifact was removed and the token used to publish it was revoked)
  4. Users that potentially can be affected are the ones that:
    • Downloaded Trivy binary directly from GitHub
    • Downloaded Trivy via a get.trivy.dev
    • Via the install script
    • Via Trivy Action

Trivy v0.69.4 Supply Chain Compromise: Technical Breakdown

After an attempt by Aqua to mitigate the issue mentioned above, the threat actor performed a couple of imposter commits that were not attached to any branch:

Malicious actions/checkout commit

A commit was pushed to one of the widely used GitHub actions. Spoofing rauchg user identity (Guillermo Rauch, CEO of Vercel), the threat actor made it look like a legitimate fix commit. But, as you can see in the screen shot below, the change in fact does the following:

  1. Swaps the model from Node.js to composite and lets the attacker chain multiple steps, including arbitrary shell commands.
  2. Checks out Trivy repo with full history
  3. Downloads malicious Go source files from a typosquatted domain controlled by the threat actor https://scan.aquasecurtiy.org/static
    • Notice the typosquat aquasecurtiy instead of aquasecurity
    • cmd/trivy/main.go - replaces Trivy’s entrypoint
    • cmd/trivy/scand.go -  infostealer scanning component
    • cmd/trivy/fork_unix.go and fork_windows.go - platform specific forking logic
    • .golangci.yaml - probably to suppress linter warning about the injected code
    • &> /dev/null - by the end of each command, suppresses any output to keep it silent
    • The attacker faked the date of the commit, making it look like a change performed some time ago.

Subsequent aquasecurity/trivy commit

The attacker then repo swapped the actions/checkout reference to point to the imposter commit we mentioned above, effectively hijacking the checkout step so that any CI/CD pipeline using trivy-action would fetch and compile the attacker’s secrets stealer code instead of the real Trivy scanner. The threat actors  added release --skip=validate to goreleaser to bypass binary validation

Poisoning actions/checkout
Pointing to imposter commit
Bypassing binary validation

Tag Hijack and Release Pipeline Trigger (v0.69.4)

On March 19, 2026 a threat actor pushed the 0.69.4 tag to point to the malicious aquasecurity/trivy commit, triggering the release pipeline. The poisoned version of Trivy was distributed across Trivy’s regular distribution channels:

  • GHCR
  • ECR Public
  • Docker Hub (both 0.69.4 and latest tags)
  • deb/rpm packages
  • Get.trivy.dev

Infostealer and Data Exfiltration

The infostealer delivered with the attack then tried to look for and exfiltrate the following information:

  1. System reconnaissance 
  2. Steals SSH private keys
  3. Grabs .git-credentials and .gitconfig (stored passwords for Git operations)
  4. Steals cloud (GCP, Azure, AWS) credentials - Sweeps up AWS credentials and config, tries to hit the AWS metadata service (IMDS) for IAM role tokens, collects Google Cloud and Azure credentials from their standard config directories, and grabs any related environment variables.
  5. Kubernetes secrets: Takes kubeconfig files, service account tokens, certificates, and even tries kubectl get secrets --all-namespaces to dump every secret in the cluster.
  6. Docker and Registry Auth: Steals Docker config files that contain registry login tokens (Docker Hub, GHCR, ECR, etc).
  7. Environment files: Searches aggressively for .env, .env.production, .env.local, etc. across the entire filesystem up to 6 directories deep - these commonly hold API keys and database passwords.
  8. Database credentials: Grabs config and password files for MySQL, PostgreSQL, MongoDB, Redis, and LDAP.
  9. CI/CD Secrets: Collects terraform.tfvars Terraform state files (which often contain secrets in plaintext), GitLab CI configs, Travis CI configs, Jenkinsfiles, and Drone CI configs.
  10. TLS/SSL Private Keys: Walks through /etc/ssl/private
  11. Cryptocurrency Wallets: Steals wallet files and private keys for Bitcoin, Ethereum, Solana, Cardano, Litecoin, Dogecoin, Zcash, Dash, Ripple, and Monero. It's especially thorough with Solana - searching for validator keypairs, vote account keys, and Anchor project deploy keys.
  12. Webhook URLs & API Keys: Grep-searches the filesystem for Slack webhooks, Discord webhooks, and anything matching patterns like api_key, access_token, etc.
  13. System Auth Logs: Reads /etc/passwd, /etc/shadow (password hashes), and recent successful SSH login logs.
  14. Shell History: Grabs bash, zsh, MySQL, PostgreSQL, and Redis command histories (developers often accidentally type passwords in terminals).
  15. VPN Configs: Steals WireGuard configurations and tries to dump active WireGuard settings.
  16. Encrypts the information collected and exfiltrates it to the endpoint controlled by the attacker that we already mentioned above scan.aquasecurtiy.org

trivy-actions and setup-trivy GitHub Actions were also targeted by this campaign.

Trivy v0.69.4: Affected Versions

  1. github.com/aquasecurity/trivy (Go): =0.69.4
  2. aquasecurity/trivy-action (GitHub Actions): <0.35.0
  3. aquasecurity/setup-trivy (GitHub Actions): <0.2.6

Trivy v0.69.4: Patched Versions

  1. github.com/aquasecurity/trivy (Go): 0.69.3
  2. aquasecurity/trivy-action (GitHub Actions): 0.35.0
  3. aquasecurity/setup-trivy (GitHub Actions): 0.2.6

Trivy v0.69.4: Who is affected?

You are affected if you are used the following components:

Trivy binary and container images:

  • If you used Trivy version v0.69.4 which was distributed via GitHub, Deb, RPM.
  • Trivy container images v0.69.4 distributed via GHCR, ECR Public, DockerHub.

aquasecurity/trivy-action GitHub Action:

  • Any tags prior except 0.35.0 (0.0.1 - 0.34.2) to reference the action.
  • the action's version: latest parameter explicitly (not the default) during the Trivy binary exposure window.
  • SHA pinning to a commit prior to 2025-04-09. 

aquasecurity/setup-trivy GitHub Action:

  • You are affected if you use any version without pinning.

IoC: Indicators of Compromise for Trivy v0.69.4 Attack

Commits that might still be reachable by SHA:

  1. actions/checkout @ 70379aad1a8b40919ce8b382d3cd7d0315cde1d0
  2. aquasecurity/trivy @ 1885610c6a34811c8296416ae69f568002ef11ec
  3. Malicious workflows - credit to socket.dev for collecting and making this data available:
Ecosystem Namespace Name Version Detected
github aquasecurity setup-trivy 8afa9b9f9183b4e00c46e2b82d34047e3c177bd0 2026-03-19T19:14:09.370Z
github aquasecurity setup-trivy 386c0f18ac3d7f2ed33e2d884761119f4024ff8a 2026-03-19T19:14:02.086Z
github aquasecurity setup-trivy 384add36b52014a0f99c0ab3a3d58bd47e53d00f 2026-03-19T19:14:03.297Z
github aquasecurity setup-trivy 7a4b6f31edb8db48cc22a1d41e298b38c4a6417e 2026-03-19T19:14:00.798Z
github aquasecurity setup-trivy 6d8d730153d6151e03549f276faca0275ed9c7b2 2026-03-19T19:14:00.925Z
github aquasecurity setup-trivy 99b93c070aac11b52dfc3e41a55cbb24a331ae75 2026-03-19T19:14:07.906Z
github aquasecurity setup-trivy f4436225d8a5fd1715d3c2290d8a50643e726031 2026-03-19T19:14:08.534Z
github aquasecurity trivy-action f4f1785be270ae13f36f6a8cfbf6faaae50e660a 2026-03-19T19:15:41.417Z
github aquasecurity trivy-action 0891663bc55073747be0eb864fbec3727840945d 2026-03-19T19:15:41.773Z
github aquasecurity trivy-action 2e7964d59cd24d1fd2aa4d6a5f93b7f09ea96947 2026-03-19T19:15:41.235Z
github aquasecurity trivy-action ddb9da4475c1cef7d5389062bdfdfbdbd1394648 2026-03-19T19:15:39.656Z
github aquasecurity trivy-action 4209dcadeaea6a7df69262fef1beeda940881d4d 2026-03-19T19:15:54.161Z
github aquasecurity trivy-action f5c9fd927027beaa3760d2a84daa8b00e6e5ee21 2026-03-19T19:16:01.766Z
github aquasecurity trivy-action 18f01febc4c3cd70ce6b94b70e69ab866fc033f5 2026-03-19T19:16:01.467Z
github aquasecurity trivy-action bb75a9059c2d5803db49e6ed6c6f7e0b367f96be 2026-03-19T19:16:02.678Z
github aquasecurity trivy-action d488f4388ff4aa268906e25c2144f1433a4edec2 2026-03-19T19:16:05.760Z
github aquasecurity trivy-action 3c615ac0f29e743eda8863377f9776619fd2db76 2026-03-19T19:16:13.759Z
github aquasecurity trivy-action a9bc513ea7989e3234b395cafb8ed5ccc3755636 2026-03-19T19:16:19.785Z
github aquasecurity trivy-action 8519037888b189f13047371758f7aed2283c6b58 2026-03-19T19:16:20.793Z
github aquasecurity trivy-action 2f10439b5f4d8577fd445381e0f652f31ad2c015 2026-03-19T19:16:19.035Z
github aquasecurity trivy-action e3e396f2f88754f374f5f4f95f2eb27043800af5 2026-03-19T19:16:31.422Z
github aquasecurity trivy-action 633348e88993be4a9ffb03164f532ef3793d18b6 2026-03-19T19:16:32.038Z
github aquasecurity trivy-action 15f91e30aa0b49f11f8eed9980d123138de4c863 2026-03-19T19:16:31.035Z
github aquasecurity trivy-action b9faa60f85f6f780a34b8d0faaf45b3e3966fdda 2026-03-19T19:27:12.878Z
github aquasecurity trivy-action ab6606b76e5a054be08cab3d07da323e90e751e8 2026-03-19T19:27:14.766Z
github aquasecurity trivy-action a5b4818debf2adbaba872aaffd6a0f64a26449fa 2026-03-19T19:27:20.670Z
github aquasecurity trivy-action e53b0483d08da44da9dfe8a84bf2837e5163699b 2026-03-19T19:27:13.350Z
github aquasecurity trivy-action 8aa8af3ea1de8e968a3e49a40afb063692ab8eae 2026-03-19T19:27:24.323Z
github aquasecurity trivy-action 91d5e0a13afab54533a95f8019dd7530bd38a071 2026-03-19T19:27:23.376Z
github aquasecurity trivy-action 794b6d99daefd5e27ecb33e12691c4026739bf98 2026-03-19T19:27:25.336Z
github aquasecurity trivy-action 9ba3c3cd3b23d033cd91253a9e61a4bf59c8a670 2026-03-19T19:27:30.970Z
github aquasecurity trivy-action e0198fd2b6e1679e36d32933941182d9afa82f6f 2026-03-19T19:27:34.838Z
github aquasecurity trivy-action 9738180dd24427b8824445dbbc23c30ffc1cb0d8 2026-03-19T19:27:37.528Z
github aquasecurity trivy-action 3201ddddd69a1419c6f1511a14c5945ba3217126 2026-03-19T19:27:37.739Z
github aquasecurity trivy-action 985447b035c447c1ed45f38fad7ca7a4254cb668 2026-03-19T19:28:19.711Z
github aquasecurity trivy-action 3d1b5be1589a83fc98b82781c263708b2eb3b47b 2026-03-19T19:28:31.412Z
github aquasecurity trivy-action fd090040b5f584f4fcbe466878cb204d0735dcf4 2026-03-19T19:28:38.433Z
github aquasecurity trivy-action 85cb72f1e8ee5e6e44488cd6cbdbca94722f96ed 2026-03-19T19:28:43.158Z
github aquasecurity trivy-action cf1692a1fc7a47120e6508309765db7e33477946 2026-03-19T19:28:43.860Z
github aquasecurity trivy-action 1d74e4cf63b7cf083cf92bf5923cf037f7011c6b 2026-03-19T19:28:50.014Z
github aquasecurity trivy-action c19401b2f58dc6d2632cb473d44be98dd8292a93 2026-03-19T19:28:57.055Z
github aquasecurity trivy-action 7a8d78cd86dce3cc81c6c9df96009cad35795a31 2026-03-19T19:29:07.437Z
github aquasecurity trivy-action 1fb704d4205cceefef49e08d150dfddbb1c83a3f 2026-03-19T19:29:13.172Z
github aquasecurity trivy-action ab8d94f4f4030f0e08fe058ede6bc62218ec9df0 2026-03-19T19:29:13.426Z
github aquasecurity trivy-action e4e1a02b12157b2e55348ec3d0c8b84d2f76bce2 2026-03-19T19:29:23.143Z
github aquasecurity trivy-action b219d22cc6f0b0d03cb6918c9dfacf2fd71f9f0b 2026-03-19T19:29:29.464Z
github aquasecurity trivy-action 24d5b52a5ac2b5c0a5aa755ce3ed6c6c14ea09a4 2026-03-19T19:29:34.663Z
github aquasecurity trivy-action a0d03908400f6d233fae53e0e4d39fdf3df66136 2026-03-19T19:29:39.934Z
github aquasecurity trivy-action 8d6f77e4271f5d93020f13d4f52e0a1f682f1db7 2026-03-19T19:29:44.744Z
github aquasecurity trivy-action fb58e54a83763c7b1e2efabfcbbe510820ef0f97 2026-03-19T19:29:52.042Z
github aquasecurity trivy-action af822bc8c12f6a7e5bd34ea924eaef4f9653fb18 2026-03-19T19:30:00.399Z
github aquasecurity trivy-action 157c43c7ecda3f4cd25b2df33d4f257cd82f71d1 2026-03-19T19:30:00.783Z
github aquasecurity trivy-action 695ed6bceff6daa55e0bb6b58f1724f687c8e9bc 2026-03-19T19:30:07.571Z
github aquasecurity trivy-action 335fd95aaf82d4f5109c558755478f166e2da120 2026-03-19T19:30:12.452Z
github aquasecurity trivy-action 39f1d660af5f1d414756f90629aa4d7b64eb3dab 2026-03-19T19:30:12.155Z
github aquasecurity trivy-action 7ecb03dcf441fbc69fc9af93b2d3f95e1d3546af 2026-03-19T19:30:17.851Z
github aquasecurity trivy-action d2775c1cb44d5b8e4d21dad38f0882d912f6e9dd 2026-03-19T19:30:24.927Z
github aquasecurity trivy-action 4414c5d81fa85eb0ed6f4c4e8a2ff7f0b242f7df 2026-03-19T19:30:29.969Z
github aquasecurity trivy-action 2cceb25e8410de0a15a4400fc1cf869e0f51ca89 2026-03-19T19:30:29.836Z
github aquasecurity trivy-action c8e1df828a373f985d7145963ec7db1888770120 2026-03-19T19:30:35.388Z
github aquasecurity trivy-action 3e0406b8484fda87bcf3d232f2340cc8f3302d22 2026-03-19T19:30:40.898Z
github aquasecurity trivy-action 56672d1236e28295f0ef169f6f42f04792873dfc 2026-03-19T19:30:47.461Z
github aquasecurity trivy-action da24190be9b7b7d225e41f143b4cdcc090a73c63 2026-03-19T19:30:55.184Z
github aquasecurity trivy-action b2a4be1d6219f4cfc0fcbbabf7f6e70ce6b750e0 2026-03-19T19:30:55.142Z
github aquasecurity trivy-action 4c0d2e1f62d65a7c9f1f7ed6bf34108eb5a7f316 2026-03-19T19:31:04.215Z
github aquasecurity trivy-action ea53a34dc436654695bf4bded564b7a182f5f0da 2026-03-19T19:31:11.837Z
github aquasecurity trivy-action 7f2ff4657bd0b5e707f5b3273b0dc7e7f0fd5945 2026-03-19T19:31:17.647Z
github aquasecurity trivy-action ff15a1869aef8d77a913f495881e42c67afbb5b9 2026-03-19T19:31:22.981Z
github aquasecurity trivy-action 18cf0fbc2b63a4ad6ab9f1d609f47710e86be7d9 2026-03-19T19:31:23.573Z
github aquasecurity trivy-action cba99f5f4bb02f50d380a4784d7540c2718f2f8e 2026-03-19T19:31:31.227Z
github aquasecurity trivy-action a9c2ce8cc19da46808771d3b2e0c45dcd34367ad 2026-03-19T19:31:38.481Z
github aquasecurity trivy-action df2f1ebf02f79922f7fe47f636b23e71448d1f70 2026-03-19T19:31:42.768Z
github aquasecurity trivy-action f950638a4d62064924d42cd28b355f10df0d761d 2026-03-19T19:31:51.359Z
github aquasecurity trivy-action b5aa8424e0b8db21dc8435850ecaa69abfb8f4ed 2026-03-19T19:31:57.117Z
github aquasecurity trivy-action 9dcd9f5a3d09aa09c1b20300b933df62f6522330 2026-03-19T19:31:57.683Z
github aquasecurity trivy-action 6f8621d4e25d210e7b8cc3c5baaf1b8eabfb93f3 2026-03-19T19:32:05.512Z
github aquasecurity trivy-action f69fe0d6d24c4e3e2ad0c0876c9e564719524b48 2026-03-19T19:32:12.512Z
github aquasecurity trivy-action 2db7b0d4373b9749855a36fca0b290f2381336fc 2026-03-19T19:32:19.204Z
github aquasecurity trivy-action cffefefa765f7bc9a4c3171643f7570300729968 2026-03-19T19:32:25.767Z
github aquasecurity trivy-action dc6f85ca176e03d3e17ecbfe6537bb1b3b68b443 2026-03-19T19:32:25.273Z
github aquasecurity trivy-action 7076cb9c7194cc5f04f0f7212cae9011dadc22cc 2026-03-19T19:32:33.825Z
github aquasecurity trivy-action cc9f0bf46f2af06ca2e1d130b8ab5cfdb530c6e1 2026-03-19T19:32:39.792Z
github aquasecurity trivy-action f10f2e1891ad18beac5eca4f9bcf1cf58462f28e 2026-03-19T19:32:45.026Z
github aquasecurity trivy-action 44e2bf03b4c3e84fe486e412b7cb0d96c6d966f1 2026-03-19T19:32:50.922Z
github aquasecurity trivy-action f1a2f80ca0f9ed58b9f930fc0b8d3c3d9ccf0da0 2026-03-19T19:32:57.693Z
github aquasecurity trivy-action c5f9b9a42f0434067cb9d4dce219a0b6d8db14ed 2026-03-19T19:33:03.358Z

scan.aquasecurtiy.org - typosquatted domain which resolves to 45.148.10.212

What to Do if You Are Affected

Here’s what to do if you are affected:

  1. Rotate all credentials. If you read so far, you can see that the infostealer targeted a wide variety of credentials. If you run a compromised version within your environment, you must treat mentioned credentials as compromised.
  2. Check whether your organization pulled or executed Trivy v0.69.4 from any source. Remove any affected artifacts immediately.
  3. Review all workflows using aquasecurity/trivy-action or aquasecurity/setup-trivy. Check workflow run logs from March 19–20, 2026 for signs of compromise.
  4. Look for repositories named tpcp-docs in your GitHub organization. The presence of such a repository may indicate that the fallback exfiltration mechanism was triggered and secrets were successfully stolen.

Pin GitHub Actions to full, immutable commit SHA hashes; don't use mutable version tags.

References

Artur Oleyarsh
Security Researcher
Sign up for minimus

Avoid over 97% of container CVEs

Access hundreds of hardened images, secure Helm charts, the Minimus custom image builder, and more.