Skip to content
Latchkey

O Que É uma Poisoned Pipeline Execution? Executando Código Não Confiável Com Secrets

Uma poisoned pipeline execution (PPE) é um ataque em que alguém faz o pipeline de CI executar código que ele controla, com todos os secrets e privilégios que o pipeline possui.

O PPE é um dos ataques de CI mais afiados porque abusa da própria confiança do pipeline. O atacante não invade seus servidores; ele faz seu pipeline executar o código dele por ele, completo com seus secrets, suas deploy keys e sua identidade de assinatura. A porta mais comum é um pull request de um contribuidor não confiável.

Como o PPE funciona

O atacante influencia o que o pipeline executa, editando o arquivo do pipeline, um build script ou um config que o pipeline lê, e arranja para que essa mudança rode com secrets anexados. O pipeline, confiando na própria configuração, executa obedientemente o código hostil.

PPE direto, indireto e público

  • Direto: o atacante edita a própria definição do pipeline.
  • Indireto: ele edita algo que o pipeline executa (um script, um Makefile).
  • Público: um fork pull request dispara um workflow privilegiado.

A armadilha do fork pull request

O PPE público clássico: um workflow roda em pull requests com acesso a secrets. Um contribuidor externo abre um PR que modifica o build para despejar secrets no servidor dele. O pipeline executa o código do PR antes que qualquer humano revise. Triggers como pull_request_target são notórios aqui.

Prevenindo o PPE

Não execute código não confiável com secrets: retenha secrets de workflows de fork PR, exija aprovação antes de execuções privilegiadas em contribuições externas, trate arquivos de pipeline e de build como código protegido que precisa de revisão, e fixe actions em versões confiáveis.

Contendo um PPE que se concretiza

Defesa em profundidade assume que a prevenção pode falhar. Tokens de least privilege, credenciais efêmeras, filtragem de egress e runners isolados significam que mesmo um PPE bem-sucedido encontra poucos secrets, não consegue enviá-los a lugar nenhum e não consegue persistir. O raio de explosão permanece dentro de um único job descartável.

Principais conclusões

  • Uma poisoned pipeline execution executa código do atacante com os privilégios do pipeline.
  • Fork pull requests que recebem secrets são o vetor público clássico de PPE.
  • Retenha secrets de execuções não confiáveis e contenha com least privilege e isolamento.

Guias relacionados