Initial commit
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
# 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 `roles` para `["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)
|
||||
|
||||
1. **Renomear `src/proxy.js` para `src/middleware.js`** - Ativa a protecao de rotas por pagina
|
||||
2. **Adicionar `auth()` + verificacao de role em TODAS as 15 server actions criticas** - Usar o padrao de `requireRole("admin")` ou `requireAuth()` do `authorization.js`
|
||||
3. **Refazer `examActions.js`** - Todas as funcoes precisam de auth. Leitura de templates nao deve retornar `isCorrect`. Considerar consolidar com `examFlowActions.js` (que ja tem seguranca correta)
|
||||
4. **Adicionar verificacao de propriedade em `/api/orders/[id]`**
|
||||
5. **Proteger `/api/health`** com autenticacao admin ou remover dados sensiveis
|
||||
6. **Remover `/api/debug-token`** em producao
|
||||
7. **Remover headers de debug** do middleware
|
||||
8. **Adicionar headers de seguranca** no `next.config.mjs`
|
||||
9. **Sanitizar mensagens de erro** antes de enviar ao cliente
|
||||
10. **Remover `console.log`** com dados sensiveis
|
||||
11. **Reduzir `bodySizeLimit`** para algo mais razoavel (ex: 10MB)
|
||||
12. **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.
|
||||
Reference in New Issue
Block a user