Protegendo nossa base de código com agentes autônomos
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.


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:
-
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.
-
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.
-
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.

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.

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.