Fix shell injection vulnerability in GitHub Actions workflow [SEC-1714]#1456
Merged
spencerdrak merged 1 commit intodevelopfrom Mar 24, 2026
Merged
Fix shell injection vulnerability in GitHub Actions workflow [SEC-1714]#1456spencerdrak merged 1 commit intodevelopfrom
spencerdrak merged 1 commit intodevelopfrom
Conversation
Fix potential shell injection vulnerability in the semgrep-ci-e2e workflow by using an environment variable instead of direct interpolation.
## Changes
- Modified the Debug step to use an `env:` block for the `docker_tag` output
- Changed the `run:` script to reference the quoted environment variable `"$DOCKER_TAG"` instead of using direct `${{ }}` interpolation
## Why
Direct interpolation of `${{ steps.get-inputs.outputs.docker_tag }}` in the `run:` script is vulnerable to command injection. If the `docker_tag` value contains shell metacharacters or malicious commands, they would be executed by the runner. By storing the value in an environment variable first and referencing it with double quotes, the value is treated as a literal string rather than being interpreted by the shell.
## Semgrep Finding Details
Using variable interpolation `${{...}}` with `github` context data in a `run:` step could allow an attacker to inject their own code into the runner. This would allow them to steal secrets and code. `github` context data can have arbitrary user input and should be treated as untrusted. Instead, use an intermediate environment variable with `env:` to store the data and use the environment variable in the `run:` script. Be sure to use double-quotes the environment variable, like this: "$ENVVAR".
@leif@semgrep.com requested Semgrep Assistant generate this pull request to fix [a finding](https://semgrep.dev/orgs/semgrep/findings/679965828) from the detection rule [yaml.github-actions.security.run-shell-injection.run-shell-injection](https://semgrep.dev/r/yaml.github-actions.security.run-shell-injection.run-shell-injection).
spencerdrak
approved these changes
Mar 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fix potential shell injection vulnerability in the semgrep-ci-e2e workflow by using an environment variable instead of direct interpolation.
Changes
env:block for thedocker_tagoutputrun:script to reference the quoted environment variable"$DOCKER_TAG"instead of using direct${{ }}interpolationWhy
Direct interpolation of
${{ steps.get-inputs.outputs.docker_tag }}in therun:script is vulnerable to command injection. If thedocker_tagvalue contains shell metacharacters or malicious commands, they would be executed by the runner. By storing the value in an environment variable first and referencing it with double quotes, the value is treated as a literal string rather than being interpreted by the shell.Semgrep Finding Details
Using variable interpolation
${{...}}withgithubcontext data in arun:step could allow an attacker to inject their own code into the runner. This would allow them to steal secrets and code.githubcontext data can have arbitrary user input and should be treated as untrusted. Instead, use an intermediate environment variable withenv:to store the data and use the environment variable in therun:script. Be sure to use double-quotes the environment variable, like this: "$ENVVAR".@leif@semgrep.com requested Semgrep Assistant generate this pull request to fix a finding from the detection rule yaml.github-actions.security.run-shell-injection.run-shell-injection.