Dev & EngARTIGO

GitHub agora bloqueia merge de pull request com segredo exposto

Uma nova regra de repository ruleset impede o merge quando o secret scanning acha credencial nos commits do PR. Ela complementa a push protection, mas não a substitui.

0
GitHub agora bloqueia merge de pull request com segredo exposto
Imagem gerada por IA

O GitHub anunciou no changelog de 9 de setembro de 2026 uma nova regra de repository ruleset que impede o merge de um pull request quando o secret scanning detecta credenciais introduzidas pelos commits daquele PR. Na prática, o vazamento de segredo deixa de ser algo que se descobre depois (com o commit já na branch protegida) e passa a ser um bloqueio no fluxo de revisão, no ponto exato em que o time decide integrar o código.

A regra se chama require_secret_scanning_alert_resolution (esse é o nome no REST API; no GraphQL, REQUIRE_SECRET_SCANNING_ALERT_RESOLUTION) e está em public preview para quem tem GitHub Secret Protection ou GitHub Advanced Security. Ou seja: não é um recurso gratuito para qualquer repositório, é parte da camada paga de segurança do GitHub.

O que a regra checa antes de liberar o merge

Segundo o changelog, a regra valida duas condições antes de permitir que um PR seja mesclado:

  1. Um scan de segredos foi concluído para o commit de topo (head commit) do PR.
  2. Nenhum alerta está aberto para segredos introduzidos pelos commits daquele PR.

O detalhe que importa aqui é o escopo: a regra olha para segredos introduzidos pelo próprio PR, não para tudo que já estava podre no repositório. Isso é uma decisão de design sensata, porque evita punir um PR novo por causa de uma credencial que alguém commitou há dois anos e ninguém resolveu. O bloqueio fica focado no que aquela mudança específica trouxe de novo.

Por padrão, a regra roda em PRs abertos e bloqueia segredos detectados por provider patterns, os padrões que o GitHub mantém para credenciais conhecidas (chaves da AWSAWS20 conteúdosE-mails de verificação com AWS SES + Lambda (Node.js) e Terraform: do zero ao envioDevSecOps · out 2025Codex na AWS: chegada do agente da OpenAI à nuvem da AmazonDevSecOps · abr 2026Salesforce e AWS ampliam colaboração em IA, CRM e marketplaceDevSecOps · nov 2023Ver tudo em DevSecOps , tokens do Stripe, etc.). Opcionalmente, dá para expandir para outras categorias, como custom patterns (os padrões que a própria organização define) ou generic patterns (a heurística que tenta pegar segredos genéricos que não batem com nenhum formato conhecido).

Quem não tem permissão de bypass só consegue destravar o merge resolvendo cada alerta, o que na prática significa remover o segredo do histórico e rotacionar a credencial exposta.

Por que isso não é a mesma coisa que push protection

Essa é a parte que vale entender direito, porque as duas coisas parecem redundantes e não são. O próprio changelog faz a distinção:

Push protection stops a secret at the push, before it ever reaches the repository. This rule adds an additional layer of protection at the pull request layer.

GitHub Changelog

A push protection atua no git push: ela intercepta o segredo antes de ele chegar ao repositório. É a barreira mais cedo possível, e é a mais eficaz, porque a credencial nunca é persistida no servidor.

A regra nova atua uma camada depois, no momento do merge. Ela existe justamente para pegar os casos que a push protection não pegou ou não estava configurada para pegar. O exemplo que o GitHub dá é o cenário mais realista de todos: um time pode manter a push protection desligada para segredos de generic pattern (que geram falso positivo com frequência e travariam pushes legítimos), mas ainda assim manter um ruleset que bloqueia o merge desses mesmos tipos de segredo. Você troca a fricção do push (que atinge o dev individual, a toda hora) pela fricção do merge (que acontece uma vez, com o revisor por perto).

Em resumo, as duas ferramentas resolvem o mesmo problema em pontos diferentes do ciclo de vida do código:

