Prompt de Análise de Teste de Penetração em Código-Fonte

De Wikiprompt, a enciclopédia livre de prompts

Sercan Alkan
Contribuído porSercan AlkanFonte

4 de jan. de 2026

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.

Referências

Categorias:coding| prompts.chat| penetration-testing| security-audit

Discussão

0 comentários