CTO no Integrar Plus • Publicado em 31 de October de 2026
O seu pipeline de segurança pode ter pre-commit hooks impecáveis, Gitleaks rodando no repositório e regras rígidas de branch protection no GitHub. Nada disso serve quando dá seis da tarde de uma sexta-feira, o deploy quebra em produção e um desenvolvedor desesperado copia duzentas linhas de log do terminal para colar na janela de chat de um modelo de linguagem.
O debate sobre vazamento de segredos ainda está preso na década passada, quando a maior ameaça era dar git push em um arquivo .env com a senha do banco. A indústria construiu todo o seu arsenal defensivo ao redor do Git. Criamos scanners de histórico, bloqueadores de commit e alertas automáticos na nuvem. Só esquecemos que o desenvolvedor contemporâneo trabalha com uma extensão no editor ou um agente de linha de comando que tem acesso de leitura irrestrito a cada arquivo da árvore local, ao histórico do terminal e às variáveis de ambiente da máquina. O segredo nem precisa sonhar em entrar no Git para cruzar o oceano e aterrissar nos servidores da OpenAI ou da Anthropic.
Existe hoje uma divisão nítida na comunidade técnica sobre como conter esse sangramento. De um lado, defende-se a sanitização de saída: a ideia de que expressões regulares ou proxies locais conseguem inspecionar o texto antes do envio para a API e mascarar tokens, JWTs e chaves de API. De outro lado, argumenta-se que a única defesa real é restringir permissões no nível do sistema operacional e limitar o raio de destruição com credenciais efêmeras de escopo mínimo.
Eu não tenho dúvida de que a turma da sanitização por regex está vendendo uma ilusão confortável. Tentar limpar saída com expressões regulares é brincar de bater em toupeira. Provedores mudam prefixos de chaves sem aviso prévio, tokens opacos passam batido e strings de conexão formatadas de modo incomum não acionam filtros tradicionais. Pior: confiar na disciplina humana para revisar um log antes de colar no chat é ignorar a realidade do trabalho sob pressão. Ninguém para na linha 143 de um stack trace para procurar um Bearer token quando o servidor está fora do ar.
A dinâmica dos agentes piora esse quadro por duas razões técnicas que vejo pouca gente discutir.
A primeira é o acúmulo de contexto conversacional. Se você cola um token sem querer na terceira mensagem de uma sessão de depuração, esse token não vazou apenas uma vez. Cada nova mensagem enviada para o assistente empacota o histórico inteiro da conversa e o despacha de volta para os servidores do provedor. Se a sessão durar vinte turnos, a sua credencial foi transmitida vinte vezes. Depois que o dado saiu da sua máquina, nenhum comando de desfazer recupera o que já foi gravado em logs de inferência ou em pipelines de treino.
A segunda razão é a assimetria das ferramentas que damos aos assistentes. Um agente que executa comandos no terminal pode rodar um comando para inspecionar variáveis ou ler arquivos de configuração diretamente. Mesmo que o terminal do agente tenha algum filtro de palavras proibidas, a ferramenta de leitura de arquivos pode seguir outro caminho no sistema operacional e ler arquivos em disco sem passar pelo mesmo crivo. Isso já foi demonstrado em falhas documentadas onde proteções de shell eram contornadas simplesmente mandando o assistente ler o arquivo /proc/self/environ do processo.
Tratar a superfície de ferramentas do assistente como parte da fronteira de segurança é o único caminho realista. Se a ferramenta pode ler, ela vai ler. Se ela pode listar processos, ela vai encontrar credenciais expostas em argumentos de inicialização.
Na prática de quem gerencia infraestrutura própria e aplicações Rails em servidores dedicados, a solução não passa por comprar mais uma extensão mágica de inteligência artificial. Passa por arquitetura básica e higiene de ambiente:
Credenciais de produção nunca devem pisar no computador de desenvolvimento. Se a string de conexão do PostgreSQL de produção ou a chave mestre do Rails estiver gravada no disco local de um desenvolvedor, qualquer extensão comprometida ou comando executado pelo agente tem acesso a ela. O pior dado que pode vazar do laptop de um engenheiro precisa ser uma credencial de homologação ou um token local de teste.
Variáveis de ambiente precisam ser injetadas no momento da execução, sem poluir o ambiente global da máquina. Um arquivo com dezenas de segredos solto na raiz do projeto é um prato cheio para qualquer indexador de código. Se o aplicativo carrega configurações via injeção pontual de processo ou ferramentas de segredo em memória, o comando do agente não encontra nada pronto para colheita rápida.
Falhas de aplicação e logs de erro não devem despejar variáveis de ambiente. Se o seu framework imprime o conteúdo do hash de configuração quando uma conexão falha, o desenvolvedor nem percebe que está colando senhas no chat ao tentar entender uma exceção não tratada.
Testes de saída com segredos canário precisam fazer parte da rotina. Plante uma chave falsa inofensiva no ambiente de homologação e monitore se ela aparece em logs externos, exportações de suporte ou no tráfego das extensões de inteligência artificial. Se o canário escapar, a sua contenção falhou antes de um estrago real acontecer.
Existe ainda uma categoria de credencial que os times costumam ignorar: sessões autenticadas no navegador. Muitas ferramentas modernas de automação e agentes operam navegadores headless para testar fluxos ou coletar informações da tela. Se a ferramenta lê o HTML renderizado ou tem acesso aos cookies da sessão ativa, ela não precisa de uma chave de API para agir em seu nome; o próprio cookie de sessão ou o token CSRF embutido na página concede o acesso. Nesses casos, rotacionar chaves de API não resolve nada. O procedimento de contenção exige revogação de todas as sessões ativas e encerramento de cookies persistentes.
O vício da nossa área é construir muros altos onde já temos ferramentas conhecidas e deixar a porta dos fundos escancarada. Gastamos semanas configurando scanners de repositório enquanto instalamos extensões no editor com permissão para ler qualquer arquivo do workspace e enviá-lo para APIs de terceiros.
O repositório Git é apenas um dos canais de saída possíveis, e hoje provavelmente o mais vigiado. Enquanto tratarmos a janela de contexto do assistente e as chamadas das ferramentas locais como caixas pretas inofensivas, continuaremos nos surpreendendo com vazamentos que nunca passaram pelo controle de versão.
CTO e arquiteto full stack especializado em Ruby on Rails, Vue.js, sistemas multi-tenant e infraestrutura distribuída.