tj-actions/changed-files - CVE-2025-30066 - vazamento de segredo

CVE‑2025‑30066: Quando tj‑actions/changed‑files levam a vazamento de segredos

O vazamento de segredos nem sempre está relacionado a código ruim ou bibliotecas vulneráveis. Às vezes, tudo se resume à forma como gerenciamos segredos durante execuções de CI, e o CVE‑2025‑30066 é um exemplo clássico de como isso pode dar errado. A ação do GitHub tj‑actions/changed‑files, amplamente utilizada para detectar arquivos alterados em pull requests, tornou-se um canal silencioso para vazamentos secretos. Veja o que aconteceu e como você pode bloquear seu CI/CD segredos! pipeline.

O que aconteceu em CVE‑2025‑30066?

Em meados de março de 2025, tj-actions/changed-files foi comprometido. O invasor reescreveu as tags de versão existentes (até v45.0.7) para apontar para um malware commit. Isso alterou o comportamento da Ação sem que os desenvolvedores percebessem; nenhuma nova versão foi lançada, apenas adulteração invisível de tags.

O payload era simples, mas perigoso: ele puxava um script Python remoto codificado em Base64 que escaneava a memória do executor em busca de credenciais, despejando-as em logs ou exfiltrando-as. Não se tratava de uma falha lógica de código nas tj-actions/changed-files; era um abuso de como o vazamento de segredos pode ocorrer em fluxos de trabalho de CI usando essa Ação reutilizável. O CVE-2025-30066 não se referia a estouros de buffer; tratava-se de uma falha de projeto de CI que permitiu o vazamento de segredos.

Impacto: qualquer repositório que usasse as versões afetadas de tj-actions/changed-files corria o risco de vazamento de segredos, especialmente se tokens ou arquivos confidenciais fossem manipulados de forma insegura em padrões de arquivo ou saídas de CI.

Por que isso afeta os fluxos de trabalho que dependem de ações reutilizáveis

Fluxos de trabalho DevSecOps dependem fortemente de tj-actions/changed-files para:

  • Automatize pull request cheques
  • Identificar arquivos alterados em caminhos específicos
  • Evite trabalhos de CI redundantes

Mas esses fluxos de trabalho frequentemente ignoram um ponto: como os padrões glob podem incluir dados confidenciais. Os desenvolvedores presumem que tj-actions/changed-files se comportam de forma segura por padrão. No entanto, se você usar glob configurações/** e os segredos são armazenados em configs/secrets.env, você acabou de adicionar um arquivo secreto nas saídas ou logs do CI. Isso não é um bug na Ação; é um CI/CD falha de projeto que leva ao vazamento de informações secretas. O CVE‑2025‑30066 é um exemplo claro disso.

Como ocorreu o vazamento secreto (análise de vulnerabilidades)

Vamos analisar a falha central por trás do CVE‑2025‑30066:

  • Padrões globalizantes como **/*.env arquivos secretos combinados involuntariamente
  • tj‑actions/changed‑files tratou esses segredos como arquivos alterados
  • Os segredos acabaram em saídas de etapas, logs ou trabalhos posteriores

Isso aconteceu porque os segredos eram armazenados em caminhos controlados por versão (má ideia) e a configuração do CI não os excluía explicitamente do globbing (também ruim). Portanto, não se trata de um bug de código, mas sim de uma higiene inadequada do projeto do CI, causando vazamento de segredos com saídas de tj-actions/changed-files.

Caminho Prático de Exploração: Do Trabalho de CI à Exposição de Credenciais

Exemplo de configuração de CI que causou vazamento de segredo por meio de tj-actions/changed-files:

yaml
jobs:
  detect_changes:
    runs‑on: ubuntu‑latest
    steps:
      ‑ uses: actions/checkout@v3
      ‑ name: Check changed files
        id: changed
        uses: tj‑actions/changed‑files@v45
        with:
          files: configs/**

If configs/secrets.env alterado:

  • Foi sinalizado por tj-actions/changed-files
  • Foi incluído em etapas.alterado.saídas.todos_os_arquivos_alterados
  • Etapas posteriores registraram ou passaram para scripts, vazando segredos

Esse vazamento ocorreu porque a lógica do CI tratava segredos como arquivos comuns. É aí que o vazamento de segredos começa, não devido a um estouro de buffer, mas ao uso indevido de tj-actions/arquivos alterados em um projeto de CI falho.

A propagação ocorre com saídas como:

yaml
‑ name: Use changed file list
  run: echo "Changed files: ${{ steps.changed.outputs.all_changed_files }}"

If segredos.env estiver nessa lista, seu nome de arquivo e possivelmente seu conteúdo podem aparecer nos logs de compilação. Até mesmo lógica condicional como:

yaml
if: contains(steps.changed.outputs.all_changed_files, 'secrets.env')

Pode expor artefatos sensíveis. Este é um CI/CD falha de projeto permitindo vazamento secreto, não uma falha no código de ação.

Como usar fluxos de trabalho reutilizáveis com segurança e evitar vazamentos

Você não precisa abandonar tj-actions/changed-files. Você deve usar Ações reutilizáveis com uma mentalidade que prioriza os segredos:

Melhores práticas de manuseio de segredos

  • Nunca controle a versão de segredos
  • Evite padrões glob que correspondam a caminhos sensíveis
  • Use segredos baseados em ambiente (GITHUB_ENV, cofres, GitHub Secrets)

CI/CD Configuração Guardrails

  • Sempre fixe ações em SHAs imutáveis, não em tags (nunca use @v45)
  • Trate a saída de tj-actions/arquivos alterados como contaminados, higienize-os ou filtre-os
  • Defina saídas somente se higienizadas

⚠️ Exemplo inseguro:

yaml
jobs:
  detect_changes:
    runs‑on: ubuntu‑latest
    steps:
      ‑ uses: actions/checkout@v3
      ‑ name: Detect all changes
        id: changed
        uses: tj‑actions/changed‑files@v45
        with:
          files: '**/*'  # ⚠️ This glob includes secrets.env, which may leak credentials

