Push Protection falha? 543 mil chaves ativas seguem no GitHub

Push Protection falha? 543 mil chaves ativas seguem no GitHub

Uma análise profunda no conjunto de dados The Stack v3 revela uma realidade desconfortável para a segurança no desenvolvimento de software. A Truffle Security localizou 543.699 credenciais expostas em repositórios públicos do GitHub que continuavam perfeitamente válidas em julho de 2026. Este volume massivo de segredos operacionais não apenas expõe aplicações e infraestruturas reais, mas escancara uma falha conceitual na forma como a indústria lida com vazamentos de código.

O levantamento auditou 224 milhões de repositórios e mais de 58 bilhões de arquivos coletados até agosto de 2025 para treinamento de IA. Como a varredura considerou apenas o estado da default branch no momento da extração, os números representam chaves consolidadas no histórico principal dos projetos. A partir desses dados, fica claro que bloquear commits com segredos conhecidos resolve apenas uma fração do problema. O verdadeiro divisor de águas entre o comprometimento contínuo e a segurança efetiva não está na plataforma de hospedagem de código, mas na política de revogação automatizada do provedor da credencial.

A falsa sensação de segurança do Push Protection

6DoTzoD9 vazamento credenciais ativas github analise 2
Push Protection falha? 543 mil chaves ativas seguem no GitHub 5

O GitHub implementou o push protection ativado por padrão em fevereiro de 2024. A ferramenta intercepta e bloqueia commits que contenham segredos com padrões reconhecíveis, exigindo que o desenvolvedor confirme a ação caso deseje ignorar o alerta. Os dados provam que o mecanismo funciona de forma competente dentro de seu escopo técnico. Nos doze meses próximos à ativação do recurso, a taxa de vazamento dos tokens efetivamente protegidos caiu 53%.

O problema reside no escopo. A análise demonstra que 199.843 credenciais válidas foram publicadas após o push protection se tornar o comportamento padrão da plataforma. Isso ocorre porque 51,8% de todas as credenciais ativas encontradas pertencem a formatos que o sistema não bloqueia automaticamente.

Strings de conexão de banco de dados e chaves privadas são classificados como padrões genéricos. O GitHub exige que as organizações ativem manualmente a proteção para esses casos específicos. Sob a ótica editorial da segurança, essa configuração padrão indulgente cria um perigoso ponto cego. Quando um desenvolvedor confia que a plataforma o impedirá de cometer um erro crítico, a ausência de um bloqueio ao inserir um URI do PostgreSQL é frequentemente interpretada como um aval de segurança, não como uma limitação da ferramenta.

A ambiguidade arquitetônica das chaves do Google

O caso das credenciais do Google ilustra perfeitamente como decisões arquitetônicas de provedores impactam a segurança de todo o ecossistema. O mecanismo de push protection ignora chaves de API do Google de forma deliberada. O motivo é estrutural.

O Google utiliza o mesmo prefixo identificador (AIzaSy) para chaves do Google Maps, que são projetadas para existir publicamente no código de páginas web, e para chaves de cobrança do modelo Gemini. Como um único padrão de expressão regular não consegue diferenciar a finalidade da chave apenas pela sua morfologia, o GitHub não pode aplicar um bloqueio genérico sem quebrar fluxos de trabalho legítimos de desenvolvimento frontend.

A consequência dessa escolha de design do provedor é severa. A Truffle Security localizou 31.374 chaves válidas exclusivas da plataforma Gemini, cujo vazamento mediano ocorreu em fevereiro de 2025. Toda essa população de credenciais expostas é mais jovem que a própria implementação do push protection.

O abismo entre detectar e revogar

A métrica mais reveladora da pesquisa não é a quantidade de vazamentos, mas a taxa de sobrevivência dos tokens expostos. Os dados evidenciam que confiar na ação humana após um alerta é uma estratégia falha.

Quando o sistema depende que o mantenedor do repositório leia um alerta de segurança e acesse manualmente o painel do provedor para rotacionar a chave, a credencial frequentemente permanece ativa. O contraste surge quando observamos ecossistemas que aplicam revogação automatizada.

O GitHub e o npm mantêm parcerias de varredura que invalidam imediatamente seus próprios tokens assim que são detectados em repositórios públicos. O resultado é definitivo. Dos 101.886 tokens do npm comprometidos na amostra, apenas um permanecia ativo durante a verificação (uma taxa de sobrevivência de 0,001%). Dos 73.048 tokens do próprio GitHub expostos, apenas 260 funcionavam (0,36%).

No extremo oposto, provedores que delegam a responsabilidade de revogação ao usuário apresentam cenários críticos. Dos 12.985 URIs de conexão do PostgreSQL vazados, 88% continuavam ativos. No ecossistema do Google Cloud, 54% das 126.963 contas de serviço expostas forneciam acesso funcional. O relatório excluiu intencionalmente o MongoDB dessas taxas estatísticas, pois o detector utilizado reportava apenas URIs que efetivamente concluíam a conexão de rede, o que resultaria em uma taxa artificial de 100% de sobrevivência.

O peso do legado histórico

Soluções preventivas no momento do commit não limpam o histórico de uma base de código. A idade mediana das credenciais ativas localizadas é de 784 dias. O caso mais extremo encontrado foi um arquivo de configuração de um servidor web Erlang modificado pela última vez em junho de 2009. A credencial de banco de dados inserida no código continuava autêntica e funcional mais de 16 anos depois.

A análise comprova que um vazamento de credencial deve ser tratado como comprometimento definitivo e irreversível no momento em que atinge um ambiente público. Limpar o histórico do Git com um force push sem rotacionar a chave no provedor original é um erro técnico comum, mas que mantém a infraestrutura vulnerável a qualquer ator que já tenha espelhado o repositório.

Equipes de engenharia de software precisam priorizar a adoção de credenciais de vida curta (short-lived credentials) e arquiteturas de identidade de carga de trabalho (workload identity). A dependência de chaves estáticas de longa duração provou ser um modelo insustentável, pois transforma um erro de configuração de segundos em uma vulnerabilidade que permanece explorável por anos.