Claude auditou seu Código-Fonte, aqui estão as descobertas resumidas
Com base na análise profunda da base de código de 2.200 arquivos em todas as quatro dimensões:
🔴 Vulnerabilidades de Segurança
1. Injeção de Comando do Windows (windowsPaths.ts)
A função checkPathExists() constrói um comando de shell interpolando diretamente uma string de caminho controlada pelo usuário:
execSync_DEPRECATED(`dir "${path}"`, { stdio: 'pipe' })
Um caminho contendo " ou metacaracteres de shell (por exemplo, C:\foo" & evil) poderia sair do contexto entre aspas duplas e executar comandos arbitrários. Baixa explorabilidade na prática (função de utilidade interna), mas ainda assim inseguro.
2. Sem Guarda SSRF para IP Privado/Localhost em WebFetchTool
isValidUrl() verifica se o nome do host tem pelo menos duas partes separadas por pontos — mas não bloqueia localhost, 127.0.0.1, 192.168.*, 169.254.* ou outros endereços RFC-1918/link-local. A verificação da lista de bloqueio de domínio (checkDomainBlocklist) delega a api.anthropic.com/api/web/domain_info, o que significa que SSRF para hosts internos/privados depende inteiramente dessa API externa recusar corretamente. Um erro de rede retorna check_failed que pode ser tratado suavemente. Nenhuma verificação de IP local de defesa em profundidade existe.
3. JWT Decodificado Sem Verificação de Assinatura (jwtUtils.ts)
decodeJwtPayload() remove explicitamente o prefixo sk-ant-si- e decodifica a carga útil do JWT sem verificar a assinatura. Usado para agendar a atualização do token (leitura de expiração). Se um atacante puder substituir um token elaborado, ele poderá manipular o tempo de atualização. Baixo impacto, dado que os tokens são recebidos de infraestrutura confiável da Anthropic, mas a ausência de verificação vale a pena notar.
🟠 Manipulação de Chave/Segredo da API
4. Token de Entrada de Sessão Armazenado na Memória em Múltiplos Locais
Os valores do session_ingress_token são passados como strings simples e armazenados em sessionIngressTokens (um Map) em bridgeMain.ts. Os tokens aparecem nos logs de depuração com redacção de prefixo (token.slice(0, 15)…) — mas a redacção de logs é manual e aplicada de forma inconsistente. Qualquer mudança futura de log pode inadvertidamente expor tokens completos.
5. CLAUDE_CODE_CLIENT_KEY e CLAUDE_CODE_CLIENT_KEY_PASSPHRASE no Ambiente
Essas variáveis de ambiente sensíveis existem como opções de configuração documentadas. Se aparecerem em listagens de processo, /proc/self/environ, ou forem capturadas por ferramentas, estão expostas. Há uma verificação de segurança validateProcEnvironAccess em BashTool que bloqueia leituras de /proc/*/environ — bom — mas isso se aplica apenas a comandos bash emitidos pelo Claude, não a inspeções de processos arbitrários.
6. Sem Zeragem Explícita de Segredos
Segredos decodificados de decodeWorkSecret() e tokens armazenados no bridge nunca são explicitamente zerados/nulos após o uso. Em JavaScript, isso é em grande parte uma preocupação do GC V8, mas segredos podem permanecer na memória heap e aparecer em dumps de falhas.
🟡 Privacidade de Dados / Telemetria
7. Telemetria Opt-Out Não É Padrão
Análises estão ativas por padrão e requerem configuração explícita de variável de ambiente (DISABLE_TELEMETRY=1 ou CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1). Eventos são roteados tanto para Datadog quanto para o registro de eventos 1P da Anthropic. O tipo de marcador AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS é um tipo nunca — o que significa que não pode realmente impedir que metadados de string sejam registrados; é imposto por convenção e revisão de código, não pelo sistema de tipos.
8. Compartilhamento de Transcrição em Feedback
submitTranscriptShare.ts envia o histórico completo da conversa (mensagens normalizadas + transcrição JSONL bruta + transcrições de subagentes) para a Anthropic em feedback de pesquisa, incluindo uma chamada redactSensitiveInfo() cujo escopo não está claro. Isso acontece em gatilhos de feedback negativos E positivos. Os usuários podem não entender completamente que o conteúdo da transcrição está sendo enviado.
9. Campos PII PROTO Vão para Registro 1P
O padrão de chave PROTO* roteia valores marcados como PII para uma "coluna privilegiada" no BigQuery com controles de acesso restritos. O design é sólido, mas depende inteiramente de stripProtoFields() do sink.ts ser chamado antes de cada sink que não seja 1P. Uma única chamada perdida rotearia PII não redigido para um backend de acesso geral.
🔵 Qualidade do Código / Arquitetura
10. Uso Pesado de API Depreciada
177 locais de chamada referenciam funções com sufixo DEPRECATED (principalmente execSyncDEPRECATED, splitCommand_DEPRECATED). A substituição principal (caminho da AST do tree-sitter) está bloqueada por disponibilidade — o caminho regex depreciado permanece como a opção de fallback para todas as verificações de segurança. Essa complexidade de caminho duplo é um risco de manutenção a longo prazo.
11. 663 Blocos catch {} Vazios
Um grande número de padrões de absorção de erros existe em todo o sistema. Muitos são intencionais (operações de melhor esforço, como gravações em cache), mas outros ocultam falhas significativas silenciosamente. Notável: o catch do checkDomainBlocklist retorna check_failed com o erro, o que é bom — mas muitos chamadores tratam check_failed de forma leniente.
12. 940 Chamadas void Fire-and-Forget
O uso generalizado de asyncFunction() void significa que muitas falhas assíncronas são silenciosamente descartadas. Análises, gravações de telemetria e algumas operações de sessão usam todos esse padrão.
13. 142 Comentários TODO/FIXME/HACK
Indica uma dívida técnica significativa, embora alguns estejam anotados com segurança (uma análise de ataque bem documentada em bashSecurity.ts é na verdade um ponto positivo).
14. bashSecurity.ts é Excelente, mas Frágil em Regex
O código de validação de segurança do shell é excepcionalmente detalhado — cobrindo injeção de IFS, espaços em branco Unicode, diferenciais de retorno de carro, expansão de chaves, contornos específicos do Zsh, etc. No entanto, o caminho regex _DEPRECATED (usado quando o tree-sitter não está disponível) é inerentemente frágil. A equipe documentou mais de 20 classes de bypass conhecidas; provavelmente há casos de extremidade não descobertos.
Tabela Resumo
Aqui está uma versão limpa reescrita sem qualquer formatação de tabela:
Resumo
Segurança — 🔴 Alto: Vulnerabilidade de injeção no diretório do Windows "${path}"
Segurança — 🔴 Alto: Sem proteção contra localhost/endereço IP privado SSRF
Segurança — 🟠 Médio: JWT é decodificado sem verificar sua assinatura
Segredos — 🟠 Médio: Tokens de entrada expostos na memória/logs
Segredos — 🟠 Médio: Chave do cliente e frase secreta armazenadas via variáveis de ambiente
Segredos — 🟡 Baixo: Sem zeragem de memória para dados sensíveis
Privacidade — 🟠 Médio: Telemetria não é opt-out por padrão
Privacidade — 🟠 Médio: Feedback pode acionar uploads de transcrição implícitos
Privacidade — 🟡 Baixo: O tratamento de PII depende de uma única chamada stripProtoFields
Qualidade — 🟠 Médio: 177 locais de chamada de funções depreciadas
Qualidade — 🟡 Baixo: 663 blocos de catch vazios
Qualidade — 🟡 Baixo: 940 chamadas assíncronas fire-and-forget
Qualidade — 🟡 Baixo: 142 itens TODO/FIXME
Qualidade — 🟡 Baixo: Uso frágil de regex em caminhos sensíveis à segurança
https://t.co/jBiMoOzt8G