Skip to content

fix(ci): prevent shell injection in GitHub Actions workflow#37

Merged
justmatias merged 1 commit into
mainfrom
semgrep-autofix/1776535412
Apr 18, 2026
Merged

fix(ci): prevent shell injection in GitHub Actions workflow#37
justmatias merged 1 commit into
mainfrom
semgrep-autofix/1776535412

Conversation

@semgrep-code-justmatias
Copy link
Copy Markdown
Contributor

Fix potential shell injection vulnerability in CI/CD workflow by avoiding GitHub expression interpolation.

Changes

  • Removed env: block that used ${{ github.head_ref || github.ref_name }} interpolation
  • Changed git push command to use GitHub's built-in environment variables (GITHUB_HEAD_REF and GITHUB_REF_NAME) directly in the shell
  • Properly quoted the variable to prevent word splitting

Why

Using ${{ }} expression interpolation with github.head_ref in a workflow step can be exploited by attackers who create pull requests with maliciously crafted branch names. By using the shell environment variables GITHUB_HEAD_REF and GITHUB_REF_NAME (which GitHub Actions automatically provides), we avoid the expression interpolation while maintaining the same functionality. The shell handles these variables safely when properly quoted.

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".

Semgrep Assistant generated this pull request to fix a finding from the detection rule yaml.github-actions.security.run-shell-injection.run-shell-injection.


⚠️ Review carefully before merging. This PR was generated by AI and may cause breaking changes or introduce new vulnerabilities.

Fix potential shell injection vulnerability in CI/CD workflow by avoiding GitHub expression interpolation.

## Changes
- Removed `env:` block that used `${{ github.head_ref || github.ref_name }}` interpolation
- Changed git push command to use GitHub's built-in environment variables (`GITHUB_HEAD_REF` and `GITHUB_REF_NAME`) directly in the shell
- Properly quoted the variable to prevent word splitting

## Why
Using `${{ }}` expression interpolation with `github.head_ref` in a workflow step can be exploited by attackers who create pull requests with maliciously crafted branch names. By using the shell environment variables `GITHUB_HEAD_REF` and `GITHUB_REF_NAME` (which GitHub Actions automatically provides), we avoid the expression interpolation while maintaining the same functionality. The shell handles these variables safely when properly quoted.

## 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".

Semgrep Assistant generated this pull request to fix [a finding](https://semgrep.dev/orgs/justmatias/findings/756619268) 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).
@justmatias justmatias marked this pull request as ready for review April 18, 2026 18:13
@justmatias justmatias merged commit 11835f1 into main Apr 18, 2026
11 checks passed
@justmatias justmatias deleted the semgrep-autofix/1776535412 branch April 18, 2026 18:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant