Segurança web: as 10 vulnerabilidades mais críticas da OWASP
1. Introdução ao OWASP Top 10 e sua relevância em 2025
O OWASP Top 10 é um documento de conscientização publicado pela Open Web Application Security Project (OWASP) que representa um consenso global sobre os riscos de segurança mais críticos para aplicações web. Desde sua primeira edição em 2003, a lista evoluiu para refletir as mudanças no cenário de ameaças, incorporando novas categorias de vulnerabilidades conforme as tecnologias e técnicas de ataque se desenvolvem.
A metodologia de atualização do OWASP Top 10 combina dados de pesquisas com a indústria, análise de CVE (Common Vulnerabilities and Exposures) e contribuições de especialistas em segurança. A edição de 2025 mantém o foco em vulnerabilidades exploráveis em APIs, microsserviços e aplicações modernas, integrando-se a temas vizinhos como mitigação de DDoS, gerenciamento centralizado de segredos com HashiCorp Vault e boas práticas de hardening de endpoints.
2. A01: Broken Access Control — Falhas de Controle de Acesso
Broken Access Control lidera a lista como a vulnerabilidade mais crítica. Ocorre quando um aplicativo não impõe restrições adequadas sobre o que usuários autenticados podem fazer. Exemplos comuns incluem Insecure Direct Object References (IDOR), onde um usuário modifica um parâmetro de URL para acessar recursos de outros usuários, e escalonamento vertical de privilégios.
Exemplo prático de IDOR:
URL vulnerável: https://app.exemplo.com/perfil?id=123
Ataque: https://app.exemplo.com/perfil?id=456
Para mitigar, implemente o princípio do menor privilégio, utilize testes automatizados de autorização e valide permissões em toda requisição, não apenas no frontend.
3. A02: Cryptographic Failures — Falhas Criptográficas
Anteriormente chamada de "Sensitive Data Exposure", esta categoria abrange falhas relacionadas à proteção de dados sensíveis. As principais causas incluem tráfego não criptografado, uso de algoritmos obsoletos como MD5 e SHA-1 para senhas, e chaves criptográficas armazenadas inadequadamente.
Exemplo de configuração insegura:
# Configuração vulnerável (HTTP + SHA-1)
server {
listen 80;
# Sem HTTPS
}
hash_senha = SHA1("minha_senha")
Prática recomendada:
# Configuração segura (TLS 1.3 + bcrypt)
server {
listen 443 ssl;
ssl_protocols TLSv1.3;
}
hash_senha = bcrypt.hashpw("minha_senha", bcrypt.gensalt())
Utilize TLS 1.3 em todas as comunicações e gerencie chaves criptográficas com ferramentas como HashiCorp Vault para evitar exposição acidental.
4. A03: Injection — Injeção (SQL, NoSQL, OS Command)
Injeção ocorre quando dados não confiáveis são enviados a um interpretador como parte de um comando ou consulta. SQL Injection é o exemplo clássico, mas NoSQL Injection e injeção de comandos do sistema operacional também são comuns.
Exemplo de SQL Injection vs. consulta parametrizada:
# Vulnerável (concatenação de strings)
query = "SELECT * FROM usuarios WHERE email = '" + email + "'"
# Segura (prepared statement)
query = "SELECT * FROM usuarios WHERE email = ?"
cursor.execute(query, (email,))
Mitigue com prepared statements, ORMs seguros (como SQLAlchemy ou Entity Framework) e validação rigorosa de entrada com listas brancas.
5. A04: Insecure Design — Projeto Inseguro
Esta categoria, introduzida em 2021, distingue falhas de implementação de falhas de design. Um sistema pode ser codificado perfeitamente, mas ainda assim ser inseguro se o design não considerar ameaças. Exemplos incluem ausência de rate limiting em APIs de login e falta de validação de fluxo em processos de recuperação de senha.
Padrão de design inseguro:
# API de login sem rate limiting
POST /api/login
{
"email": "user@exemplo.com",
"password": "senha123"
}
# Permite tentativas ilimitadas
Adote threat modeling durante a fase de design, implemente Secure SDLC e aplique princípios de segurança desde a concepção (security by design).
6. A05 a A07: Security Misconfiguration, Vulnerable Components e Auth Failures
A05 — Security Misconfiguration: Configurações padrão de servidores, diretórios expostos e headers de segurança ausentes (como Content-Security-Policy e X-Frame-Options) são vetores comuns.
A06 — Vulnerable and Outdated Components: Bibliotecas desatualizadas com CVEs conhecidas representam risco significativo. Mantenha um Software Bill of Materials (SBOM) e automatize a verificação de dependências.
Exemplo de verificação com SBOM:
# Comando para gerar SBOM (usando syft)
syft packages ./app -o json > sbom.json
# Verificação de vulnerabilidades (usando grype)
grype sbom.json
A07 — Identification and Authentication Failures: Autenticação frágil, ausência de MFA e gerenciamento inadequado de sessões permitem ataques de força bruta e sequestro de sessão.
7. A08 a A10: Data Integrity Failures, Logging/Monitoring e SSRF
A08 — Software and Data Integrity Failures: Desserialização insegura e atualizações sem verificação de integridade podem levar à execução remota de código. Sempre valide assinaturas digitais em atualizações.
A09 — Security Logging and Monitoring Failures: Sem logs adequados e monitoramento em tempo real, ataques passam despercebidos. Implemente logging centralizado com ferramentas como ELK Stack e configure alertas para padrões suspeitos.
A10 — Server-Side Request Forgery (SSRF): Ocorre quando um servidor faz requisições a URLs fornecidas pelo usuário, potencialmente acessando serviços internos. Mitigue com segmentação de rede e validação rigorosa de URLs.
Exemplo de SSRF:
# Código vulnerável
url = request.GET.get('url')
response = requests.get(url) # Pode acessar http://localhost:6379 (Redis)
# Mitigação com validação
from urllib.parse import urlparse
parsed = urlparse(url)
if parsed.hostname in ['localhost', '127.0.0.1', 'metadata.google.internal']:
raise Exception("Acesso negado")
8. Estratégias práticas de mitigação e integração com a série de temas
Para implementar proteção contra as 10 vulnerabilidades, adote um checklist prático:
- Ferramentas SAST/DAST: Incorpore análise estática (SonarQube, Checkmarx) e dinâmica (OWASP ZAP, Burp Suite) no pipeline CI/CD.
- Web Application Firewall (WAF): Utilize WAFs como ModSecurity ou AWS WAF para bloquear ataques conhecidos.
- Hardening de endpoints: Configure headers de segurança, desative serviços desnecessários e aplique patches regularmente.
- Gerenciamento de segredos: Centralize chaves e senhas com HashiCorp Vault, nunca em código-fonte ou variáveis de ambiente expostas.
- Testes de penetração regulares: Realize pentests trimestrais e após grandes mudanças no código.
A integração com temas vizinhos é direta: a mitigação de DDoS complementa o controle de acesso (A01), o Vault resolve falhas criptográficas (A02), e o hardening de endpoints reduz configurações inseguras (A05). A edição 2025 do OWASP Top 10 reforça a necessidade de uma cultura de segurança contínua, com treinamento periódico das equipes de desenvolvimento e operações.
Referências
- OWASP Top 10 2021 (Documentação Oficial) — Lista completa com descrições, exemplos e guias de mitigação para cada categoria.
- OWASP Cheat Sheet Series — Folhas de referência técnicas para prevenção de SQL Injection, autenticação segura e outras vulnerabilidades.
- HashiCorp Vault Documentation — Guia oficial para gerenciamento centralizado de segredos e criptografia.
- CWE - Common Weakness Enumeration — Catálogo de fraquezas de software com correlação direta com as categorias do OWASP Top 10.
- PortSwigger Web Security Academy — Tutoriais práticos e laboratórios interativos sobre as principais vulnerabilidades web.
- NIST SP 800-53 (Security Controls) — Guia de controles de segurança que complementa as práticas recomendadas pelo OWASP.