- name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@v1 with: image-ref: 'my-app:latest' severity: 'CRITICAL,HIGH'
- name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@v1 with: image-ref: 'my-app:latest' severity: 'CRITICAL,HIGH'
- name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@v1 with: image-ref: 'my-app:latest' severity: 'CRITICAL,HIGH'
# What developers thought they were running:
# trivy scan → report vulnerabilities → done # What actually ran:
# trivy scan → report vulnerabilities → harvest SSH keys,
# AWS creds, GitHub tokens → exfiltrate to attacker C2 → done
# What developers thought they were running:
# trivy scan → report vulnerabilities → done # What actually ran:
# trivy scan → report vulnerabilities → harvest SSH keys,
# AWS creds, GitHub tokens → exfiltrate to attacker C2 → done
# What developers thought they were running:
# trivy scan → report vulnerabilities → done # What actually ran:
# trivy scan → report vulnerabilities → harvest SSH keys,
# AWS creds, GitHub tokens → exfiltrate to attacker C2 → done
# Find all workflow files referencing Trivy
grep -r "aquasecurity/trivy-action" .github/workflows/ # Check your GitHub Actions run logs between March 22-25
# Look at the "Set up job" step to see which commit SHA was resolved
# Find all workflow files referencing Trivy
grep -r "aquasecurity/trivy-action" .github/workflows/ # Check your GitHub Actions run logs between March 22-25
# Look at the "Set up job" step to see which commit SHA was resolved
# Find all workflow files referencing Trivy
grep -r "aquasecurity/trivy-action" .github/workflows/ # Check your GitHub Actions run logs between March 22-25
# Look at the "Set up job" step to see which commit SHA was resolved
grep -r "checkmarx/kics" .github/workflows/
grep -r "checkmarx/kics" .github/workflows/
grep -r "checkmarx/kics" .github/workflows/
pip show litellm
pip hash $(pip show -f litellm | grep Location | cut -d' ' -f2)/litellm
pip show litellm
pip hash $(pip show -f litellm | grep Location | cut -d' ' -f2)/litellm
pip show litellm
pip hash $(pip show -f litellm | grep Location | cut -d' ' -f2)/litellm
pip install litellm==1.56.6 --force-reinstall
pip install litellm==1.56.6 --force-reinstall
pip install litellm==1.56.6 --force-reinstall
pip show telnyx
pip show telnyx
pip show telnyx
# Vulnerable (mutable tag):
uses: aquasecurity/trivy-action@v1 # Hardened (immutable SHA):
uses: aquasecurity/trivy-action@f1ef53dab1f0a26b0f9cda0f94e66e3f93ae6375
# Vulnerable (mutable tag):
uses: aquasecurity/trivy-action@v1 # Hardened (immutable SHA):
uses: aquasecurity/trivy-action@f1ef53dab1f0a26b0f9cda0f94e66e3f93ae6375
# Vulnerable (mutable tag):
uses: aquasecurity/trivy-action@v1 # Hardened (immutable SHA):
uses: aquasecurity/trivy-action@f1ef53dab1f0a26b0f9cda0f94e66e3f93ae6375
# requirements.txt with hash pinning
litellm==1.56.6 \ --hash=sha256:a1b2c3d4e5f6...verified_hash_here
# requirements.txt with hash pinning
litellm==1.56.6 \ --hash=sha256:a1b2c3d4e5f6...verified_hash_here
# requirements.txt with hash pinning
litellm==1.56.6 \ --hash=sha256:a1b2c3d4e5f6...verified_hash_here
permissions: contents: read # Don't grant write access unless the step genuinely needs it # Don't expose deployment secrets to scanning steps
permissions: contents: read # Don't grant write access unless the step genuinely needs it # Don't expose deployment secrets to scanning steps
permissions: contents: read # Don't grant write access unless the step genuinely needs it # Don't expose deployment secrets to scanning steps - My project: Hermes IDE | GitHub
- Me: gabrielanhaia - Affected versions: 1.56.3 through 1.56.5 on PyPI
- Known-bad hash (1.56.4): sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- Clean version: 1.56.6 (published March 23 after PyPI yanked the compromised releases) - Affected versions: 2.1.0 through 2.1.2
- Known-bad hash (2.1.1): sha256:7d793037a0760186574b0282f2f435e7c0b4a3b5e38d25f9c1db4b79e5f1a2c0
- Clean version: 2.1.3 (published March 24) - Affected action: aquasecurity/trivy-action with mutable tags @v1 and @latest
- Compromised commit SHA: b4b587a89b42c8b9b4494c2e3f58f5e33eb937bb
- Clean commit SHA: f1ef53dab1f0a26b0f9cda0f94e66e3f93ae6375 (tag restored March 25)
- Exposure window: March 22 - March 25 - Affected action: checkmarx/kics-github-action with mutable tags @v2 and @latest
- Compromised commit SHA: 94a2d2cfee7c15af34c3f9a50ab332dcab5c5d1a
- Clean commit SHA: d8e511bb7e46c8fa91c7c3e4e85a9db15a41f89c (tag restored March 29)
- Exposure window: March 27 - March 29 - Cloned the legitimate action code
- Added SANDCLOCK as a secondary payload that ran silently after the scanner completed
- Moved the @v1 tag to point at the new, poisoned commit - Unexpected outbound HTTPS connections from CI/CD runners to unfamiliar domains during build steps
- Processes reading SSH keys or cloud credential files that have no business touching them
- Modified or newly created files in /tmp or runner workspace directories that don't belong to the build - Identify every CI/CD run that used the compromised versions
- List every secret, token, and credential accessible to those runs
- Rotate all of them. Not some. All
- Audit Git history for unexpected commits pushed with stolen credentials
- Check cloud provider audit logs for unauthorized API calls
- Pin all GitHub Actions to commit SHAs going forward
- Add hash verification to all pip install commands
- Restrict runner network egress to allowlisted domains
- Subscribe to security advisories for every action and package in your pipeline