Protegendo nossa base de código com agentes autônomos

por Travis McPeak em Produto

Nos últimos nove meses, nosso ritmo de PRs aumentou 5x. Ferramentas de segurança baseadas em análise estática ou em regras rígidas de propriedade do código continuam úteis, mas não são suficientes nessa escala. Nós nos adaptamos usando Cursor Automations, o que nos permitiu criar rapidamente uma frota de agentes de segurança que encontram e corrigem continuamente vulnerabilidades em nossa base de código.

Agentes de segurança estão revisando mais de 3.000 PRs internos por semana, identificando mais de 200 vulnerabilidadesAgentes de segurança estão revisando mais de 3.000 PRs internos por semana, identificando mais de 200 vulnerabilidades

Hoje, estamos lançando quatro novos templates de automação com os blueprints exatos dos agentes de segurança que consideramos mais úteis. Outras equipes de segurança podem personalizar esses templates para desenvolver agentes que resolvem automaticamente uma ampla variedade de problemas de segurança.

A arquitetura das automações

Para que os agentes sejam úteis para a segurança, eles precisam de dois recursos, ambos fornecidos pelo Cursor Automations.

O primeiro são integrações prontas para uso para receber webhooks, responder a pull requests do GitHub e monitorar alterações na base de código. Isso permite que agentes que operam em segundo plano saibam quando devem entrar em cena e agir.

O segundo é um ambiente e uma infraestrutura de agente robustos. As automações são viabilizadas por agentes na nuvem, o que lhes dá acesso a todas as ferramentas, habilidades e recursos de observabilidade disponíveis para esses agentes.

Para tornar as automações mais poderosas para casos de uso específicos de segurança, desenvolvemos uma ferramenta MCP de segurança e a implementamos como uma função Lambda sem servidor, disponível just-in-time quando necessário, sem permanecer em execução fora desses momentos.

O MCP, cujo código de referência está disponível aqui, tem três finalidades:

  1. Dados persistentes. O agente usa o MCP para armazenar dados, para que possamos acompanhar e medir o impacto de segurança ao longo do tempo. Usamos esses dados para refinar continuamente quando e como acionamos as automações.

  2. Deduplicação. Executamos vários agentes de revisão em cada alteração e, como seus achados são gerados por um LLM, agentes diferentes podem acabar usando palavras diferentes para descrever o mesmo problema subjacente. Para evitar trabalho duplicado, o MCP permite que o agente implemente um classificador viabilizado pelo Gemini Flash 2.5 que determina quando dois achados semanticamente distintos descrevem o mesmo problema.

  3. Saída consistente. Os agentes reportam cada vulnerabilidade que encontram por meio do MCP, que envia mensagens do Slack em formato consistente e cuida de ações adicionais, como descartar ou adiar um achado.

Com essa base estabelecida, as quatro automações de segurança detalhadas abaixo adicionam seus próprios fluxos de trabalho e sua própria lógica de acionamento. Usamos Terraform para garantir que todas as alterações nas ferramentas de segurança passem por um processo padrão de revisão e implantação.

Revisão de Segurança Agêntica

Internamente, já estávamos usando o Bugbot para revisar PRs quanto à qualidade do código e a problemas gerais, incluindo alguns achados de segurança. Mas uma ferramenta de revisão de uso geral não é ideal para segurança, porque não pode ser ajustada por prompt ao nosso modelo de ameaças específico e porque precisávamos da capacidade de bloquear a CI especificamente por achados de segurança, sem bloquear por qualquer problema geral de qualidade do código.

Diante disso, desenvolvemos uma automação dedicada que chamamos de Revisão de Segurança Agêntica. Inicialmente, configuramos essa automação para encaminhar seus achados a um canal privado no Slack monitorado pela nossa equipe de segurança.

Canal privado no Slack mostrando achados de segurança da Revisão de Segurança Agêntica
A Revisão de Segurança Agêntica envia achados a um canal privado no Slack monitorado pela equipe de segurança.

Assim que tivemos confiança de que ela estava identificando problemas reais, ativamos comentários em PRs e, depois, implementamos uma checagem de bloqueio. Nos últimos dois meses, a Revisão de Segurança Agêntica foi executada em milhares de PRs e impediu que centenas de problemas chegassem à produção.

Vuln Hunter

Após o sucesso da Revisão de Segurança Agêntica no código novo, direcionamos agentes para a base de código existente. Vuln Hunter é uma automação que divide o código em segmentos lógicos e analisa cada um em busca de vulnerabilidades. Nossa equipe faz a triagem dos achados e geralmente os corrige, muitas vezes usando @Cursor no Slack para gerar PRs.

Anybump

Aplicar correções em dependências consome tanto tempo que a maioria das equipes de segurança acaba desistindo e repassando isso para a engenharia, onde fica parado nos backlogs. Criamos uma automação chamada Anybump que automatizou quase tudo isso.

Anybump executa análise de alcançabilidade para reduzir as vulnerabilidades àquelas que realmente têm impacto, depois rastreia os caminhos de código relevantes, executa testes, verifica se algo quebrou e abre uma PR quando os testes passam. Depois que a PR recebe merge, o pipeline de implantação canária do Cursor fornece uma barreira final de segurança antes que qualquer coisa chegue à produção.

PR do GitHub aberta pelo Anybump para corrigir uma dependência vulnerável
O Anybump abre PRs automaticamente para corrigir dependências vulneráveis depois que os testes passam.

Invariant Sentinel

Invariant Sentinel é executado diariamente para monitorar desvios em relação a um conjunto de propriedades de segurança e conformidade. Ele divide o repositório em segmentos lógicos e aciona subagentes para validar o código com base em uma lista de invariantes.

Após a análise, o agente compara o estado atual com execuções anteriores usando o recurso de memória das automações. Se detectar desvios, ele revalida para garantir a correção, depois atualiza sua memória e envia um relatório no Slack para a equipe de segurança com uma descrição da alteração e trechos específicos do código como evidência.

Como essa automação é executada em um ambiente de desenvolvimento completo, o agente pode escrever e executar código para validar suas próprias suposições, complementando os testes funcionais, unitários e de integração tradicionais.

Mais automações estão por vir

A segurança oferece muitas oportunidades para aplicar automações, e essas quatro são apenas o começo do trabalho que planejamos fazer. Já estamos expandindo essas automações para abranger o recebimento de relatórios de vulnerabilidade, o monitoramento da conformidade com requisitos de privacidade, a triagem de alertas de plantão e o provisionamento de acesso.

Em cada caso, os agentes nos proporcionam cobertura e consistência em uma escala que não conseguiríamos alcançar manualmente.

Protegendo nossa base de código com agentes autônomos · Cursor