Dashboard-Automatizase/docs/qa/assessments/1.3-risk-20251005.md
Luis Erlacher 0152a2fda0 feat: add n8n API testing script for Google OAuth2 schema and existing credentials
- Implemented a bash script to test n8n API and retrieve credential schemas.
- Added types for API responses, Google Calendar, and WhatsApp instances.
- Configured Vitest for testing with React and added setup for testing-library.
2025-10-10 14:29:02 -03:00

11 KiB
Raw Blame History

Risk Profile - Story 1.3: Implementar Página de Login

Generated by: Quinn (Test Architect) Review Date: 2025-10-05 Story: 1.3 - Implementar Página de Login Epic: Epic 1 - Foundation & Authentication Priority: P0 (Critical)


Executive Summary

Overall Risk Level: MEDIUM-HIGH ⚠️

A Story 1.3 implementa funcionalidade crítica de autenticação com boa qualidade de código e arquitetura sólida, mas apresenta riscos significativos devido à:

  1. Ausência total de testes automatizados (Probabilidade: ALTA, Impacto: CRÍTICO)
  2. Falta de rate limiting (Probabilidade: ALTA em produção, Impacto: ALTO)
  3. Bug crítico corrigido durante QA (AC6 - redirecionamento incorreto)

Recomendação: Aprovar com WAIVER e criar stories de follow-up prioritárias para testes e rate limiting.


Risk Assessment Matrix

Risk ID Categoria Descrição Probabilidade Impacto Score Prioridade
R-001 Testing Ausência de testes automatizados para funcionalidade de autenticação ALTA (90%) CRÍTICO 9/10 P0
R-002 Security Sem rate limiting - brute force vulnerability ALTA (80%) ALTO 8/10 P0
R-003 Bug Redirecionamento incorreto AC6 ( CORRIGIDO) N/A CRÍTICO 0/10 RESOLVIDO
R-004 Architecture Cliente Supabase não-SSR em client component MÉDIA (40%) MÉDIO 4/10 P2
R-005 UX Mensagens de erro genéricas BAIXA (20%) BAIXO 2/10 P3

Score Calculation: Probabilidade (0-1) × Impacto (1-10) × 10


Detailed Risk Analysis

🔴 R-001: Ausência de Testes Automatizados (Score: 9/10)

Categoria: Testing / Reliability Status: ABERTO Probabilidade: ALTA (90%) - Mudanças futuras sem testes levarão a regressões Impacto: CRÍTICO (9/10) - Autenticação quebrada afeta toda a aplicação

Descrição: A Story 1.3 não inclui testes automatizados de nenhum tipo (unit, integration, E2E), violando a estratégia de testes definida no tech stack (Vitest + React Testing Library + Playwright). Funcionalidade crítica de autenticação sem cobertura de testes representa risco inaceitável para produção.

Evidências:

  • Zero arquivos *.test.ts ou *.spec.ts criados
  • Testing Checklist na story não foi executado
  • Tech stack define Vitest/Playwright mas não configurados
  • 9 ACs implementados sem validação automatizada

Cenários de Falha:

  1. Validação de email quebrada - Refatoração futura pode remover regex, permitindo emails inválidos
  2. Redirecionamento alterado - Mudança acidental pode quebrar fluxo pós-login
  3. Middleware bypassado - Mudança em matcher pode expor rotas protegidas
  4. Loading state removido - Múltiplos submits podem causar race conditions

Impacto de Negócio:

  • Usuários impossibilitados de acessar sistema (100% downtime)
  • Perda de confiança em segurança da plataforma
  • Custos de hotfix emergencial
  • Potencial exposição de dados se middleware falhar

Mitigação Recomendada:

  • P0 CRÍTICO: Configurar Vitest + React Testing Library (1-2 horas)
  • P0 CRÍTICO: Implementar unit tests para validações (1 hora)
  • P0 CRÍTICO: Implementar integration tests para middleware (1 hora)
  • P0 CRÍTICO: Implementar E2E tests para fluxo completo (2 horas)
  • Total Esforço Estimado: 4-6 horas