O exposto acima é exatamente o uso indevido por trás do vazamento secreto e do CVE‑2025‑30066.

Alternativa Segura:

yaml
jobs:
  detect_changes:
    runs‑on: ubuntu‑latest
    steps:
      ‑ uses: actions/checkout@v3
      ‑ name: Detect non‑sensitive file changes
        id: changed
        uses: tj‑actions/changed‑files@<SHA>  # pinned to SHA
        with:
          files: 'src/**'
          files‑ignore: '**/secrets.env'  # ⚠️ Excludes secret file

Ao fazer isso, você evita o CI/CD falha de projeto que leva ao vazamento de segredos por meio de tj-actions/arquivos alterados.

Além disso:

  • Desabilitar ou restringir o registro onde segredos podem aparecer
  • Use os recursos secretos de mascaramento do GitHub
  • Limitar o acesso a registros de construção e artefatos

Segredos rápidos - Lista de verificação de uso seguro de CI

Melhores Práticas
Não armazene segredos em arquivos com controle de versão
Use cofres ou segredos do GitHub para credenciais
Sempre fixe tj-actions/alterados-arquivos em SHAs imutáveis
Filtrar ou higienizar saídas de tj-actions/changed-files
Nunca inclua caminhos secretos em padrões glob
Mascarar ou restringir registros que podem expor dados confidenciais
Audite configurações de CI herdadas com frequência

Papel da Xygeni: Aplicação de segredos de CI em escala

Xygeni Protege CI/CD pipelines concentrando-se em como os segredos são tratados, usados e expostos no mundo real Fluxos de trabalho DevOps. Não se trata apenas de escanear código; trata-se de aplicar as melhores práticas de gerenciamento de segredos por meio de pipeline análise.

Detecção de uso de saída insegura

  • Verifica ações do GitHub para usos de eco, execução e saídas onde ${{ steps.*.outputs.* }} pode incluir valores sensíveis
  • Identifica quando os segredos são referenciados ou impressos diretamente, intencionalmente ou por engano

Monitoramento de Segredos Vazados

  • Detecta valores de alta entropia (chaves de API, tokens) dentro de logs e saídas de etapas
  • Dispara alertas quando segredos aparecem no pipeline logs, mesmo que mascarados a jusante

Uso de ação mal configurado

  • Rastreia todas as ações do GitHub em pipelines para detectar o uso de versões comprometidas (por exemplo, tj-actions/arquivos-alterados@v45)
  • Audita padrões de correspondência de arquivos que incluem segredos potenciais como **/*.env, *.key ou .env.*

CI baseado em políticas Guardrails

  • Aplica SHA-pinning para ações de terceiros
  • Bloqueia o uso de arquivos inseguros que podem espalhar segredos para os logs
  • Previne pipelines de emitir valores sensíveis como parte das saídas do fluxo de trabalho

Ao tratar os fluxos de trabalho como parte da sua superfície de ameaças, a Xygeni garante que a higiene secreta não seja apenas uma prática recomendada, mas uma defesa integrada.

Conclusão: Vazamento de segredos pode começar com uma simples ação de uso indevido

CVE‑2025‑30066 não era um bug de biblioteca; era um CI/CD Falha de design decorrente do uso indevido de tj-actions/arquivos alterados. O que as equipes de DevSecOps devem levar em conta:

  • Trate cada referência glob/file no CI como um ponto de vazamento potencial
  • Audite os fluxos de trabalho regularmente para detectar a inclusão acidental de segredos
  • Use cofres seguros ou segredos de ambiente, nunca verifique segredos no controle de versão
  • Sanitizar ou filtrar todas as saídas do fluxo de trabalho
  • Registre a atividade do fluxo de trabalho sensível para manter a capacidade de auditoria

CI é código. Fluxos de trabalho são código. Logs e saídas são código. Proteja seus segredos a cada passo, ou arrisque-se em um cenário de vazamento de segredos que não precisa de um hacker, apenas de um hacker mal-intencionado. CI/CD escolha de design.

sca-tools-software-composição-análise-ferramentas
Priorize, corrija e proteja seus riscos de software
você recebe uma avaliação gratuita de 7 dias da nossa licença Business Edition e pode aproveitar alguns dos recursos avançados da plataforma SecurityScorecard.
Não é necessário cartão de crédito

Proteja seu desenvolvimento e entrega de software

com o Suíte de Produtos da Xygeni