CVE-2024-45798
📋 TL;DR
This CVE describes multiple Poisoned Pipeline Execution vulnerabilities in the arduino-esp32 GitHub Actions CI/CD workflow. Attackers could inject malicious code into the CI pipeline or manipulate environment variables, potentially compromising build artifacts. Users who download or use arduino-esp32 artifacts from affected CI/CD pipelines are at risk.
💻 Affected Systems
- arduino-esp32
⚠️ Manual Verification Required
This CVE does not have specific version information in our database, so automatic vulnerability detection cannot determine if your system is affected.
Why? The CVE database entry doesn't specify which versions are vulnerable (no version ranges provided by the vendor/NVD).
🔒 Custom verification scripts are available for registered users. Sign up free to download automated test scripts.
- Review the CVE details at NVD
- Check vendor security advisories for your specific version
- Test if the vulnerability is exploitable in your environment
- Consider updating to the latest version as a precaution
⚠️ Risk & Real-World Impact
Worst Case
Complete compromise of CI/CD infrastructure leading to supply chain attacks where malicious code is injected into official releases, affecting downstream users and devices.
Likely Case
Unauthorized code execution within GitHub Actions runners, potentially exposing secrets, modifying build artifacts, or disrupting development workflows.
If Mitigated
Limited impact with proper input validation and security controls in CI/CD pipelines, preventing injection attacks.
🎯 Exploit Status
Poisoned Pipeline Execution attacks are well-documented and relatively easy to execute against vulnerable GitHub Actions workflows. The advisory includes specific GHSL identifiers (GHSL-2024-169, GHSL-2024-170) indicating detailed research.
🛠️ Fix & Mitigation
✅ Official Fix
Patch Version: Addressed in commit(s) referenced in GHSA-h52q-xhg2-6jw8
Vendor Advisory: https://github.com/espressif/arduino-esp32/security/advisories/GHSA-h52q-xhg2-6jw8
Restart Required: No
Instructions:
1. Update to the latest arduino-esp32 repository version. 2. Verify that the .github/workflows/tests_results.yml file contains the security fixes. 3. Review and update any custom CI/CD workflows that may have similar vulnerabilities.
🔧 Temporary Workarounds
Disable vulnerable workflow
allTemporarily disable the tests_results.yml workflow in GitHub Actions settings
Navigate to repository Settings > Actions > General > Workflow permissions > Disable workflow
Manual artifact verification
linuxManually verify checksums and contents of all downloaded artifacts before use
sha256sum artifact.zip
unzip -l artifact.zip
🧯 If You Can't Patch
- Implement strict input validation and sanitization in all CI/CD workflows
- Use GitHub Actions security best practices: enable code scanning, require approvals for workflows, and limit permissions
🔍 How to Verify
Check if Vulnerable:
Check if your arduino-esp32 repository contains the vulnerable tests_results.yml workflow before security fixes were applied
Check Version:
git log --oneline -n 5 .github/workflows/tests_results.yml
Verify Fix Applied:
Verify that the tests_results.yml workflow includes proper input validation and no longer uses untrusted inputs in dangerous contexts
📡 Detection & Monitoring
Log Indicators:
- Unexpected commands in GitHub Actions logs
- Suspicious environment variable modifications
- Unauthorized artifact modifications
Network Indicators:
- Unusual outbound connections from GitHub Actions runners
- Unexpected artifact downloads
SIEM Query:
source="github-actions" AND (command_injection OR env_injection OR suspicious_workflow)
🔗 References
- https://codeql.github.com/codeql-query-help/javascript/js-actions-command-injection
- https://github.com/espressif/arduino-esp32/blob/690bdb511d9f001e2066da2dda2c631a3eee270f/.github/workflows/tests_results.yml
- https://github.com/espressif/arduino-esp32/security/advisories/GHSA-h52q-xhg2-6jw8
- https://securitylab.github.com/research/github-actions-preventing-pwn-requests
- https://securitylab.github.com/research/github-actions-untrusted-input