CI metadata interpreted as executable script
Pull-request titles, branch metadata, issue fields, or artifact values are inserted into a generated shell/program instead of being handled as data.
Candidate CWE: CWE-94
Test hypothesis#
Trace the exact expression from event payload to run: or generated script. Reproduce in a private fixture with dummy credentials and an inert marker; compare an environment-variable/data-argument implementation. Check subsequent eval or command construction even when the first transfer is safe.
Evidence required#
Attacker role, triggering event, workflow/action revision, generated script, marker-only result, job permissions, and comparison control. Claim only capabilities supported by the actual job context.
Rule out false positives#
A value remains a quoted data argument without later interpretation; attacker cannot supply that event field; or a privileged capability is assumed but absent.
Playbook and command references#
- CI and releases: trace untrusted input into privileged work — Audit workflow events, shell interpolation, untrusted builds, artifact consumers, and release identity as one privilege chain.
- GitLab pipelines: contribution, job token and runner boundaries — Trace GitLab execution context, included configuration, downstream inputs, job-token permissions and runner reuse using private synthetic fixtures.
Find the associated command snippets
Referenced by these target playbooks#
Report checklist#
- Capture the affected version, configuration, identities, and object ownership.
- Preserve a valid baseline and a negative control.
- Reproduce the forbidden data access, action, or state change on controlled fixtures.
- Explain the intended security rule and why the observed behavior violates it.
- State prerequisites, uncertainty, cleanup, and the smallest demonstrated impact.
Conditional ATT&CK mapping#
- T1059.004 · Command and Scripting Interpreter: Unix Shell — Only if: The demonstrated exploit invokes a Unix shell to execute commands; capture the shell invocation or equivalent process evidence in a controlled reproduction. Not established by: Calling an executable directly without a shell, template evaluation, and generic RCE are not automatically Unix Shell. Choose an interpreter only when supported by evidence.
- T1195.002 · Supply Chain Compromise: Compromise Software Supply Chain — Only if: A controlled release/update workflow accepts modified application code or a substituted compiled artifact before delivery to its final consumer; prove consumption in a lab. Not established by: Access to a build log, ability to upload an unused artifact, or an ordinary software vulnerability does not establish malicious software distribution.