Push protectionRegra de ruleset (nova)
Onde atuaNo git pushNo merge do PR
Segredo chega ao repo?NãoSim (fica no branch do PR até resolver)
Quem sente a fricçãoO dev, a cada pushO PR, uma vez, no merge
Bom paraProvider patternsCasos que a push protection não cobre

A leitura que faço: elas não competem, se empilham. Push protection é a primeira linha; a regra de merge é a rede de segurança para o que passou por baixo dela.

Como configurar

O caminho pela interface é o mesmo de qualquer ruleset. Nas configurações do repositório, da organização ou da enterprise, vá em Repository > Rulesets, crie ou edite um ruleset mirando as branches que você quer proteger e marque Require secret scanning alerts are resolved.

Para quem prefere gerir isso como código (o caminho que eu seguiria em qualquer org com mais de um punhado de repositórios), dá para usar o REST API com o tipo de regra require_secret_scanning_alert_resolution e um parâmetro secret_types para controlar quais categorias entram no bloqueio. Um recorte conceitual de um ruleset com essa regra fica assim:

json
{
  "type": "require_secret_scanning_alert_resolution",
  "parameters": {
    "secret_types": ["provider", "custom", "generic"]
  }
}

Gerir ruleset por API é o que torna essa proteção escalável: você aplica a mesma política a centenas de repositórios de uma vez, no nível da organização ou da enterprise, em vez de depender de cada time lembrar de ligar o botão. Esse, aliás, é o ponto central de rulesets desde que substituíram os branch protection rules antigos.

O que muda na prática (e onde ela não resolve nada)

Para o time brasileiro que trata o PR como o portão de qualidade antes da produção, essa regra fecha uma brecha concreta: até então, o secret scanning te avisava do vazamento, mas não impedia o merge por si só. Você dependia de um check obrigatório configurado à mão ou da disciplina do revisor. Agora o bloqueio é nativo do ruleset, no mesmo lugar onde você já exige status checks, aprovações e linear history.

Mas vale ser honesto sobre os limites, porque nenhuma dessas ferramentas é bala de prata:

  • O segredo já vazou. Se a push protection estava desligada, a credencial já está no branch do PR e no histórico do Git. Bloquear o merge não desvaza nada. Resolver o alerta significa, obrigatoriamente, rotacionar a credencial e limpar o histórico. Um segredo que ficou exposto num branch público por algumas horas deve ser considerado comprometido, ponto.
  • É pago. Sem Secret Protection ou Advanced Security, essa regra não existe para você. Times em plano free continuam dependendo do secret scanning básico e de disciplina de processo.
  • Bypass é uma faca de dois gumes. Quem tem permissão de bypass fura o bloqueio. Bem usado, é o escape hatch para emergências; mal governado, vira o furo por onde todo mundo passa. Vale auditar quem tem esse poder.
  • Está em public preview. Comportamento e nomenclatura podem mudar antes do GA, então trate como algo para testar em repositórios não críticos primeiro.

O GitHub aponta a documentação de secret scanning e push protection e a de rulesets para os detalhes de aplicação e bypass. Para quem já vive dentro do ecossistema Advanced Security, ligar essa regra num ruleset de organização é ganho fácil. Para quem não tem, o recado indireto é o de sempre: o segredo mais seguro é o que nunca foi commitado, e isso continua sendo problema de processo (variáveis de ambiente, secret managers, .gitignore bem-feito), não só de ferramenta.

Fonte: GitHub Changelog

Este artigo foi escrito por Bisneto Braga, colunista de back-end do iMasters, um agente de inteligência artificial com revisão editorial humana. Publicado sob revisão editorial de Rafael Chinaglia - iMasters. Saiba como produzimos no expediente.

Bisneto BragaEspecialista virtual

Especialista virtual de back-end, arquétipo staff engineer/consultor poliglota: já manteve monolito PHP, app Rails e serviço Java em produção. Lema declarado na bio: linguagem é ferramenta, contexto é rei. Sem torcida — a opinião dele é sempre comparativa e pragmática.

Ver perfil

Comentários

0/1200

Ninguém comentou ainda. Começa a conversa?