Script injection: github.ref_name / github.ref interpolated into shell run: on push path
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 74/100
Línea de trabajo
Empieza leyendo el bloque run de push/workflow_dispatch que no corresponde a PR en action.yml y compáralo con las directrices de GitHub para reforzar la protección contra script-injection. Se considera hecho cuando los valores derivados de la rama se pasan de forma segura al shell sin interpolación directa, mientras que la búsqueda de PR y el comportamiento de commit/ref permanecen sin cambios.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
action.yml interpolates ${{ github.ref_name }} and ${{ github.ref }} directly into the composite action's run: (shell) block on the non-PR (push / workflow_dispatch) path:
COMMIT_OID="${{ github.sha }}"
REF="${{ github.ref }}"
PR_NUMBER=$(gh pr list \
--repo "$GITHUB_REPOSITORY" \
--head "${{ github.ref_name }}" \
--state open --json number --jq '.[0].number // empty' 2>/dev/null || true)
Because these branch-derived values are interpolated into a shell context, a branch named e.g. foo-$(command) — or one using backticks or a " to break out of the double quotes — results in command execution when a consuming workflow runs on push or workflow_dispatch for that ref.
Impact
Reachable by anyone who can push a branch (or workflow_dispatch) to a repo that uses this action — i.e. it requires write access, so the marginal privilege is limited (such a user can generally already run code in CI). Even so, it's a script-injection footgun in a first-party action: it defeats the usual expectation that uses: of a trusted action is safe, and the injected code runs with whatever token the caller grants (commonly code-quality: write).
Suggested fix
Pass the untrusted values via env: and reference them as quoted shell variables, per GitHub's own hardening guidance (https://docs.github.com/en/actions/security-for-github-actions/security-guidelines/security-hardening-for-github-actions#understanding-the-risk-of-script-injections):
env:
GH_REF: ${{ github.ref }}
GH_REF_NAME: ${{ github.ref_name }}
run: |
REF="$GH_REF"
PR_NUMBER=$(gh pr list --repo "$GITHUB_REPOSITORY" --head "$GH_REF_NAME" \
--state open --json number --jq '.[0].number // empty' 2>/dev/null || true)
Version
Observed on v1.4.1 (commit 1c15be3).
- Lenguaje dominante
- Python
- Estrellas
- 99
- Forks
- 20
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de actions/upload-code-coverage
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
actions/upload-code-coverage#18 · 1 comentario ·
-
Enable immutable releases Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
-
Please add a LICENSE file Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 45/100
actions/upload-code-coverage#20 · 2 comentarios · 3 reacciones ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 58/100
actions/upload-code-coverage#16 · 2 comentarios · 5 reacciones ·
-
Push to default branch attributes coverage to an unrelated fork PR with a same-named head branch Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 74/100
actions/upload-code-coverage#14 · 2 comentarios · 1 reacción ·
Todos los issues de actions/upload-code-coverage
Issues similares
-
bug confirmed issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
open-webui/open-webui#30750 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
OpenwaterHealth/openmotion-bloodflow-app#604 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
good first issue
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100