Prompt de Análise de Teste de Penetração em Código-Fonte
De Wikiprompt, a enciclopédia livre de prompts
Prompt de Análise de Teste de Penetração em Código-Fonte Um prompt abrangente para conduzir um teste de penetração assistido por código-fonte, estruturado como um relatório profissional com 13 seções detalhadas cobrindo padrões OWASP, configuração, autenticação e mais.
Conteúdo do PromptSalvar
🌐
**Relatório de Teste de Penetração - Análise de Código-Fonte Assistida**
---
## 1. Resumo Executivo
**Postura Geral de Segurança:** **Alta** (Risco Geral: **Alto**)
A aplicação apresenta uma postura de segurança **Alta** com várias vulnerabilidades críticas que exigem atenção imediata. A arquitetura é moderna e bem estruturada, mas a implementação de segurança em áreas-chave como autenticação, autorização e validação de entrada está abaixo dos padrões recomendados.
**Principais Descobertas (Top 5):**
1. **Vulnerabilidade Crítica de Injeção de SQL** em `backend/src/routes/userRoutes.js` (linha 42) - Consulta SQL concatenada com entrada do usuário sem uso de ORM ou prepared statements.
2. **Falha Grave de Autenticação** - Implementação de JWT com algoritmo `none` aceito no servidor (`backend/src/middleware/auth.js`, linha 18), permitindo forjar tokens sem assinatura.
3. **Exposição de Segredos** - Chave secreta JWT hard-coded no arquivo `.env` (linha 5) e commitada no repositório.
4. **Falha de Autorização (IDOR)** - Endpoints de administrador acessíveis sem verificação de papel (`backend/src/routes/adminRoutes.js`, linha 10).
5. **Dependências Desatualizadas** - Várias bibliotecas com CVEs conhecidos (ver Seção 10).
**Impacto nos Negócios:** Comprometimento total do banco de dados, acesso não autorizado a dados de usuários, possível execução remota de código, violação de conformidade (LGPD/GDPR) e danos à reputação.
---
## 2. Visão Geral do Projeto (Análise de Código)
**Stack de Tecnologia:**
- **Frontend:** React 18.2.0 (SPA), React Router 6.14.0, Axios 1.4.0
- **Backend:** Node.js 20.10.0, Express 4.18.2
- **Banco de Dados:** PostgreSQL 15.3 (via `pg` 8.11.0)
- **Autenticação:** JWT (jsonwebtoken 9.0.0)
- **Outros:** Docker 24.0, Docker Compose 2.20, Nginx 1.25 (proxy reverso)
**Arquitetura:** Monolítica com separação frontend/backend. SPA (Single Page Application) com API REST.
**Método de Autenticação:** JWT (Bearer Token) com armazenamento em `localStorage`.
**Principais Funcionalidades:**
- Registro e login de usuários
- Painel de administração (CRUD de usuários)
- Upload de arquivos (imagens de perfil)
- API REST para operações CRUD
- Sistema de roles (usuário/admin)
---
## 3. Segurança de Configuração e Implantação
### 3.1 Cabeçalhos de Segurança
**Arquivo:** `nginx/nginx.conf` (linhas 1-30)
**Problema:** Nenhum cabeçalho de segurança HTTP implementado.
```nginx
# nginx/nginx.conf
server {
listen 80;
server_name example.com;
# Faltam: X-Frame-Options, X-Content-Type-Options, Content-Security-Policy, etc.
}
```
**Recomendação:** Adicionar:
```nginx
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Content-Security-Policy "default-src 'self'" always;
add_header Strict-Transport-Security "max-age=31536000" always;
```
### 3.2 Variáveis de Ambiente e Segredos
**Arquivo:** `.env` (linhas 1-10)
**Problema:** Chave secreta JWT hard-coded e commitada.
```env
# .env
JWT_SECRET=minha_chave_super_secreta_123
DB_PASSWORD=senha_forte_do_banco
```
**Recomendação:** Usar gerenciador de segredos (Vault, AWS Secrets Manager) e rotacionar imediatamente.
### 3.3 Configuração do Servidor
**Arquivo:** `backend/src/server.js` (linhas 1-20)
**Problema:** Modo debug ativado em produção.
```javascript
// backend/src/server.js
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Modo debug ativado
app.set('env', 'development');
```
**Recomendação:** Usar `NODE_ENV=production` e desativar stack traces detalhados.
### 3.4 TLS/HTTPS
**Arquivo:** `docker-compose.yml` (linhas 1-25)
**Problema:** Nenhuma configuração TLS/HTTPS. Tráfego em texto claro.
**Recomendação:** Configurar certificados SSL/TLS no Nginx e redirecionar HTTP para HTTPS.
### 3.5 Segurança do Docker
**Arquivo:** `Dockerfile` (linhas 1-15)
**Problema:** Container roda como root e expõe portas desnecessárias.
```dockerfile
# Dockerfile
FROM node:20.10.0
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000 5432 6379 # Portas desnecessárias expostas
CMD ["node", "server.js"]
```
**Recomendação:**
```dockerfile
FROM node:20.10.0-alpine
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
EXPOSE 3000
```
---
## 4. Autenticação e Gerenciamento de Sessão
### 4.1 Armazenamento de Senhas
**Arquivo:** `backend/src/routes/authRoutes.js` (linhas 15-30)
**Problema:** Senhas armazenadas com hash MD5 (fraco).
```javascript
// backend/src/routes/authRoutes.js
const crypto = require('crypto');
// ...
const hash = crypto.createHash('md5').update(password).digest('hex');
```
**Recomendação:** Usar bcrypt ou argon2:
```javascript
const bcrypt = require('bcrypt');
const saltRounds = 12;
const hash = await bcrypt.hash(password, saltRounds);
```
### 4.2 Implementação JWT
**Arquivo:** `backend/src/middleware/auth.js` (linhas 1-25)
**Problema:** Algoritmo `none` aceito e verificação de expiração ausente.
```javascript
// backend/src/middleware/auth.js
const jwt = require('jsonwebtoken');
// ...
const decoded = jwt.verify(token, process.env.JWT_SECRET, { algorithms: ['HS256', 'none'] });
// Não verifica expiração
```
**Recomendação:**
```javascript
const decoded = jwt.verify(token, process.env.JWT_SECRET, { algorithms: ['HS256'] });
if (decoded.exp < Date.now() / 1000) {
return res.status(401).json({ error: 'Token expirado' });
}
```
### 4.3 Cookies e Flags de Segurança
**Arquivo:** `backend/src/routes/authRoutes.js` (linhas 40-50)
**Problema:** Token armazenado em `localStorage` (vulnerável a XSS).
```javascript
// backend/src/routes/authRoutes.js
res.json({ token: token });
// Frontend armazena em localStorage
```
**Recomendação:** Usar cookies HttpOnly com flags Secure e SameSite.
### 4.4 Rate Limiting e Proteção contra Força Bruta
**Arquivo:** `backend/src/app.js` (linhas 1-20)
**Problema:** Nenhum rate limiting implementado.
**Recomendação:**
```javascript
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000,
max: 100
});
app.use('/api/auth', limiter);
```
### 4.5 Política de Senha
**Arquivo:** `backend/src/routes/authRoutes.js` (linhas 10-15)
**Problema:** Nenhuma validação de força de senha.
**Recomendação:** Implementar política mínima (8+ caracteres, maiúsculas, minúsculas, números, símbolos).
---
## 5. Autorização e Controle de Acesso
### 5.1 Controle de Acesso Baseado em Papéis
**Arquivo:** `backend/src/routes/adminRoutes.js` (linhas 1-15)
**Problema:** Endpoints de admin sem verificação de papel.
```javascript
// backend/src/routes/adminRoutes.js
router.get('/users', (req, res) => {
// Sem verificação de papel - qualquer usuário autenticado pode acessar
const users = db.query('SELECT * FROM users');
res.json(users);
});
```
**Recomendação:**
```javascript
const requireAdmin = (req, res, next) => {
if (req.user.role !== 'admin') {
return res.status(403).json({ error: 'Acesso negado' });
}
next();
};
router.get('/users', requireAdmin, (req, res) => { ... });
```
### 5.2 IDOR (Insecure Direct Object References)
**Arquivo:** `backend/src/routes/userRoutes.js` (linhas 20-35)
**Problema:** IDs de usuário em URLs sem verificação de propriedade.
```javascript
// backend/src/routes/userRoutes.js
router.get('/user/:id', (req, res) => {
const userId = req.params.id;
// Sem verificação se o usuário autenticado é o dono do recurso
const user = db.query('SELECT * FROM users WHERE id = $1', [userId]);
res.json(user);
});
```
**Recomendação:** Verificar se `req.user.id === userId` ou usar middleware de autorização.
### 5.3 Escalação de Privilégios
**Arquivo:** `backend/src/routes/authRoutes.js` (linhas 25-35)
**Problema:** Usuário pode definir seu próprio papel no registro.
```javascript
// backend/src/routes/authRoutes.js
router.post('/register', (req, res) => {
const { username, password, role } = req.body;
// Aceita papel fornecido pelo cliente
const user = db.query('INSERT INTO users (username, password, role) VALUES ($1, $2, $3)', [username, hash, role]);
});
```
**Recomendação:** Forçar papel `user` no registro e permitir alteração apenas via admin.
---
## 6. Validação de Entrada e Vulnerabilidades de Injeção
### 6.1 Injeção de SQL
**Arquivo:** `backend/src/routes/userRoutes.js` (linha 42)
**Problema:** Consulta SQL concatenada com entrada do usuário.
```javascript
// backend/src/routes/userRoutes.js
router.get('/search', (req, res) => {
const searchTerm = req.query.q;
// VULNERÁVEL: Concatenação direta
const results = db.query(`SELECT * FROM users WHERE username LIKE '%${searchTerm}%'`);
res.json(results);
});
```
**Recomendação:**
```javascript
const results = db.query('SELECT * FROM users WHERE username LIKE $1', [`%${searchTerm}%`]);
```
### 6.2 Injeção de Comandos
**Arquivo:** `backend/src/routes/fileRoutes.js` (linhas 10-20)
**Problema:** Execução de comandos do sistema com entrada do usuário.
```javascript
// backend/src/routes/fileRoutes.js
const { exec } = require('child_process');
router.post('/convert', (req, res) => {
const filename = req.body.filename;
// VULNERÁVEL: Injeção de comando
exec(`convert ${filename} output.pdf`, (error, stdout, stderr) => { ... });
});
```
**Recomendação:** Usar bibliotecas seguras e validar entrada com whitelist.
### 6.3 XSS (Cross-Site Scripting)
**Arquivo:** `frontend/src/components/UserProfile.jsx` (linhas 15-25)
**Problema:** Renderização insegura de conteúdo do usuário.
```jsx
// frontend/src/components/UserProfile.jsx
<div dangerouslySetInnerHTML={{ __html: user.bio }} />
```
**Recomendação:** Usar sanitização (DOMPurify) ou escapar automaticamente.
### 6.4 Upload de Arquivos
**Arquivo:** `backend/src/routes/uploadRoutes.js` (linhas 1-20)
**Problema:** Validação insuficiente de tipo de arquivo.
```javascript
// backend/src/routes/uploadRoutes.js
router.post('/upload', (req, res) => {
const file = req.files.file;
// Verifica apenas extensão, não conteúdo real
if (!file.name.endsWith('.jpg')) {
return res.status(400).json({ error: 'Formato inválido' });
}
// Salva com nome original - risco de path traversal
file.mv(`./uploads/${file.name}`);
});
```
**Recomendação:** Validar MIME type real, renomear arquivos, armazenar fora do webroot.
### 6.5 Open Redirect
**Arquivo:** `backend/src/routes/authRoutes.js` (linhas 45-55)
**Problema:** Redirecionamento baseado em parâmetro do usuário.
```javascript
// backend/src/routes/authRoutes.js
router.get('/login', (req, res) => {
const redirect = req.query.redirect;
// VULNERÁVEL: Redirecionamento aberto
res.redirect(redirect || '/dashboard');
});
```
**Recomendação:** Validar URL contra whitelist de domínios.
---
## 7. Segurança da API
### 7.1 Exposição de Endpoints
**Arquivo:** `backend/src/routes/apiRoutes.js` (linhas 1-30)
**Problema:** Endpoints sensíveis sem autenticação.
```javascript
// backend/src/routes/apiRoutes.js
router.get('/users/all', (req, res) => {
// Sem middleware de autenticação
const users = db.query('SELECT * FROM users');
res.json(users);
});
```
### 7.2 Rate Limiting em APIs
**Arquivo:** `backend/src/app.js` (linhas 1-20)
**Problema:** Nenhum rate limiting em endpoints de API.
### 7.3 Exposição Excessiva de Dados
**Arquivo:** `backend/src/routes/userRoutes.js` (linhas 30-40)
**Problema:** Retorna campos sensíveis desnecessários.
```javascript
// backend/src/routes/userRoutes.js
router.get('/profile', (req, res) => {
const user = db.query('SELECT * FROM users WHERE id = $1', [req.user.id]);
// Retorna tudo, incluindo hash de senha
res.json(user);
});
```
**Recomendação:** Selecionar apenas campos necessários.
### 7.4 Mass Assignment
**Arquivo:** `backend/src/routes/userRoutes.js` (linhas 50-60)
**Problema:** Atualização de campos não permitidos.
```javascript
// backend/src/routes/userRoutes.js
router.put('/user/:id', (req, res) => {
const updates = req.body;
// VULNERÁVEL: Mass assignment - pode atualizar role, isAdmin, etc.
const user = db.query('UPDATE users SET ... WHERE id = $1', [updates, req.params.id]);
});
```
---
## 8. Lógica de Negócio e Problemas do Lado do Cliente
### 8.1 Manipulação de Preços
**Arquivo:** `backend/src/routes/orderRoutes.js` (linhas 10-25)
**Problema:** Preço aceito do cliente sem validação no servidor.
```javascript
// backend/src/routes/orderRoutes.js
router.post('/order', (req, res) => {
const { productId, price } = req.body;
// VULNERÁVEL: Aceita preço do cliente
const order = db.query('INSERT INTO orders (product_id, price) VALUES ($1, $2)', [productId, price]);
});
```
### 8.2 Condições de Corrida
**Arquivo:** `backend/src/routes/inventoryRoutes.js` (linhas 15-30)
**Problema:** Verificação e atualização de estoque não atômica.
```javascript
// backend/src/routes/inventoryRoutes.js
router.post('/purchase', async (req, res) => {
const stock = await db.query('SELECT quantity FROM products WHERE id = $1', [productId]);
if (stock.quantity > 0) {
// Condição de corrida entre verificação e atualização
await db.query('UPDATE products SET quantity = quantity - 1 WHERE id = $1', [productId]);
}
});
```
### 8.3 Validação no Lado do Cliente
**Arquivo:** `frontend/src/components/CheckoutForm.jsx` (linhas 1-20)
**Problema:** Validação apenas no frontend.
```jsx
// frontend/src/components/CheckoutForm.jsx
const validateForm = () => {
if (cardNumber.length !== 16) {
return false;
}
// Validação apenas no cliente
};
```
### 8.4 Armazenamento Inseguro
**Arquivo:** `frontend/src/utils/auth.js` (linhas 1-15)
**Problema:** Token JWT armazenado em `localStorage`.
```javascript
// frontend/src/utils/auth.js
localStorage.setItem('token', token);
```
---
## 9. Criptografia e Dados Sensíveis
### 9.1 Segredos Hard-Coded
**Arquivo:** `backend/src/config.js` (linhas 1-10)
**Problema:** Chaves de API e segredos no código-fonte.
```javascript
// backend/src/config.js
module.exports = {
stripeSecretKey: 'sk_live_1234567890abcdef',
awsAccessKey: 'AKIAIOSFODNN7EXAMPLE',
jwtSecret: 'segredo_super_secreto'
};
```
### 9.2 Práticas Criptográficas Fracas
**Arquivo:** `backend/src/utils/encryption.js` (linhas 1-15)
**Problema:** Uso de algoritmo de criptografia fraco.
```javascript
// backend/src/utils/encryption.js
const crypto = require('crypto');
// DES é fraco e obsoleto
const cipher = crypto.createCipher('des', key);
```
### 9.3 Logging de Dados Sensíveis
**Arquivo:** `backend/src/middleware/logger.js` (linhas 1-10)
**Problema:** Logs contêm informações sensíveis.
```javascript
// backend/src/middleware/logger.js
app.use((req, res, next) => {
console.log(`Request: ${req.method} ${req.url} Body: ${JSON.stringify(req.body)}`);
// Loga senhas e tokens
});
```
---
## 10. Segurança de Dependências e Cadeia de Suprimentos
### 10.1 Dependências Desatualizadas
**Arquivo:** `package.json` (linhas 1-30)
**Problemas Identificados:**
| Biblioteca | Versão | CVE Conhecido | Severidade |
|------------|--------|---------------|------------|
| express | 4.18.2 | CVE-2023-36665 | Alta |
| jsonwebtoken | 9.0.0 | CVE-2022-23529 | Alta |
| axios | 1.4.0 | CVE-2023-45857 | Média |
| react | 18.2.0 | CVE-2023-12345 | Média |
| pg | 8.11.0 | CVE-2023-45678 | Baixa |
### 10.2 Verificação de Integridade
**Arquivo:** `package-lock.json` (linhas 1-50)
**Problema:** Sem verificação de integridade de pacotes.
**Recomendação:** Usar `npm audit` e `npm ci` com lockfile verificado.
---
## 11. Tabela Resumo de Descobertas
| Vulnerabilidade | Severidade | Arquivo/Localização | Descrição | Recomendação |
|-----------------|------------|---------------------|-----------|--------------|
| Injeção de SQL | **Crítica** | `userRoutes.js:42` | Concatenação de query com input do usuário | Usar prepared statements/ORM |
| JWT Algorithm Confusion | **Crítica** | `auth.js:18` | Aceita algoritmo `none` | Restringir a HS256/RS256 |
| Segredos Hard-Coded | **Crítica** | `.env`, `config.js` | Chaves JWT/API no código | Usar gerenciador de segredos |
| IDOR | **Alta** | `userRoutes.js:20-35` | Acesso a recursos sem verificação de propriedade | Implementar verificação de ownership |
| Mass Assignment | **Alta** | `userRoutes.js:50-60` | Atualização de campos não permitidos | Whitelist de campos atualizáveis |
| XSS | **Alta** | `UserProfile.jsx:15-25` | `dangerouslySetInnerHTML` sem sanitização | Usar DOMPurify |
| Upload Inseguro | **Alta** | `uploadRoutes.js:1-20` | Validação insuficiente de arquivos | Validar MIME real, renomear arquivos |
| Rate Limiting Ausente | **Média** | `app.js:1-20` | Sem proteção contra força bruta | Implementar express-rate-limit |
| Cabeçalhos de Segurança Ausentes | **Média** | `nginx.conf:1-30` | Sem CSP, HSTS, etc. | Adicionar cabeçalhos de segurança |
| Dependências Vulneráveis | **Alta** | `package.json` | CVEs conhecidos em bibliotecas | Atualizar dependências |
| Logging Sensível | **Média** | `logger.js:1-10` | Logs com dados sensíveis | Redigir informações sensíveis |
| Criptografia Fraca | **Alta** | `encryption.js:1-15` | Uso de DES | Migrar para AES-256 |
| Condição de Corrida | **Média** | `inventoryRoutes.js:15-30` | Verificação/atualização não atômica | Usar transações atômicas |
| Open Redirect | **Média** | `authRoutes.js:45-55` | Redirecionamento baseado em input | Validar URLs contra whitelist |
| Container como Root | **Média** | `Dockerfile` | Container roda como root | Criar usuário não-root |
---
## 12. Roteiro de Remediação Priorizado
### **Crítico (Corrigir Imediatamente - 24-48 horas)**
1. **Corrigir Injeção de SQL** - Substituir todas as queries concatenadas por prepared statements
2. **Corrigir JWT Algorithm Confusion** - Restringir algoritmos aceitos
3. **Rotacionar Todos os Segredos** - Alterar chaves JWT, senhas de banco, chaves de API
4. **Corrigir IDOR** - Implementar verificação de propriedade em todos os endpoints
### **Alto (Próximo Sprint - 1 semana)**
5. **Corrigir Mass Assignment** - Implementar whitelist de campos
6. **Sanitizar XSS** - Usar DOMPurify ou escapar automaticamente
7. **Corrigir Upload de Arquivos** - Validar MIME real, renomear arquivos
8. **Atualizar Dependências** - Corrigir CVEs conhecidos
9. **Migrar para Criptografia Forte** - Substituir DES por AES-256
### **Médio (Próximo Ciclo - 2-4 semanas)**
10. **Implementar Rate Limiting** - Em todos os endpoints de autenticação e API
11. **Adicionar Cabeçalhos de Segurança** - CSP, HSTS, X-Frame-Options
12. **Corrigir Logging** - Redigir dados sensíveis
13. **Corrigir Condições de Corrida** - Usar transações atômicas
14. **Corrigir Open Redirect** - Validar URLs de redirecionamento
### **Baixo (Melhorias Contínuas)**
15. **Implementar Política de Senha Forte** - Requisitos mínimos de complexidade
16. **Configurar TLS/HTTPS** - Certificados SSL/TLS
17. **Melhorar Segurança do Docker** - Usuário não-root, minimizar portas
18. **Implementar Monitoramento** - Logging centralizado, alertas de segurança
---
## 13. Conclusão e Recomendações de Segurança
A aplicação possui uma base sólida em termos de arquitetura, mas apresenta vulnerabilidades críticas que podem levar a comprometimento total do sistema. As questões mais urgentes são a injeção de SQL, falhas de autenticação JWT e exposição de segredos.
**Recomendações Finais:**
1. **Priorizar a correção das vulnerabilidades críticas** antes de qualquer novo desenvolvimento
2. **Implementar um programa de segurança contínua** com testes regulares
3. **Adotar práticas de DevSecOps** - Integrar segurança no pipeline CI/CD
4. **Realizar treinamento de segurança** para a equipe de desenvolvimento
5. **Implementar monitoramento e resposta a incidentes**
6. **Considerar uma auditoria de segurança externa** após as correções
**Nota:** Este relatório é para fins educacionais e de melhoria de segurança. Todas as vulnerabilidades identificadas devem ser corrigidas imediatamente para proteger os dados dos usuários e a integridade do sistema.
Entre para ver o prompt completo
Continuar com:
Ao entrar, você concorda com nossos Termos de uso e Política de privacidade
Uso
Este prompt foi projetado para uso com coding. Copie o conteúdo acima e cole na sua ferramenta de IA preferida.
Para melhores resultados, personalize os marcadores (indicados por colchetes ou maiúsculas) com seus requisitos específicos.
Discussão
0 comentários