| Versao | Suporte de seguranca |
|---|---|
main (MVP) |
Ativa |
| branches de trabalho | Em desenvolvimento |
Nao abra uma Issue publica para reportar vulnerabilidades.
Se voce encontrou uma falha de seguranca neste projeto, entre em contato de forma privada:
- Abra um GitHub Security Advisory na aba Security do repositorio.
- Ou envie mensagem direta para o mantenedor principal: @renanfulas.
- Descricao clara da vulnerabilidade.
- Passos para reproduzir.
- Impacto potencial.
- Sugestao de correcao, se tiver.
- Confirmacao de recebimento em ate 48 horas.
- Avaliacao de severidade em ate 5 dias uteis.
- Correcao publicada em ate 30 dias para severidade alta ou critica, quando confirmada.
Este repositorio cobre:
- API FastAPI (
app/). - Pipeline RAG e ingestao (
app/ingestion/,app/retrieval/). - Configuracao de dominios (
domains/). - Scripts operacionais (
scripts/). - Integracoes planejadas ou em evolucao documentadas no repositorio.
O repositorio passa a ter GitHub Actions para CI e checks basicos de seguranca:
.github/workflows/ci.ymlroda em pull requests e pushes paramain, compilaapp,testsescripts, e executapytest..github/workflows/security.ymlroda em pull requests, pushes paramaine semanalmente, com Gitleaks para secrets epip-auditpara dependencias Python.
Essas verificacoes reduzem risco, mas nao substituem revisao humana, rotacao de credenciais quando necessario, nem hardening do ambiente de producao.
- Chaves de API, senhas, tokens e dados sensiveis nao devem ser commitados.
- O arquivo
.envdeve permanecer fora do versionamento. - Pull Requests para
maindevem ser revisados antes do merge. - Mudancas que afetem dados sensiveis, logs, credenciais, LLM, RAG ou integracoes externas devem explicar riscos e validacoes na PR.
O bot conversacional de WhatsApp roda por uma ponte nao-oficial (bridge Baileys do
Hermes) com forward do inbound para POST /integrations/hermes/chat/webhook.
- Webhook interno protegido por HMAC (
HERMES_CHAT_FORWARD_SECRET) + janela de replay de 300s e limite de corpo (256 KB). - Protecao de replay: assinaturas ja vistas dentro da janela de frescor sao
rejeitadas (
HermesReplayGuard, HTTP 409), fechando o replay verbatim sem depender de mudar o contrato de assinatura do bridge. - Rejeicao precoce por
Content-Lengthantes de bufferizar o corpo inteiro na memoria (a checagem pos-leitura continua como defesa contra header mentiroso). - Limite por mensagem de 4 KB de texto antes do LLM, para conter custo de token e prompt-stuffing mesmo dentro do envelope de 256 KB.
- Clientes HTTP do Hermes (OTP e bridge) nao seguem redirects (
allow_redirects=False): um gateway/bridge comprometido nao consegue desviar a chamada para um host interno (SSRF). - Webhook rejeita (404) qualquer requisicao com header de proxy
(
X-Forwarded-For/X-Real-IP/X-Forwarded-Host): so o bridge local alcanca. - nginx tambem nega publicamente
^~ /integrations/e^~ /internal/(defesa em profundidade; o bridge usa127.0.0.1:8000direto, sem passar pelo nginx). - Segredo do forward de chat segregado do segredo de OTP (
HERMES_WEBHOOK_SECRET). - Cap de mensagens por requisicao e rate limit por numero
(
WHATSAPP_CHAT_RATE_LIMIT_PER_MINUTE, padrao 20) para conter custo e ban. - Logs do canal sem PII: apenas
request_id, contadores e hashes.
- Rotacionar a senha root da VPS (foi exposta em canal de chat operacional).
- Revisar/remover chaves SSH operacionais temporarias quando nao forem mais
necessarias (ex.:
claude-code-supportfaq-vps). - Assinar o
X-Webhook-Timestampdentro do HMAC do forward (hoje a assinatura cobre so o body). Reduz replay de forma definitiva, mas exige rollout coordenado com o dono do bridge (Alexandre) por ser uma mudanca no contrato de wire; ate la, oHermesReplayGuardcobre o replay verbatim no processo local. - Persistir o guard de replay fora do processo (hoje e best-effort por worker) caso o canal escale horizontalmente.
- Teto global de custo/volume no canal (o rate limit atual e por numero; uma multidao de numeros distintos nao e capada).
- Paridade do rate limit no transporte Meta quando o canal Meta for ativado.
O webhook do Meta (/integrations/meta/whatsapp/webhook) e chamado externamente
pelos servidores da Meta. Como o nginx hoje nega ^~ /integrations/ publicamente,
ao ativar o Meta sera necessario abrir uma excecao apenas para esse path (o Hermes
nao precisa, pois e localhost direto). A escala publica de verdade deve migrar do
bridge nao-oficial para a Meta WhatsApp Cloud API para reduzir risco de banimento.
Agradecemos a qualquer pessoa que reporte vulnerabilidades de forma responsavel. Contribuidores de seguranca podem ser reconhecidos com permissao.
supportFAQagent - Open Source patrocinado por HostGator Mantenedor: Renan Junior | Comunidade: Alexandre Madeira, Juliano Barreto, Silotto