7.7 KiB
Auditoria de Seguranca - course-plat
Data: 2026-05-18 Escopo: Analise completa de autenticacao, autorizacao e vulnerabilidades de seguranca
CRITICO (Exploracao Imediata Possivel)
1. Middleware de Protecao de Rotas INATIVO
Arquivo: src/proxy.js
O middleware existe mas nao ha src/middleware.js no projeto. O Next.js so reconhece middleware nos caminhos padrao (src/middleware.js ou middleware.js na raiz). Toda a protecao de rotas por pagina esta desativada. Qualquer usuario pode acessar /admin/dashboard diretamente sem login.
2. updateUserData - Escalacao de Privilegio TOTAL (sem auth)
Arquivo: src/app/lib/users/updateUserAction.js:11
"use server"com ZERO verificacao de autenticacao- Qualquer cliente (nao autenticado) pode modificar qualquer usuario, incluindo alterar o campo
rolespara["admin"] - Impacto: Um atacante pode se conceder acesso admin completo
3. examActions.js - 18 funcoes SEM autenticacao
Arquivo: src/app/lib/actions/examActions.js (1102 linhas)
| Funcao | Linha | Impacto |
|---|---|---|
getExamTemplates |
82 | Vazar todas as questoes + respostas corretas de provas |
getExamTemplateById |
104 | Ver gabarito completo de qualquer prova |
updateExamTemplate |
155 | Alterar respostas corretas de qualquer prova |
deleteExamTemplate |
184 | Deletar qualquer modelo de prova |
duplicateExamTemplate |
218 | Duplicar e ver conteudo de qualquer prova |
getExamAssignments |
256 | Ver todas as atribuicoes de prova |
getExamAssignmentById |
~298 | Ver detalhes completos de atribuicao |
createExamAssignment |
~330 | Criar atribuicoes para qualquer turma |
updateExamAssignment |
~350 | Modificar atribuicoes de prova |
deleteExamAssignment |
~370 | Deletar atribuicoes |
archiveExamAssignment |
~390 | Arquivar/desarquivar |
getExamAttempts |
~410 | Ver todas as respostas e notas de todos os alunos |
getExamAttemptById |
~430 | Ver detalhes de qualquer tentativa |
createExamAttempt |
~450 | Criar tentativas impersonando qualquer aluno |
submitExamAttempt |
~470 | Submeter respostas por qualquer tentativa |
getExamStatistics |
~500 | Ver estatisticas gerais |
getStudentExamStatistics |
~520 | Ver historico de qualquer aluno |
getClasses |
~540 | Listar todas as turmas |
4. Server Actions administrativas sem autenticacao
15 funcoes com "use server" e ZERO verificacao de login:
| Funcao | Arquivo | Impacto |
|---|---|---|
updateUserData |
users/updateUserAction.js |
Escalacao de privilegio para admin |
saveUserData |
users/createWardUserAction.js |
Criar contas de aluno sem auth |
saveProductAction |
products/actions.js |
Criar/modificar produtos e precos |
deleteProductAction |
products/actions.js |
Deletar qualquer produto |
saveClassAction |
classes/saveClassAction.js |
Criar/modificar turmas |
toggleClassStatus |
classes/toggleClassStatus.js |
Arquivar/ativar qualquer turma |
deleteClass |
classes/deleteClass.js |
Deletar qualquer turma |
deleteClassTypeAction |
classes/deleteClassType.js |
Deletar tipo de turma |
saveClassLink |
classes/saveClassLinkAction.js |
Alterar link de aula |
saveClassTypeAction |
classes/saveClassTypeAction.js |
Criar/modificar tipos de turma |
saveCategoryAction |
categories/saveCategoryAction.js |
Criar/modificar categorias |
deleteCategory |
categories/deleteCategory.js |
Deletar categorias |
deleteFile |
generalActions/deleteFile.js |
Deletar qualquer arquivo do DB e S3 |
updateExamTemplate |
examActions.js |
Alterar gabaritos de provas |
submitExamAttempt |
examActions.js |
Submeter respostas por qualquer tentativa |
ALTO (Risco Significativo)
5. IDOR em /api/orders/[id]
Arquivo: src/app/api/orders/[id]/route.js
Qualquer usuario autenticado pode ver qualquer pedido por ID, sem verificacao de propriedade.
6. Vazamento de Informacoes em /api/health
Arquivo: src/app/api/health/route.js - Totalmente publico
Expoe: status do MongoDB, contagem de usuarios, tipo de storage, endpoint S3, bucket name, NODE_ENV, NEXTAUTH_URL.
7. Endpoint de Debug em Producao
Arquivo: src/app/api/debug-token/route.js
Qualquer usuario autenticado pode ver sessao completa, roles e status admin.
8. Aulas sem verificacao de membros
Arquivo: src/app/api/classes/[id]/lessons/route.js (GET)
Qualquer usuario autenticado pode ver aulas de qualquer turma, sem verificar se e membro.
9. Headers de Debug no Middleware
Arquivo: src/proxy.js:92-96
Headers x-debug-roles, x-debug-is-logged-in, x-debug-default-route vazam informacoes de autenticacao em toda resposta.
MEDIO
10. Ausencia de Headers de Seguranca
Arquivo: next.config.mjs
Nenhum header de seguranca configurado:
- Sem
Content-Security-Policy - Sem
X-Frame-Options - Sem
X-Content-Type-Options - Sem
Strict-Transport-Security - Sem
Referrer-Policy
11. Vazamento de Erros Internos
Multiplas funcoes retornam erros raw ao cliente: Erro: ${err}, error.message - podem vazar stack traces, detalhes de conexao DB, etc.
12. console.log com Dados Sensiveis
examActions.js usa console.log para imprimir respostas de alunos e dados de questoes no log do servidor.
13. Upload de Arquivo sem Restricao de Entidade
Arquivo: src/app/lib/generalActions/saveFileAction.js
Qualquer usuario autenticado pode vincular arquivos a qualquer entidade (qualquer turma, tipo de turma, etc.).
14. Limite de Upload Muito Alto
Arquivo: next.config.mjs:11
bodySizeLimit: '200mb' permite uploads de ate 200MB, facilitando ataques de negacao de servico.
15. Recibos como Base64 no MongoDB
submitOrderPaymentAction armazena recibos como data URI base64 diretamente no documento do banco, causando growth descontrolado do DB.
Resumo Quantitativo
| Severidade | Quantidade | Descricao |
|---|---|---|
| CRITICO | 15 | Server actions sem autenticacao nenhuma |
| ALTO | 12 | Autenticado mas sem verificacao de role/autorizacao |
| MEDIO | 5 | Autenticado e com role mas outros problemas |
| OK | 27 | Protegido corretamente com auth + autorizacao |
| Total de funcoes auditadas | 68 |
Plano de Correcao (Prioridade Decrescente)
- Renomear
src/proxy.jsparasrc/middleware.js- Ativa a protecao de rotas por pagina - Adicionar
auth()+ verificacao de role em TODAS as 15 server actions criticas - Usar o padrao derequireRole("admin")ourequireAuth()doauthorization.js - Refazer
examActions.js- Todas as funcoes precisam de auth. Leitura de templates nao deve retornarisCorrect. Considerar consolidar comexamFlowActions.js(que ja tem seguranca correta) - Adicionar verificacao de propriedade em
/api/orders/[id] - Proteger
/api/healthcom autenticacao admin ou remover dados sensiveis - Remover
/api/debug-tokenem producao - Remover headers de debug do middleware
- Adicionar headers de seguranca no
next.config.mjs - Sanitizar mensagens de erro antes de enviar ao cliente
- Remover
console.logcom dados sensiveis - Reduzir
bodySizeLimitpara algo mais razoavel (ex: 10MB) - Adicionar verificacao de membership em GET lessons
Comparativo: examActions.js vs examFlowActions.js
examFlowActions.js demonstra praticas de seguranca corretas (auth + role + class membership checks em todas as 6 funcoes), enquanto examActions.js (21 funcoes) tem quase nenhuma autenticacao ou autorizacao. Sugere-se que examFlowActions.js foi escrito depois como substituicao mais segura, mas as funcoes inseguras em examActions.js nunca foram removidas ou protegidas.