Este checklist guia o processo de análise de segurança em uma aplicação Node.js e JavaScript, combinando revisão de código e testes de penetração whitebox. Use-o para rastrear o progresso e garantir a cobertura completa.
O objetivo é entender o design da aplicação e identificar os pontos de maior risco antes de mergulhar no código.
- 1.1. Mapeamento de Componentes:
- Identificar todos os serviços (backend Node.js, frontend SPA - React/Vue/Angular, etc.).
- Listar bancos de dados (SQL, NoSQL), sistemas de cache (Redis, Memcached) e filas de mensagens (RabbitMQ, SQS).
- Mapear integrações externas (APIs de terceiros, gateways de pagamento, serviços de autenticação).
- 1.2. Análise de Fluxo de Dados:
- Documentar como dados sensíveis (credenciais, PII, dados financeiros) fluem entre os componentes.
- Criar ou revisar Diagramas de Fluxo de Dados (DFDs) para os principais casos de uso.
- 1.3. Modelagem de Ameaças (Threat Modeling):
- Identificar as principais ameaças para a arquitetura (ex: acesso não autorizado a APIs internas, vazamento de dados da fila).
- Priorizar os riscos com base no impacto e probabilidade.
- 1.4. Revisão de Configuração Arquitetural:
- Analisar como a aplicação é implantada (contêineres, serverless, VM).
- Verificar controles de segurança existentes (WAF, IPS) e decidir se serão desativados durante o teste para focar na aplicação.
Enumerar todas as superfícies de ataque da aplicação.
- 2.1. Enumeração de Endpoints:
- Extrair todas as rotas da API a partir do código (ex: arquivos de rotas do Express.js ou Koa).
- Utilizar um proxy (ex: Burp Suite, OWASP ZAP) para navegar na aplicação e confirmar os endpoints descobertos.
- Listar todos os parâmetros de entrada (query, body, headers, cookies) para cada endpoint.
- 2.2. Mapeamento de Funcionalidades e Acesso:
- Identificar funcionalidades críticas (autenticação, gestão de perfil, transações, uploads).
- Mapear os diferentes níveis de acesso (usuário anônimo, usuário autenticado, administrador).
- Documentar fluxos de múltiplos passos (ex: recuperação de senha, checkout de compra).
Revisão do código-fonte com foco em vulnerabilidades, combinando automação e análise manual.
- 3.1. Varredura Automatizada Inicial (SAST):
- Executar CodeQL: Configurar e rodar a análise do CodeQL para uma varredura profunda de fluxo de dados.
# Exemplo de comando para preparar e analisar com CodeQL codeql database create --language=javascript --source-root . db codeql database analyze codeql_db --format=sarif-latest --output=codeql_results.sarif
- Executar Semgrep: Rodar o Semgrep com o conjunto de regras para JavaScript/TypeScript e segurança.
semgrep --config "p/javascript" --config "p/expressjs" --config "p/node" .
- Executar CodeQL: Configurar e rodar a análise do CodeQL para uma varredura profunda de fluxo de dados.
- 3.2. Revisão Manual Guiada (Foco nos pontos críticos):
- Validação de Entradas (Prevenção de Injeção):
- Revisar como os dados de entrada são usados em queries de banco de dados (risco de SQL/NoSQL Injection).
- Verificar o uso de dados em comandos do sistema operacional (risco de Command Injection).
- Prevenção de Cross-Site Scripting (XSS):
- Analisar como os dados são renderizados no frontend. Procurar por
innerHTML,dangerouslySetInnerHTMLetc. - Garantir que a sanitização e o escaping de saída estão sendo aplicados corretamente.
- Analisar como os dados são renderizados no frontend. Procurar por
- Controle de Acesso:
- Verificar se cada endpoint sensível possui um middleware de autorização.
- Procurar por falhas de Referência Insegura a Objetos (IDOR) onde um usuário pode acessar/modificar dados de outro apenas alterando um ID.
- Autenticação e Gestão de Sessão:
- Revisar o processo de login (proteção contra brute force, enumeração de usuários).
- Analisar o armazenamento de senhas (uso de
bcryptouargon2com salt). - Inspecionar a implementação de JWT (validação de assinatura, algoritmo, expiração).
- Exposição de Dados Sensíveis:
- Procurar por dados sensíveis em logs (
console.log). - Verificar se as mensagens de erro não expõem detalhes da implementação (stack traces).
- Procurar por dados sensíveis em logs (
- Vulnerabilidades Específicas de Node.js:
- Investigar a manipulação de objetos em busca de riscos de Prototype Pollution.
- Revisar o uso de
eval(),setTimeout()enew Function()com entradas do usuário. - Analisar o tratamento de eventos e callbacks para evitar condições de corrida ou lógica insegura.
- Validação de Entradas (Prevenção de Injeção):
Testar a aplicação em execução, usando o conhecimento do código para guiar os ataques.
- 4.1. Preparação do Ambiente:
- Configurar o proxy (Burp Suite / OWASP ZAP) para interceptar o tráfego da aplicação.
- Obter credenciais para os diferentes níveis de acesso.
- Nota: Temos o servidor Burp Suite MCP (Master-Collaborator-Proxy) disponível para testes colaborativos e para detectar interações fora da banda (out-of-band).
- 4.2. Execução dos Testes (baseado nos achados da Fase 3):
- Testar Injeções: Tentar explorar ativamente os pontos de injeção identificados no código.
- Testar XSS: Injetar payloads de XSS nos campos suspeitos e verificar a execução no navegador.
- Testar Quebras de Controle de Acesso:
- Como usuário A, tentar acessar recursos do usuário B (IDOR).
- Como usuário comum, tentar acessar endpoints de administrador.
- Explorar Lógica de Negócio: Tentar subverter fluxos de negócio (ex: pular uma etapa de pagamento, aplicar um cupom mais de uma vez).
- Fuzzing: Utilizar o Intruder (Burp) ou Fuzzers (ffuf, wfuzz) para enviar dados inesperados aos endpoints e observar falhas.
- Testar o JWT: Manipular tokens (alterar payload, tentar
alg:none) usando extensões como o JWT Editor.
Identificar vulnerabilidades em componentes de terceiros e segredos hardcoded.
- 5.1. Análise de Composição de Software (SCA):
- Executar
npm auditouyarn auditpara encontrar dependências com vulnerabilidades conhecidas. - (Opcional) Usar o OWASP Dependency-Check para um relatório mais detalhado.
- Executar
- 5.2. Varredura de Segredos:
- Rodar o Gitleaks ou TruffleHog no repositório para encontrar chaves de API, senhas ou outros segredos no código e no histórico do Git.
gitleaks detect --source . -v
- Rodar o Gitleaks ou TruffleHog no repositório para encontrar chaves de API, senhas ou outros segredos no código e no histórico do Git.
Documentar todos os achados de forma clara e acionável.
- 6.1. Coletar Evidências: Tirar screenshots, salvar requisições/respostas HTTP e snippets de código para cada vulnerabilidade encontrada.
- 6.2. Preencher o Relatório: Usar o template
report_template.mdpara documentar cada achado com descrição, impacto, PoC e recomendação. - 6.3. Revisar o Relatório: Garantir que o relatório seja claro, preciso e útil para a equipe de desenvolvimento.
- 6.4. Apresentar os Resultados: Agendar uma reunião para discutir os achados com os stakeholders.