OWASP Top 10 explicado con ejemplos prácticos
Cada año, miles de aplicaciones web son comprometidas debido a los mismos fallos de seguridad recurrentes. El OWASP Top 10 es un documento de concientización estándar que enumera los riesgos de seguridad más críticos para las aplicaciones web. En este artículo, recorreremos cada riesgo, mostraremos un ejemplo práctico y explicaremos cómo mitigarlo. Ya seas desarrollador, ingeniero DevOps o entusiasta de la seguridad, comprender estos riesgos es esencial para construir sistemas seguros.
1. Control de acceso roto
El control de acceso roto ocurre cuando los usuarios pueden actuar fuera de sus permisos previstos. Por ejemplo, un usuario podría acceder a los datos de otro usuario cambiando un parámetro de URL.
Ejemplo: Una aplicación usa /api/user/123 para obtener datos del usuario. Si no se verifica que el usuario autenticado sea realmente el usuario 123, un atacante puede cambiar el ID a /api/user/124 y ver el perfil de otra persona.
Mitigación: Implementa verificaciones de control de acceso en el lado del servidor. Deniega por defecto. Usa control de acceso basado en roles (RBAC) y valida los permisos en cada solicitud.
2. Fallos criptográficos
Anteriormente conocido como "Exposición de datos sensibles", este riesgo implica no proteger datos sensibles en tránsito o en reposo.
Ejemplo: Almacenar contraseñas en texto plano o usar algoritmos de hash débiles como MD5.
Mitigación: Usa cifrado fuerte (p. ej., AES-256) para datos en reposo, TLS 1.2+ para datos en tránsito y hashing de contraseñas fuerte (bcrypt, Argon2).
3. Inyección
Los fallos de inyección, como la inyección SQL, NoSQL, OS y LDAP, ocurren cuando se envían datos no confiables a un intérprete como parte de un comando o consulta.
Ejemplo: Un formulario de inicio de sesión que construye una consulta SQL como:
SELECT * FROM users WHERE username = '$username' AND password = '$password';
Si un atacante ingresa ' OR '1'='1 como nombre de usuario, puede eludir la autenticación.
Mitigación: Usa consultas parametrizadas o sentencias preparadas. Escapa caracteres especiales y valida la entrada.
4. Diseño inseguro
El diseño inseguro se refiere a fallos en la arquitectura y el diseño de una aplicación, no solo a errores de implementación.
Ejemplo: Una función de restablecimiento de contraseña que usa preguntas de seguridad con respuestas fáciles de adivinar.
Mitigación: Modelado de amenazas durante el diseño, patrones de diseño seguros y arquitecturas de referencia.
5. Mala configuración de seguridad
Esto incluye cuentas predeterminadas, páginas no utilizadas, fallos sin parchear, archivos y directorios sin protección.
Ejemplo: Dejar las credenciales de administrador predeterminadas en un CMS o exponer listados de directorios.
Mitigación: Refuerza las configuraciones, elimina funciones no utilizadas y automatiza las verificaciones de configuración.
6. Componentes vulnerables y desactualizados
Usar bibliotecas, frameworks o software con vulnerabilidades conocidas.
Ejemplo: Ejecutar una versión antigua de una biblioteca JavaScript con una vulnerabilidad XSS conocida.
Mitigación: Actualiza regularmente las dependencias, usa herramientas como npm audit o OWASP Dependency-Check, y elimina las dependencias no utilizadas.
7. Fallos de identificación y autenticación
Debilidades en la autenticación y la gestión de sesiones.
Ejemplo: Permitir contraseñas débiles, no limitar la tasa de intentos de inicio de sesión o exponer IDs de sesión en las URL.
Mitigación: Implementa autenticación multifactor, aplica políticas de contraseñas fuertes y usa una gestión de sesiones segura.
8. Fallos de integridad de software y datos
Código e infraestructura que no protegen contra violaciones de integridad.
Ejemplo: Usar CDNs no confiables para scripts sin Subresource Integrity (SRI).
Mitigación: Usa SRI, verifica firmas y asegúrate de que los pipelines de CI/CD sean seguros.
9. Fallos de registro y monitoreo de seguridad
El registro y monitoreo insuficientes permiten a los atacantes persistir sin ser detectados.
Ejemplo: No registrar los intentos de inicio de sesión fallidos, por lo que los ataques de fuerza bruta pasan desapercibidos.
Mitigación: Registra eventos relevantes para la seguridad, monitorea los registros y configura alertas para actividades sospechosas.
10. Falsificación de solicitudes del lado del servidor (SSRF)
SSRF ocurre cuando un atacante puede hacer que el servidor realice solicitudes a recursos internos.
Ejemplo: Una función de webhook que obtiene una URL proporcionada por el usuario. Un atacante podría proporcionar http://169.254.169.254/latest/meta-data/ para acceder a metadatos de la nube.
Mitigación: Valida y sanitiza las URL, usa listas de permitidos y restringe el tráfico saliente.
Tabla comparativa
| Riesgo | Ejemplo | Mitigación |
|---|---|---|
| Control de acceso roto | Acceder a datos de otro usuario vía IDOR | Verificaciones de permisos en el servidor |
| Fallos criptográficos | Almacenar contraseñas en texto plano | Usar hashing fuerte y TLS |
| Inyección | Inyección SQL vía formulario de login | Consultas parametrizadas |
| Diseño inseguro | Preguntas débiles de restablecimiento de contraseña | Modelado de amenazas |
| Mala configuración de seguridad | Credenciales de administrador predeterminadas | Reforzar configuraciones |
| Componentes vulnerables | Biblioteca antigua con fallo XSS | Actualizaciones regulares |
| Fallos de autenticación | Sin límite de tasa en el login | MFA y limitación de tasa |
| Fallos de integridad | Scripts de CDN no confiables | Subresource Integrity |
| Fallos de registro | Sin registros de inicios de sesión fallidos | Registro centralizado y alertas |
| SSRF | Obtener metadatos internos | Listas de permitidos de URL |
Cómo empezar
- Evalúa: Ejecuta escáneres automatizados y revisiones manuales contra el OWASP Top 10.
- Prioriza: Corrige primero los problemas más críticos (p. ej., inyección, control de acceso roto).
- Capacita: Educa a los desarrolladores en prácticas de codificación segura.
- Monitorea: Implementa registro y alertas para eventos de seguridad.
- Itera: Actualiza regularmente las dependencias y vuelve a probar.
Preguntas frecuentes
¿Qué es el OWASP Top 10?
El OWASP Top 10 es una lista actualizada regularmente de los riesgos de seguridad más críticos para las aplicaciones web, publicada por el Open Web Application Security Project (OWASP).
¿Con qué frecuencia se actualiza el OWASP Top 10?
Se actualiza aproximadamente cada tres o cuatro años, con la última versión publicada en 2021. Sin embargo, OWASP proporciona orientación y actualizaciones continuas.
¿Puedo confiar únicamente en el OWASP Top 10 para la seguridad?
No, es un punto de partida. También deberías seguir otros proyectos de OWASP como el Application Security Verification Standard (ASVS) y realizar pruebas de seguridad regulares.
Para analizar rápidamente tus registros de Nginx en busca de signos de ataques como inyección SQL o XSS, prueba nuestro Analizador de registros de Nginx. Te ayuda a detectar patrones sospechosos y proteger tu servidor web.