Decisão:

  • Bloquear story até testes serem implementados (Opção 2)
  • Aprovar com WAIVER e criar Story 1.3.1 "Implementar Testes de Login" (Opção 1 - recomendada)

🔴 R-002: Ausência de Rate Limiting (Score: 8/10)

Categoria: Security Status: ABERTO Probabilidade: ALTA (80%) - Atacantes podem executar brute force em produção Impacto: ALTO (8/10) - Comprometimento de contas de usuários

Descrição: Endpoint de login (/loginsupabase.auth.signInWithPassword) não possui rate limiting, permitindo tentativas ilimitadas de autenticação. Supabase Auth não fornece rate limiting nativo, exigindo implementação customizada.

Evidências:

  • app/login/page.tsx:34-39 - Chamada direta sem throttle
  • Supabase docs confirmam ausência de rate limiting built-in
  • Middleware não implementa contadores de tentativas
  • Sem integração com Redis ou serviço de rate limiting

Cenários de Ataque:

  1. Brute Force Simples: Atacante testa 1000 senhas/minuto até encontrar combinação válida
  2. Credential Stuffing: Atacante usa listas de credenciais vazadas para testar milhões de combinações
  3. Account Enumeration: Diferenças de tempo de resposta podem revelar emails válidos

Impacto de Negócio:

  • Contas de usuários comprometidas (roubo de dados, uso indevido)
  • Custos de infraestrutura elevados (milhões de requests)
  • Violação de compliance (LGPD, GDPR exigem proteção razoável)
  • Danos reputacionais se violação for divulgada

Mitigação Recomendada:

  • P1: Implementar Supabase Edge Function com rate limiting (Upstash Redis)
  • P1: Adicionar RLS triggers para bloquear IPs após X tentativas falhadas
  • P2: Implementar CAPTCHA após 3 tentativas falhadas (UX tradeoff)
  • P2: Adicionar logging de tentativas falhadas para monitoramento
  • Total Esforço Estimado: 2-3 horas

Decisão:

  • Implementar antes de marcar story como Done
  • Aprovar story e criar Story 1.3.2 "Implementar Rate Limiting" (recomendada)

R-003: Bug de Redirecionamento AC6 (Score: 0/10 - RESOLVIDO)

Categoria: Bug / Functional Status: CORRIGIDO DURANTE QA Probabilidade: N/A (já identificado e corrigido) Impacto Original: CRÍTICO (10/10) - Fluxo de login completamente quebrado

Descrição: Código original redirecionava para / após login bem-sucedido, em vez de /dashboard conforme especificado no AC6. Usuários autenticados não conseguiam acessar o dashboard.

Evidência de Correção:

- router.push("/")  // INCORRETO
+ router.push("/dashboard")  // CORRETO (AC6)

Arquivo: app/login/page.tsx:42 Corrigido por: Quinn (QA) Data: 2025-10-05 Validação: Build de produção passou após correção

Lições Aprendidas:

  • Falta de testes E2E permitiu que bug passasse despercebido
  • Code review manual (QA) detectou o problema
  • Reforça necessidade de testes automatizados (R-001)

🟡 R-004: Cliente Supabase Não-SSR (Score: 4/10)

Categoria: Architecture / Consistency Status: ABERTO Probabilidade: MÉDIA (40%) - Edge cases podem causar problemas de sessão Impacto: MÉDIO (4/10) - Inconsistências de sessão, não bloqueante

Descrição: Componente de login usa cliente Supabase básico (lib/supabase.ts com createClient), enquanto middleware usa corretamente createServerClient do @supabase/ssr. Inconsistência pode causar problemas de sincronização de sessão entre cliente e servidor.

Evidências:

  • app/login/page.tsx:5 - import { supabase } from "@/lib/supabase"
  • middleware.ts:9 - createServerClient (correto)
  • Supabase SSR docs recomendam createBrowserClient para client components

