Atue como um especialista sênior em Application Security, PHP Security, Secure Code Review e OWASP, com experiência prática em auditoria de aplicações PHP em produção.
Sua tarefa é realizar uma auditoria de segurança completa deste projeto PHP, analisando o código-fonte, configurações, dependências, autenticação, APIs, banco de dados, uploads, sessões e fluxos de autorização.
OBJETIVO
Identificar vulnerabilidades reais, falhas de implementação, configurações inseguras e riscos que possam permitir:
- acesso não autorizado;
- vazamento de informações;
- comprometimento de contas;
- alteração ou exclusão indevida de dados;
- execução de código;
- acesso ao servidor;
- comprometimento do banco de dados;
- escalada de privilégios;
- abuso de APIs;
- comprometimento de usuários ou administradores.
Não faça uma análise superficial.
Analise o projeto como se ele fosse ser publicado em ambiente de produção acessível pela internet.
1. RECONHECIMENTO DA APLICAÇÃO
Antes de procurar vulnerabilidades, identifique:
- versão do PHP;
- framework utilizado;
- arquitetura do projeto;
- estrutura de diretórios;
- pontos de entrada da aplicação;
- arquivos públicos;
- arquivos administrativos;
- APIs;
- endpoints;
- rotas;
- controllers;
- models;
- middlewares;
- autenticação;
- banco de dados utilizado;
- bibliotecas externas;
- dependências Composer;
- serviços externos;
- webhooks;
- sistema de upload;
- armazenamento de arquivos;
- jobs/cron;
- comandos CLI;
- integrações externas;
- arquivos de configuração;
- variáveis de ambiente.
Crie primeiro um pequeno mapa da superfície de ataque da aplicação.
2. INJEÇÃO SQL
Analise todas as operações envolvendo banco de dados.
Procure por:
- SQL construído através de concatenação de strings;
- parâmetros inseridos diretamente em queries;
- uso incorreto de PDO;
- uso incorreto de prepared statements;
- queries dinâmicas;
- ORDER BY dinâmico;
- LIMIT/OFFSET manipulável;
- nomes de tabelas ou colunas vindos do usuário;
- filtros construídos dinamicamente;
- consultas raw;
- stored procedures inseguras.
Para cada ocorrência suspeita, determine se existe realmente possibilidade de SQL Injection.
3. XSS
Procure vulnerabilidades de:
- Stored XSS;
- Reflected XSS;
- DOM XSS, caso exista JavaScript no projeto.
Analise dados vindos de:
- GET;
- POST;
- cookies;
- banco de dados;
- APIs;
- parâmetros de URL;
- headers;
- uploads;
- campos administrativos.
Verifique se a saída HTML está sendo escapada corretamente.
Analise especialmente:
- echo;
- print;
- printf;
- templates;
- atributos HTML;
- JavaScript inline;
- URLs;
- HTML armazenado no banco.
Não considere apenas a entrada do dado. Analise principalmente onde o dado é renderizado.
4. AUTENTICAÇÃO
Analise completamente o sistema de login.
Verifique:
- armazenamento de senhas;
- password_hash();
- password_verify();
- algoritmos de hash;
- redefinição de senha;
- tokens de recuperação;
- expiração de tokens;
- reutilização de tokens;
- enumeração de usuários;
- brute force;
- credential stuffing;
- rate limiting;
- bloqueio de contas;
- autenticação administrativa;
- sessões persistentes;
- logout;
- invalidação de sessões;
- remember-me;
- autenticação de APIs.
Procure maneiras pelas quais um atacante poderia:
- entrar sem senha;
- assumir uma conta;
- reutilizar token;
- manipular sessão;
- descobrir usuários existentes;
- acessar conta administrativa.
5. AUTORIZAÇÃO E CONTROLE DE ACESSO
Esta parte deve receber atenção especial.
Procure:
- IDOR / BOLA;
- Broken Access Control;
- falta de verificação de propriedade do recurso;
- acesso horizontal entre usuários;
- acesso vertical;
- privilege escalation;
- endpoints administrativos sem proteção;
- validações feitas apenas no frontend;
- alteração de IDs pela URL;
- alteração de user_id;
- account_id;
- tenant_id;
- company_id;
- organization_id;
- role;
- permission;
- admin;
- ownership.
Para cada endpoint relevante, pergunte:
"Um usuário autenticado poderia alterar algum parâmetro e acessar ou modificar dados pertencentes a outro usuário?"
E:
"Um usuário comum poderia executar alguma ação reservada a administradores?"
6. CSRF
Analise todas as operações que alteram estado.
Exemplos:
- criar;
- editar;
- excluir;
- alterar senha;
- alterar email;
- pagamentos;
- configurações;
- usuários;
- permissões;
- uploads.
Verifique existência e validação correta de tokens CSRF.
Considere também cookies SameSite.
7. UPLOAD DE ARQUIVOS
Faça uma análise rigorosa de qualquer funcionalidade de upload.
Verifique:
- extensão;
- MIME type;
- conteúdo real do arquivo;
- tamanho;
- nome do arquivo;
- renomeação;
- path traversal;
- double extensions;
- arquivos PHP;
- .phtml;
- .phar;
- .htaccess;
- SVG;
- HTML;
- scripts;
- arquivos executáveis.
Determine:
- onde os arquivos são armazenados;
- se ficam dentro do webroot;
- se podem ser executados;
- se podem sobrescrever arquivos;
- se o nome original é utilizado;
- se existe possibilidade de path traversal.
Avalie explicitamente risco de Remote Code Execution através de upload.
8. FILE INCLUSION E PATH TRAVERSAL
Procure dados controlados pelo usuário chegando a:
- include;
- include_once;
- require;
- require_once;
- fopen;
- file_get_contents;
- readfile;
- unlink;
- copy;
- rename;
- glob;
- ZipArchive;
- manipulação de caminhos.
Procure:
- LFI;
- RFI;
- directory traversal;
- leitura arbitrária de arquivos;
- escrita arbitrária;
- exclusão arbitrária.
9. COMMAND INJECTION / RCE
Procure utilização de:
- exec();
- shell_exec();
- system();
- passthru();
- popen();
- proc_open();
- backticks;
- eval();
- assert() inseguro;
- preg_replace legado com execução;
- chamadas a shell;
- scripts externos.
Faça rastreamento da origem dos parâmetros utilizados.
Determine se algum input controlável externamente pode alcançar essas funções.
10. SSRF
Procure funcionalidades que realizem requisições HTTP baseadas em parâmetros externos.
Exemplos:
- cURL;
- file_get_contents() com URL;
- Guzzle;
- webhooks;
- importadores;
- previews;
- download remoto;
- processamento de imagens;
- APIs proxy.
Avalie se um atacante poderia acessar:
- localhost;
- 127.0.0.1;
- serviços internos;
- rede privada;
- metadata services;
- portas internas;
- endpoints administrativos.
11. SESSÕES E COOKIES
Analise:
- session_start;
- regeneração de session ID;
- session fixation;
- session hijacking;
- expiração;
- logout;
- armazenamento de sessão;
- cookies.
Verifique os atributos:
- HttpOnly;
- Secure;
- SameSite.
Verifique também se informações sensíveis são armazenadas indevidamente em cookies.
12. JWT E TOKENS
Caso existam JWTs ou outros tokens, analise:
- algoritmo;
- assinatura;
- segredo;
- validação;
- expiração;
- issuer;
- audience;
- rotação;
- revogação;
- refresh tokens;
- reutilização;
- armazenamento.
Procure também possibilidade de:
- token forgery;
- token replay;
- algoritmo inadequado;
- segredo fraco;
- ausência de validação de assinatura.
13. DESSERIALIZAÇÃO
Procure:
- unserialize();
- objetos serializados;
- dados serializados armazenados em cookies;
- sessões;
- parâmetros externos;
- cache.
Avalie risco de PHP Object Injection e gadget chains.
14. MASS ASSIGNMENT
Analise endpoints de criação e atualização.
Procure código semelhante a:
- preencher objetos diretamente com $_POST;
- update($request->all());
- create($request->all());
- conversão automática de JSON para entidade/model;
- atribuição dinâmica de propriedades.
Verifique se campos sensíveis poderiam ser modificados, como:
- role;
- admin;
- permissions;
- user_id;
- owner_id;
- tenant_id;
- status;
- balance;
- price;
- credit;
- plan.
15. API SECURITY
Analise todas as APIs quanto a:
- autenticação;
- autorização;
- BOLA;
- IDOR;
- rate limiting;
- enumeração;
- mass assignment;
- exposição excessiva de dados;
- validação de parâmetros;
- paginação;
- filtros;
- endpoints administrativos;
- tokens;
- CORS.
Mapeie endpoints particularmente críticos.
16. CORS
Analise:
- Access-Control-Allow-Origin;
- Access-Control-Allow-Credentials;
- origens dinâmicas;
- reflexão do Origin;
- wildcard;
- APIs autenticadas.
Identifique configurações que permitam sites externos abusarem da sessão do usuário.
17. HEADERS HTTP
Verifique se a aplicação deveria implementar ou melhorar:
- Content-Security-Policy;
- X-Content-Type-Options;
- Referrer-Policy;
- Permissions-Policy;
- Strict-Transport-Security;
- frame-ancestors / proteção contra clickjacking.
Considere o funcionamento real da aplicação antes de recomendar políticas excessivamente restritivas.
18. EXPOSIÇÃO DE INFORMAÇÕES
Procure exposição de:
- stack traces;
- erros PHP;
- phpinfo();
- debug;
- var_dump();
- print_r();
- logs;
- SQL errors;
- caminhos do servidor;
- credenciais;
- tokens;
- API keys;
- dados pessoais;
- informações internas.
19. SEGREDOS E CREDENCIAIS
Procure por:
- senhas;
- tokens;
- API keys;
- private keys;
- JWT secrets;
- database credentials;
- SMTP credentials;
- cloud credentials;
- chaves de pagamento;
- webhook secrets.
Analise:
- arquivos PHP;
- .env;
- configs;
- backups;
- arquivos de teste;
- scripts;
- documentação;
- arquivos JSON/YAML/XML;
- histórico ou dumps presentes no projeto.
Nunca reproduza integralmente um segredo encontrado no relatório. Mascare-o.
20. ARQUIVOS SENSÍVEIS PUBLICAMENTE ACESSÍVEIS
Procure riscos relacionados a:
- .env;
- .git;
- composer.json;
- composer.lock;
- backups;
- .sql;
- .zip;
- .tar;
- logs;
- arquivos temporários;
- phpinfo;
- config.php;
- dumps;
- arquivos antigos;
- .bak;
- .old;
- swap files.
Determine quais deles poderiam estar dentro do diretório público.
21. CONFIGURAÇÃO PHP
Analise configurações relevantes como:
- display_errors;
- error_reporting;
- expose_php;
- allow_url_include;
- allow_url_fopen;
- session.cookie_secure;
- session.cookie_httponly;
- session.cookie_samesite;
- session.use_strict_mode;
- upload_max_filesize;
- post_max_size.
Não classifique uma configuração como vulnerabilidade sem explicar o impacto concreto naquele projeto.
22. DEPENDÊNCIAS
Analise:
- composer.json;
- composer.lock.
Identifique:
- bibliotecas desatualizadas;
- bibliotecas abandonadas;
- versões potencialmente vulneráveis;
- pacotes desnecessários;
- dependências de desenvolvimento presentes em produção.
Quando não puder confirmar se uma versão específica possui CVE conhecida, marque:
"Necessita verificação externa de vulnerabilidades da dependência."
Não invente CVEs.
23. CRIPTOGRAFIA
Procure:
- MD5;
- SHA1 para senhas;
- criptografia caseira;
- chaves hardcoded;
- IVs fixos;
- ECB;
- geração insegura de números aleatórios;
- rand();
- mt_rand() em contextos de segurança.
Prefira:
- random_bytes();
- random_int();
- password_hash();
- password_verify();
quando aplicável.
24. LOGS E AUDITORIA
Verifique se ações críticas deixam registros adequados.
Exemplos:
- login;
- falhas de login;
- reset de senha;
- alteração de email;
- alteração de permissões;
- exclusão;
- ações administrativas;
- alterações financeiras;
- mudanças de configuração.
Também verifique se os logs armazenam indevidamente:
- senhas;
- tokens;
- cookies;
- dados pessoais;
- cartões;
- credenciais.
25. LÓGICA DE NEGÓCIO
Não procure apenas vulnerabilidades técnicas.
Analise também possíveis abusos de lógica.
Exemplos:
- alterar preço enviado pelo frontend;
- alterar quantidade;
- reutilizar cupom;
- repetir operação;
- modificar status;
- executar ação fora de ordem;
- repetir pagamento;
- manipular plano;
- alterar saldo;
- alterar ID de usuário;
- executar endpoint diretamente.
Considere cenários em que um usuário legítimo tenta manipular o funcionamento da aplicação.
26. RACE CONDITIONS
Identifique operações críticas que possam ser executadas simultaneamente e causar:
- duplicação;
- saldo negativo;
- uso repetido de benefício;
- pagamento duplicado;
- criação duplicada;
- inconsistência de estado.
27. WEBHOOKS
Caso existam webhooks, analise:
- autenticação;
- assinatura;
- segredo;
- timestamp;
- prevenção contra replay;
- idempotência;
- validação do payload;
- origem da requisição;
- manipulação de eventos.
28. REDIRECTS
Procure open redirects em parâmetros como:
- redirect;
- return;
- return_url;
- next;
- callback;
- url;
- continue.
29. OWASP
Compare os resultados principalmente com categorias relevantes do:
- OWASP Top 10;
- OWASP API Security;
- CWE.
Utilize essas classificações como referência, mas priorize a vulnerabilidade concreta encontrada no código.
METODOLOGIA OBRIGATÓRIA
Para cada possível vulnerabilidade:
- Identifique a fonte do dado controlável externamente.
- Acompanhe o fluxo desse dado.
- Identifique validações e sanitizações existentes.
- Identifique o ponto sensível onde o dado é utilizado.
- Determine se as proteções existentes realmente impedem exploração.
- Somente então classifique como vulnerabilidade.
Evite falsos positivos.
Não classifique simplesmente uma função perigosa como vulnerabilidade sem demonstrar que existe um caminho de dados explorável.
CLASSIFICAÇÃO DE SEVERIDADE
Classifique cada problema como:
🔴 CRÍTICO
Possibilidade de comprometimento completo, RCE, takeover administrativo, SQL Injection grave, bypass completo de autenticação ou exposição massiva de dados.
🟠 ALTO
Acesso significativo não autorizado, IDOR relevante, privilege escalation, stored XSS privilegiado, alteração significativa de dados ou exposição relevante.
🟡 MÉDIO
Impacto limitado que exige condições específicas ou possui alcance reduzido.
🔵 BAIXO
Hardening, exposição limitada ou problema com baixo impacto direto.
⚪ INFORMATIVO
Melhoria recomendada sem vulnerabilidade diretamente explorável demonstrada.
NÍVEL DE CONFIANÇA
Para cada achado informe também:
- CONFIRMADO
- ALTA PROBABILIDADE
- NECESSITA VALIDAÇÃO
- POSSÍVEL / INCONCLUSIVO
Não apresente uma hipótese como vulnerabilidade confirmada.
FORMATO DO RELATÓRIO
Para cada vulnerabilidade utilize:
[ID] Nome da vulnerabilidade
Severidade:
Crítico / Alto / Médio / Baixo / Informativo
Confiança:
Confirmado / Alta probabilidade / Necessita validação / Possível
CWE:
Caso aplicável.
OWASP:
Caso aplicável.
Arquivo:
caminho/do/arquivo.php
Linha(s):
Informe quando puder determinar.
Código afetado:
// apenas o trecho estritamente necessário
Descrição:
Explique o problema tecnicamente.
Origem do dado:
Explique de onde vem o dado potencialmente controlável.
Fluxo:
Entrada → processamento → ponto vulnerável.
Cenário de exploração:
Descreva conceitualmente como a falha poderia ser abusada, sem realizar ações destrutivas contra sistemas reais.
Impacto:
Explique o que um atacante poderia conseguir.
Pré-requisitos:
Informe o que seria necessário para explorar.
Correção recomendada:
Explique exatamente como corrigir.
Exemplo seguro de implementação:
// implementação corrigida
Prioridade de correção:
Imediata / Alta / Normal / Baixa.
AO FINAL DA AUDITORIA
Produza:
1. RESUMO EXECUTIVO
Informe:
- quantidade de vulnerabilidades críticas;
- altas;
- médias;
- baixas;
- informativas;
- nível geral de risco da aplicação.
2. TOP 10 RISCOS
Liste os dez problemas que devem receber prioridade.
3. SUPERFÍCIES MAIS CRÍTICAS
Exemplo:
- autenticação;
- painel administrativo;
- API;
- uploads;
- pagamentos;
- banco de dados;
- integrações externas.
4. PLANO DE CORREÇÃO
Divida em:
P0 — Corrigir imediatamente
Problemas críticos.
P1 — Corrigir antes de produção
Problemas altos.
P2 — Corrigir em curto prazo
Problemas médios.
P3 — Hardening
Problemas baixos e melhorias.
5. PONTOS QUE EXIGEM TESTE DINÂMICO
Liste problemas que não podem ser confirmados somente através da análise estática do código.
6. PONTOS QUE PARECEM SEGUROS
Também informe mecanismos importantes que foram corretamente implementados.
Isso é necessário para evitar um relatório que mostre apenas problemas e não reconheça controles existentes.
REGRAS IMPORTANTES
- Não invente vulnerabilidades.
- Não invente arquivos.
- Não invente linhas de código.
- Não invente endpoints.
- Não invente CVEs.
- Não considere toda entrada de usuário automaticamente vulnerável.
- Analise validações já existentes.
- Diferencie vulnerabilidade de melhoria de segurança.
- Diferencie vulnerabilidade confirmada de hipótese.
- Priorize impacto real.
- Considere o contexto completo da aplicação.
- Antes de concluir que existe uma vulnerabilidade, procure funções, classes, middlewares ou validações em outros arquivos que possam proteger aquele fluxo.
- Faça análise entre múltiplos arquivos quando necessário.
- Se alguma parte relevante do projeto não estiver disponível, informe exatamente o que falta.
Não execute ataques destrutivos nem tente comprometer sistemas externos ou de produção.
O objetivo é defesa, revisão de código e correção de vulnerabilidades.
INÍCIO
Comece pela estrutura do projeto.
Primeiro apresente:
- tecnologia e arquitetura identificadas;
- superfície de ataque;
- arquivos/componentes de maior risco;
- estratégia de auditoria que será usada.
Depois faça a análise detalhada, priorizando primeiro:
autenticação → autorização → endpoints/API → banco de dados → uploads → execução de comandos/arquivos → dados sensíveis → lógica de negócio → configurações e hardening.