A role que qualquer repo pode vestir: uma trust policy OIDC sem sub fixado

Segurança em Nuvem Nível 4/4 ~7 min 18 de outubro de 2026

O desafio

A Northwind permite que o GitHub Actions faça deploy na AWS sem chaves de longa duração: um workflow apresenta um token OIDC do GitHub de curta duração e assume uma role. Duas roles confiam nesse provider. Uma serve para fazer o deploy do site de marketing, a outra é admin total na conta de produção. Ambas confirmam que o token é de fato um token do GitHub Actions. Só uma delas também confirma de qual repositório o token veio. Leia as duas trust policies e diga o nome da role que qualquer workflow em todo o github.com pode assumir.

O que você vai aprender

  • Explicar o que significam as claims aud e sub de um token OIDC do GitHub
  • Reconhecer que aud é uma constante compartilhada e não prova nada sobre o repo
  • Identificar uma trust policy sem a condição sub como criticamente aberta
  • Descrever o risco de wildcards StringLike em sub e ref
  • Entender que a confiança deve ficar mais restrita à medida que o privilégio da role cresce

Habilidades testadas

Análise de IAM em cloudLeitura de trust policiesRaciocínio sobre claims OIDC

Pré-requisitos

  • O que são uma role IAM e uma trust policy
  • A ideia de federação OIDC para CI

Como funciona

O CI sem chaves funciona assim: um workflow apresenta um token OIDC de curta duração e assume uma role da AWS. A trust policy da role decide quem pode fazer isso, então ela é toda a fronteira.

A claim aud de um token do GitHub tem o mesmo valor em toda execução do GitHub Actions, em qualquer lugar; checá-la só prova que quem chama é algum workflow do GitHub. A claim sub é a que nomeia o repositório e a ref. Uma trust policy que checa aud mas não sub aceita um token gerado por um workflow de qualquer repositório no github.com, inclusive um que pertence ao atacante.

Por isso a role deve fixar sub nos repos e refs exatos permitidos e tratar wildcards com cuidado: repo:org/* admite qualquer repo da organização, e uma ref frouxa admite qualquer branch ou um pull request.

Erros comuns

  • Responder northwind-site-deploy. A policy dela fixa sub em um repo e uma branch, então é a segura.
  • Achar que a checagem de aud ajuda. Todo token do GitHub carrega o mesmo aud; ele não é um controle de escopo.
  • Supor que um atacante não consegue um token válido. Qualquer pessoa pode rodar Actions no próprio repo e receber um token OIDC genuíno do GitHub.
  • Ver o privilégio como a falha. Direitos de admin pioram a situação, mas o bug é a condição sub ausente.

Como se proteger

Fixe o subject e mantenha o privilégio proporcional ao escopo.

  • Sempre adicione uma condição sub listando os valores exatos repo:org/name:ref:... permitidos. Nunca dependa só de aud.
  • Prefira StringEquals em subjects completos. Se precisar usar StringLike, evite repo:org/* e refs frouxas; restrinja a repos e branches nomeados.
  • Separe privilégio baixo e alto: uma role de deploy de um site nunca deve ter a mesma abertura de uma role de admin, e roles de admin precisam da confiança mais restrita possível.
  • Audite toda role de web identity em busca de sub ausente ou com wildcard.

Solução completa

Membros Pro e Max desbloqueiam o passo a passo completo.

Assinar Pro

Estatísticas da comunidade

141 resoluções
82% taxa de sucesso
Malekith Primeiro sangue

Hacks de hoje relacionados

34.000+ Hackers Labs reais Grátis
Comece Grátis ou resolva o hack de hoje, sem conta