Visão Geral das Proteções
Autenticação e Autorização
O ChatCLI suporta dois modelos de autenticação: JWT (recomendado para produção) e Bearer Token legado (para desenvolvimento e compatibilidade).Autenticação JWT
O JWT (JSON Web Token) fornece autenticação stateless com claims estruturados. O ChatCLI validaiss (issuer), aud (audience), exp (expiração) e o claim customizado role para autorização.
- Configuração JWT
- Gerar Token JWT
- Token Legado
RBAC — Controle de Acesso Baseado em Roles
O claimrole no JWT determina as permissões do usuário. O sistema segue o princípio do menor privilégio.
Rate Limiting de Autenticação
Tentativas de autenticação falhadas são limitadas a 5 por minuto por IP. Após exceder o limite, o IP recebe429 Too Many Requests com backoff progressivo.
OAuth PKCE + Device Flow
Para autenticação com provedores externos (Anthropic, GitHub, Google), o ChatCLI implementa:- PKCE (Proof Key for Code Exchange): Previne interceptação do authorization code
- Device Flow: Para ambientes sem browser (SSH, containers, CI/CD)
Criptografia e Proteção de Dados
AES-256-GCM para Credenciais
Todas as credenciais OAuth e tokens são armazenados com criptografia AES-256-GCM (Galois/Counter Mode), que fornece tanto confidencialidade quanto autenticidade dos dados.Criptografia de Sessão em Repouso
Os dados de sessão são criptografados antes de gravar em disco usando uma chave derivada via HKDF (HMAC-based Key Derivation Function) a partir da chave mestre.TLS 1.3 para gRPC
Em produção, o servidor gRPC exige TLS 1.3 com cipher suites fortes.kubectl logs mesmo que o logger estruturado não consiga fazer flush antes do crash.Redação de Variáveis de Ambiente
O ChatCLI detecta e redacta automaticamente variáveis de ambiente sensíveis antes de exibir ou enviar ao LLM.- Modo Strict
- Modo Permissive
Redação do Histórico de Conversas
O histórico de conversas passa por redação automática antes de ser persistido. Padrões detectados incluem:- API keys (formato
sk-...,pk_...,ghp_...) - Tokens JWT (formato
eyJ...) - Connection strings com credenciais
- IPs privados em contextos sensíveis
- Números de cartão de crédito (Luhn validation)
Integração com OS Keychain
Quando disponível, o ChatCLI armazena a chave mestre no keychain do sistema operacional em vez do arquivo.auth-key.
Segurança do Modo Agente
O modo agente permite que a IA execute comandos no seu sistema. O ChatCLI implementa múltiplas camadas de proteção para garantir que apenas operações seguras sejam executadas.Allowlist de Comandos
O sistema mantém uma allowlist com 150+ comandos organizados em 8 categorias. Apenas comandos nesta lista são permitidos sem confirmação do usuário.Leitura e Busca de Conteúdo (20+ comandos)
Leitura e Busca de Conteúdo (20+ comandos)
Git e Controle de Versão (25+ comandos)
Git e Controle de Versão (25+ comandos)
Desenvolvimento e Build (20+ comandos)
Desenvolvimento e Build (20+ comandos)
Informações do Sistema (15+ comandos)
Informações do Sistema (15+ comandos)
Rede (diagnóstico somente) (15+ comandos)
Rede (diagnóstico somente) (15+ comandos)
Containers e Kubernetes (20+ comandos)
Containers e Kubernetes (20+ comandos)
Editores e Ferramentas (15+ comandos)
Editores e Ferramentas (15+ comandos)
Modo Strict vs Permissive
- Strict (Padrão)
- Permissive
- Apenas comandos da allowlist executam sem confirmação
- Qualquer comando fora da lista requer aprovação explícita do usuário
- Recomendado para produção e ambientes compartilhados
Bloqueio de Caminhos Sensíveis
O agente não pode ler arquivos em caminhos considerados sensíveis, independentemente da allowlist:Shell Config Sourcing
Por padrão, o agente não carrega arquivos de configuração do shell (.bashrc, .zshrc). Isso previne execução de código arbitrário que possa existir nesses arquivos.
Input guard — proteção contra typeahead em prompts de segurança
Quando uma security box aparece (modo coder/agent), três camadas defendem contra digitação acidental ser consumida como resposta y/n:- Flush kernel TTY —
TCIFLUSH(Linux) /TIOCFLUSH(BSD/Darwin) /FlushConsoleInputBuffer(Windows) descarta bytes na fila do kernel antes de renderizar a box. - Drain channel — esvazia o canal centralizado de stdin não-bloqueante (buffer de 10 linhas que o reader goroutine usa).
- Intent debounce — descarta qualquer input que chegue nos primeiros 250ms após a box ser desenhada (a janela de reação humana mínima).
stty sane no /dev/tty controlador para recuperar de um teardown anterior do go-prompt que possa ter deixado o terminal em raw mode (echo off). Sem esse reset, você digita e não vê os caracteres na tela — embora o kernel esteja capturando.
Sanitização de Saída de Comandos
A saída de todos os comandos executados passa por um sanitizador que detecta tentativas de prompt injection:Segurança de Plugins
O sistema de plugins do ChatCLI usa assinatura criptográfica Ed25519 para garantir integridade e autenticidade.Verificação Ed25519
Cada plugin deve ser assinado com uma chave Ed25519. Na instalação, o ChatCLI verifica:- A assinatura é válida contra a chave pública do autor
- O hash SHA-256 do binário confere com o manifesto
- O manifesto não foi alterado (assinatura cobre o manifesto inteiro)
Sistema de Quarentena
Plugins não verificados são colocados em quarentena — um diretório isolado onde não podem ser executados:Permissões de Arquivo
Permitir Plugins Não Assinados
Como Assinar um Plugin
Gerar par de chaves Ed25519
Criar o manifesto do plugin
Calcular o checksum do binário
Assinar o manifesto
Distribuir o plugin
- O binário do plugin
manifest.jsonmanifest.json.sigplugin-signing.pub(chave pública)
Instalar e verificar
Segurança do Servidor gRPC
Prevenção de SSRF
O servidor gRPC inclui proteção contra Server-Side Request Forgery (SSRF). Todas as URLs processadas passam por validação antes de serem acessadas. CIDRs bloqueados:Rate Limiting por Cliente
O servidor implementa rate limiting com token bucket por cliente, identificado pelo IP de origem.Limites de Mensagem gRPC
Interceptor de Validação de Campos
Todas as requisições gRPC passam por um interceptor que valida:- Tamanho máximo de strings (previne DoS por payload)
- Caracteres permitidos em identificadores
- Formato de UUIDs de sessão
- Ranges de valores numéricos
Bind Address
gRPC Reflection
O gRPC reflection está desabilitado por padrão. Quando habilitado, expõe o schema completo do serviço, facilitando reconhecimento por atacantes.Audit Logging Estruturado
Todas as operações do servidor são registradas em formato JSON Lines para integração com sistemas de SIEM.Segurança do Operator Kubernetes
O operator Kubernetes do ChatCLI implementa proteções específicas para o ambiente cloud-native.Autenticação Fail-Closed
A API REST do operator usa autenticação fail-closed: se o middleware de autenticação falhar por qualquer motivo (erro interno, timeout, configuração inválida), a requisição é recusada. Nenhuma requisição passa sem validação explícita.- Secret
chatcli-operator-secrets(prioridade) — campoapi-keyscom lista YAML de entradas{key, role, description} - ConfigMap
chatcli-operator-config(fallback) — mesmo campoapi-keys - Rejeita a requisição (ou aceita em dev-mode se
CHATCLI_OPERATOR_DEV_MODE=true)
Allowlist de Tipos de Recursos
O operator só pode remediar um conjunto restrito de recursos Kubernetes. Isso previne que a IA modifique recursos críticos do cluster.- 17 Tipos Seguros (Permitidos)
- 18 Tipos Perigosos (Bloqueados)
Log Scrubbing (18 Padrões)
Antes de enviar logs ao LLM para análise, o operator remove informações sensíveis usando 18 padrões de sanitização:CORS Deny-All
O operator responde com headers CORS que negam todas as origens por padrão:CHATCLI_OPERATOR_CORS_ORIGINS.RBAC Least-Privilege
O Helm chart cria Role e RoleBinding (namespace-scoped) por padrão:NetworkPolicy
O chart inclui uma NetworkPolicy restritiva:Admission Webhook
O operator inclui um ValidatingWebhookConfiguration que intercepta criação e atualização de recursos ChatCLI customizados, validando:- Schema dos CRDs
- Limites de recursos
- Referências a secrets existentes
- Nomes de namespace válidos
Structured Audit Logging
Todas as ações de remediação são logadas em formato estruturado:Segurança de CI/CD
O pipeline de CI/CD do ChatCLI inclui verificações automáticas de segurança em cada pull request e release.govulncheck
gosec
crypto/md5, hardcoded credentials, e mais.Dependabot
Cosign
API Key Masking em Workflows
Todos os secrets usados nos workflows do GitHub Actions são mascarados automaticamente nos logs. Além disso, o ChatCLI implementa masking adicional para prevenir vazamento acidental de chaves em outputs de testes.Referência de Variáveis de Segurança
Tabela completa de todas as variáveis de ambiente relacionadas à segurança do ChatCLI:Autenticação e Autorização
Criptografia e TLS
Redação e Proteção de Dados
Modo Agente
Plugins
Servidor gRPC
SSRF e Rede
Operator Kubernetes
CI/CD e Verificação
Boas Práticas para Produção
Configure autenticação JWT com roles
Habilite TLS 1.3 com certificados válidos
Use modo strict para o agente
Configure audit logging para SIEM
Habilite redação em modo strict
Mantenha gRPC reflection e CORS desabilitados
CHATCLI_GRPC_REFLECTION=true nem CHATCLI_OPERATOR_CORS_ORIGINS em produção, a menos que estritamente necessário.Exija assinatura de plugins
Use RBAC namespace-scoped no Kubernetes
Configure resource limits
Verifique imagens com Cosign
Mantenha dependências atualizadas
Monitore o audit log