Cenários de Falha:

  • Sessão expirada no servidor mas ativa no cliente (ou vice-versa)
  • Cookies não sincronizados entre requests
  • Problemas em ambientes Edge Runtime (Cloudflare, Vercel Edge)

Mitigação Recomendada:

  • P2: Refatorar app/login/page.tsx para usar createBrowserClient
  • P2: Atualizar lib/supabase.ts para exportar clientes SSR-aware
  • Total Esforço Estimado: 30 minutos

Decisão:

  • Aprovar story e endereçar em próxima iteração (débito técnico aceitável)

🟢 R-005: Mensagens de Erro Genéricas (Score: 2/10)

Categoria: UX Status: ACEITO (Tradeoff Segurança vs UX) Probabilidade: BAIXA (20%) - Pode causar frustração de usuários Impacto: BAIXO (2/10) - UX degradada, mas não bloqueante

Descrição: Todas as falhas de autenticação exibem mensagem genérica "Credenciais inválidas", sem distinguir entre:

  • Email não existe
  • Senha incorreta
  • Conta desabilitada
  • Erro de rede temporário

Justificativa de Segurança: Mensagens genéricas são boa prática de segurança para prevenir account enumeration (atacante descobre quais emails existem no sistema).

Impacto de UX:

  • Usuário não sabe se problema é temporário ou permanente
  • Não há orientação para resolver o problema (ex: "esqueci minha senha")

Mitigação Recomendada:

  • P3: Considerar mensagens mais específicas apenas para erros de rede (timeout, offline)
  • P3: Adicionar dica "Esqueceu sua senha?" próximo à mensagem de erro
  • Decisão: Manter mensagens genéricas por enquanto (segurança > UX neste caso)

Risk Mitigation Strategy

Immediate Actions (Pré-Produção)

  1. P0 CRÍTICO - Implementar Testes (Story 1.3.1)

    • Configurar Vitest + React Testing Library + Playwright
    • Cobertura mínima: validações, middleware, fluxo E2E
    • Bloqueador para produção: SIM
  2. P1 - Implementar Rate Limiting (Story 1.3.2)

    • Supabase Edge Function com Upstash Redis
    • Limite: 5 tentativas/minuto por IP
    • Bloqueador para produção: SIM

Short-Term Actions (Próxima Sprint)

  1. P2 - Migrar Cliente Supabase SSR
    • Usar createBrowserClient em app/login/page.tsx
    • Bloqueador para produção: NÃO (débito técnico aceitável)

Long-Term Actions (Backlog)

  1. P3 - Melhorias de UX
    • Extrair hook useLogin reutilizável
    • Helper de validação compartilhado
    • Mensagens de erro contextuais (se não impactar segurança)

Decision Matrix

Cenário Recomendação Justificativa
Deploy MVP Interno (Testadores) APROVAR COM WAIVER Funcionalidade core implementada, bugs críticos corrigidos
Deploy Staging (Testes QA) APROVAR COM WAIVER + Story 1.3.1 (testes) Permite validação manual enquanto testes são desenvolvidos
Deploy Produção (Usuários Finais) BLOQUEAR até R-001 e R-002 Testes e rate limiting são OBRIGATÓRIOS para produção

Approval Signatures

QA Recommendation: APPROVE WITH WAIVER (Gate: CONCERNS)

Quinn (Test Architect) - 2025-10-05 Funcionalidade implementada corretamente após correção de bug crítico. Débitos técnicos (testes, rate limiting) devem ser endereçados antes de produção via stories de follow-up.


Next Actions for Story Owner (James):

  1. Decidir entre Opção 1 (WAIVER + follow-up stories) ou Opção 2 (implementar testes agora)
  2. Criar Story 1.3.1 "Implementar Testes de Login" (P0)
  3. Criar Story 1.3.2 "Implementar Rate Limiting" (P1)
  4. Atualizar File List com modificações do QA