Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain control of workflow inputs
-
DeliveryInject shell metacharacters into project_id/storage_bucket
-
ExploitInterpolated into gcloud cp via ${{ inputs.* }}
-
ExecutionArbitrary command execution on GitHub Actions runner
-
ImpactAbuse runner credentials/secrets
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization OS command sanitization, avoid shell exec
MITRE ATT&CK
2 techniques across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires an actor to control the project_id or storage_bucket inputs passed to the integrate-platform-docs composite action in the chainguard-dev/edu repository, in the commit range 7375a80 through (not including) fb0efb2; those inputs are interpolated unquoted into Bash gcloud storage cp commands via ${{ inputs.* }} expressions. What strongly limits real-world exploitation: in the actual repository the sole caller supplied these inputs from repository secrets and ran only on trusted triggers, so untrusted input was not known to reach the vulnerable steps. Practical abuse therefore depends on an attacker already having the privilege to alter the workflow inputs or introduce a malicious caller - i.e. write/maintainer access to the CI configuration - rather than any remote, unauthenticated path against a default deployment. |
| Impact | This is a genuinely low-priority issue despite being a command-injection (CWE-78) flaw. The vendor-supplied CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:H/UI:N/VC:L/VI:L/VA:N) scores only 2.1, and that low score is well-justified by the context: exploitation requires high privileges (PR:H) because the vulnerable project_id and storage_bucket inputs are supplied by repository secrets, and the attack-requirements metric (AT:P) reflects that untrusted input must first reach those steps - which the description explicitly says did not happen, since the only in-repository caller passed trusted secrets on trusted triggers. There is no EPSS score, no CISA KEV listing, and no public exploit identified in the provided data, all of which are consistent with the low CVSS rating rather than conflicting with it. The one nuance worth flagging: the vendor vector lists AV:N (network), but the real exploitation path is effectively repo-/supply-chain-local - an actor would need write control over the workflow inputs or the ability to introduce a malicious caller - so the network vector overstates reachability. Impact is also bounded to the GitHub Actions runner context (leakage/abuse of that job's credentials), not a broader system. Net: a correctly-handled, already-patched hardening fix, not an active threat. |
| Exploit ScenarioDerived | An actor able to control the project_id or storage_bucket inputs to the integrate-platform-docs composite action (for example, by adding a malicious caller workflow or supplying attacker-chosen input values) embeds shell metacharacters that are interpolated directly into the gcloud storage cp command, executing arbitrary commands on the GitHub Actions runner and potentially exfiltrating that job's secrets. In the actual repository, the only caller passed repository secrets on trusted triggers, so no untrusted input was known to reach these steps. No public exploit code was identified at the time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 05, 2026
Arbitrary shell command execution in the Chainguard Academy (edu) integrate-platform-docs composite GitHub Action requires control of the project_id or storage_bucket inputs and occurs because those values were substituted directly into Bash gcloud storage cp commands. The practical exposure is narrow: the only in-repository caller passed repository secrets and ran on trusted triggers, so untrusted input was not known to reach the vulnerable steps, and abuse requires write or maintainer control over the CI configuration rather than a remote unauthenticated path. A vendor fix is available via commit fb0efb2537d326ab18c07d620875b8ed2a4b39f3, no public exploit was identified, and the independent assessment rates this as a low-priority issue (CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:U/C:L/I:L/A:N).
RemediationAI
Apply the upstream fix commit fb0efb2537d326ab18c07d620875b8ed2a4b39f3 (PR https://github.com/chainguard-dev/edu/pull/3471), which changes the action to pass project_id and storage_bucket through env variables and then uses quoted shell variables such as "${PROJECT_ID}" and "${STORAGE_BUCKET}" in gcloud storage cp commands. This is an upstream fix available as a PR/commit; a released patched version is not independently confirmed. If immediate patch application is not possible, do not allow project_id or storage_bucket to be populated by untrusted callers; restrict workflow and action modification rights to trusted maintainers, keep the sole caller on trusted triggers with repository secrets, and consider temporarily disabling or pinning the integrate-platform-docs action for untrusted branches. The fix is a targeted hardening change with no expected functional trade-off beyond requiring workflow callers to pass the same inputs.
Affected VersionsENISA
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerable feature is a GitHub Actions composite action, not a network service: .github/actions/integrate-platform-docs/action.yaml is invoked by a workflow caller, and its inputs project_id and storage_bucket are expanded through ${{ inputs.* }} directly inside Bash run steps. Because the values are placed into gcloud storage cp commands without quoting or environment indirection, a crafted input can terminate the intended argument and append shell metacharacters, the CWE-78 OS command injection class. The upstream fix moves the inputs into env variables (PROJECT_ID and STORAGE_BUCKET) and references them as quoted shell variables, preventing expression-level injection. The CPE cpe:2.3:a:chainguard:chainguard_academy_(edu):*:*:*:*:*:*:*:* maps to the Chainguard Academy (edu) repository; the affected commit range is 7375a80caabcc31c33ec90f29687ed78c13d16ff before fb0efb2537d326ab18c07d620875b8ed2a4b39f3. Exploitation prerequisites from the independent assessment are high: the actor must already be able to supply or alter the action's inputs, which in the repository means CI write/maintainer access, and the assessed impact is limited to low confidentiality and integrity without availability impact.
Know when Chainguard Academy Edu gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Requires high-privilege control over workflow inputs normally sourced from trusted secrets (PR:H), with untrusted input reaching the steps being a non-default condition (AC:H), yielding limited runner-scoped impact.
Primary rating from Vendor (chainguard).
CVSS VectorVendor: chainguard
DescriptionCVE.org
Improper Neutralization of Special Elements used in an OS Command in the integrate-platform-docs composite GitHub Action of Chainguard Academy (edu) from commit 7375a80caabcc31c33ec90f29687ed78c13d16ff before commit fb0efb2537d326ab18c07d620875b8ed2a4b39f3 allows an actor who controls the project_id or storage_bucket inputs to execute arbitrary shell commands on the GitHub Actions runner, because the inputs are interpolated directly into Bash gcloud storage cp commands in several steps via ${{ inputs.* }} expressions. The only in-repository caller passed repository secrets and ran only on trusted triggers, so no untrusted input was known to reach the vulnerable steps.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
OS command injection occurs when an application passes unsanitized user input directly into system shell commands.
EUVD-2026-92780
GHSA-vh2r-m6q8-8hp3
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB