Skip to content

Fix shell injection vulnerability in GitHub Actions workflow#21

Merged
studentsca023-rgb merged 1 commit into
masterfrom
semgrep-autofix/1773741470
Mar 17, 2026
Merged

Fix shell injection vulnerability in GitHub Actions workflow#21
studentsca023-rgb merged 1 commit into
masterfrom
semgrep-autofix/1773741470

Conversation

@semgrep-code-studentsca023-rgb

Copy link
Copy Markdown

Fix command injection vulnerability by using an environment variable instead of direct interpolation of github.head_ref in the workflow run step.

Changes

  • Added BRANCH_NAME environment variable to store github.head_ref
  • Replaced direct ${{ github.head_ref }} interpolation with double-quoted "$BRANCH_NAME" in the run script

Why

Direct interpolation of GitHub context data (like github.head_ref) in a run: step is vulnerable to command injection. An attacker could create a branch with a malicious name containing shell metacharacters to execute arbitrary commands in the runner, potentially stealing secrets and code.

By using an intermediate environment variable and double-quoting it, the value is treated as a literal string rather than being parsed by the shell, preventing injection attacks.

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

@267212124 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.


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

Fix command injection vulnerability by using an environment variable instead of direct interpolation of `github.head_ref` in the workflow run step.

## Changes
- Added `BRANCH_NAME` environment variable to store `github.head_ref`
- Replaced direct `${{ github.head_ref }}` interpolation with double-quoted `"$BRANCH_NAME"` in the run script

## Why
Direct interpolation of GitHub context data (like `github.head_ref`) in a `run:` step is vulnerable to command injection. An attacker could create a branch with a malicious name containing shell metacharacters to execute arbitrary commands in the runner, potentially stealing secrets and code.

By using an intermediate environment variable and double-quoting it, the value is treated as a literal string rather than being parsed by the shell, preventing injection attacks.

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

@267212124 requested Semgrep Assistant generate this pull request to fix [a finding](https://semgrep.dev/orgs/studentsca023_personal_org/findings/722169002) 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).
@studentsca023-rgb studentsca023-rgb marked this pull request as ready for review March 17, 2026 09:59
@studentsca023-rgb studentsca023-rgb merged commit c6e2f1c into master Mar 17, 2026
2 of 3 checks passed
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