Skip to content

Fix shell injection vulnerability in GitHub Actions workflow#20

Draft
semgrep-code-studentsca023-rgb[bot] wants to merge 1 commit into
masterfrom
semgrep-autofix/1773741399
Draft

Fix shell injection vulnerability in GitHub Actions workflow#20
semgrep-code-studentsca023-rgb[bot] wants to merge 1 commit into
masterfrom
semgrep-autofix/1773741399

Conversation

@semgrep-code-studentsca023-rgb

Copy link
Copy Markdown

Fix command injection vulnerability by moving GitHub context data to an environment variable.

Changes

  • Moved ${{ github.head_ref }} from inline interpolation in the run: script to an environment variable BRANCH_NAME in the env: block
  • Referenced the branch name using double-quoted environment variable "$BRANCH_NAME" to prevent shell expansion issues

Why

Direct interpolation of ${{ github.head_ref }} in a run: step is vulnerable to command injection. An attacker could create a pull request from a branch with a malicious name containing shell metacharacters, which would be executed by the runner. By passing the value through an environment variable instead, the data is properly escaped and cannot break out of the intended context.

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 moving GitHub context data to an environment variable.

## Changes
- Moved `${{ github.head_ref }}` from inline interpolation in the `run:` script to an environment variable `BRANCH_NAME` in the `env:` block
- Referenced the branch name using double-quoted environment variable `"$BRANCH_NAME"` to prevent shell expansion issues

## Why
Direct interpolation of `${{ github.head_ref }}` in a `run:` step is vulnerable to command injection. An attacker could create a pull request from a branch with a malicious name containing shell metacharacters, which would be executed by the runner. By passing the value through an environment variable instead, the data is properly escaped and cannot break out of the intended context.

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

0 participants