[actions] Alternate actions/checkout paths suppress untrusted-checkout alerts

Aberta
#22,213 2 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
3/5
Tempo estimado
1-2 dias
Facilidade para iniciantes
68/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Pouca atividade
Stack de tecnologia
github-actions
Domínio
ci-cd, security

Direção de pesquisa

Comece com ActionsMutableRefCheckout.getPath() e ActionsSHACheckout.getPath() em actions/ql/lib/codeql/actions/security/UntrustedCheckoutQuery.qll e, em seguida, compare-os com LocalScriptExecutionRunStep.getPath() em PoisonableSteps.qll. Use o reproducer vinculado para verificar a discrepância atual, adicione cobertura de regressão para as formas de caminho listadas e confirme que tanto as queries Critical quanto as High relatam os casos de caminhos alternativos, enquanto o checkout imutável continua sem ser relatado.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

Description of the issue

actions/untrusted-checkout/critical does not report a privileged workflow that checks out an untrusted PR into a non-default path: and then executes a script or local action from that checkout. The actions/untrusted-checkout/high fallback is also suppressed, so neither query reports the workflow.

Minimal reproducer

on: pull_request_target

permissions:
  contents: write

jobs:
  execute:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
        with:
          repository: ${{ github.event.pull_request.head.repo.full_name }}
          ref: ${{ github.event.pull_request.head.sha }}
          path: candidate
      - run: bash candidate/proof.sh

actions/checkout places path: candidate under $GITHUB_WORKSPACE, so this executes the same checked-out script relationship as a default checkout followed by bash proof.sh.

Reproduction

The complete reproducer is in public fork PR #1.

  • Latest-release fork CI: CodeQL Action 4.37.1, CLI 2.26.1, codeql/actions-queries 0.6.31
  • Current-main CI: queries compiled directly from github/codeql@14450f5bf38ea9a3ce2e0e45dcf51c0bbdd01af5

Both successful runs scanned all 11 workflow files and produced the same result matrix:

Case Result
Default checkout followed by bash proof.sh actions/untrusted-checkout/critical
Default checkout followed by uses: ./.github/actions/proof actions/untrusted-checkout/critical
Default checkout with quoted or $GITHUB_WORKSPACE script paths actions/untrusted-checkout/critical
path: candidate, ./candidate, or candidate/ followed by the corresponding script no critical or high alert
path: candidate followed by uses: ./candidate/.github/actions/proof no critical or high alert
Immutable checkout control no critical or high alert

The CI also executed harmless script and composite-action canaries through the tested paths before analysis.

Expected result

The alternate-path cases should be reported by actions/untrusted-checkout/critical, like their default-path controls. A path-representation mismatch should not suppress both the critical query and its high fallback.

Source-level cause

At current main:

Normalizing explicit actions/checkout paths at the checkout model, with regression tests for bare, dot-relative, trailing-slash, and local-action forms, appears to be the smallest fix.

Linguagem predominante
CodeQL
Estrelas
10.1k
Forks
2.1k
Merge médio
2d 10h
PRs com merge (30d)
134

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de github/codeql

Todas as issues de github/codeql

Issues semelhantes

Mais issues de DevOps

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.