OWASP Top 10 explicado con ejemplos prácticos

Security2026-10-24TryQuickToolBox

Has construido una aplicación web y ahora te preocupa la seguridad. El OWASP Top 10 es la lista de referencia de los riesgos críticos de seguridad en aplicaciones web. Pero leer la lista es una cosa; entender cómo se manifiestan estos riesgos en el código real es otra. Este artículo recorre cada categoría del OWASP Top 10 con ejemplos prácticos y pasos concretos para mitigarlos.

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 la cuenta de otro usuario cambiando un parámetro de URL.

// Vulnerable: No check if the requested user ID belongs to the authenticated user
app.get('/api/user/:id', (req, res) => {
  const user = getUserById(req.params.id);
  res.json(user);
});

Mitigación: Aplica verificaciones de control de acceso en el lado del servidor. Utiliza control de acceso basado en roles o en atributos y deniega por defecto.

2. Fallos criptográficos

Los datos sensibles como contraseñas y números de tarjetas de crédito deben cifrarse en tránsito y en reposo. Usar algoritmos débiles o codificar secretos directamente son errores comunes.

# Vulnerable: Using MD5 for password hashing
import hashlib
hash = hashlib.md5(password.encode()).hexdigest()

Mitigación: Utiliza algoritmos de hash fuertes y con sal como bcrypt o Argon2. Usa siempre HTTPS (TLS) para datos en tránsito.

3. Inyección

Las fallas de inyección, como la inyección SQL, ocurren cuando datos no confiables se envían a un intérprete como parte de un comando o consulta.

// Vulnerable: String concatenation in SQL query
$sql = "SELECT * FROM users WHERE username = '" . $_GET['username'] . "'";

Mitigación: Utiliza consultas parametrizadas o sentencias preparadas. Nunca concatenes la entrada del usuario directamente en las consultas.

4. Diseño inseguro

El diseño inseguro se refiere a la falta o ineficacia en el diseño de controles. Por ejemplo, un sistema de recuperación de contraseña que revela si un correo electrónico existe puede ayudar a los atacantes.

Mitigación: Modelado de amenazas durante el diseño, utiliza patrones de diseño seguros e implementa limitación de velocidad y otros controles.

5. Configuración de seguridad incorrecta

Esto incluye dejar cuentas predeterminadas habilitadas, mostrar seguimientos de pila a los usuarios o configurar incorrectamente los permisos de almacenamiento en la nube.

# Vulnerable: Debug mode enabled in production
DEBUG = True

Mitigación: Refuerza las configuraciones, elimina características no utilizadas y automatiza las comprobaciones de configuración.

6. Componentes vulnerables y desactualizados

Usar bibliotecas con vulnerabilidades conocidas es como dejar una puerta abierta. Por ejemplo, una versión desactualizada de una biblioteca popular podría tener una falla de ejecución remota de código.

Mitigación: Actualiza regularmente las dependencias, utiliza herramientas como OWASP Dependency-Check y monitorea los CVE.

7. Fallos de identificación y autenticación

Una autenticación débil permite a los atacantes adivinar contraseñas o secuestrar sesiones.

// Vulnerable: No account lockout after failed attempts
if (passwordMatches) {
  loginUser();
} else {
  // just show error, no rate limiting
}

Mitigación: Implementa autenticación multifactor, aplica políticas de contraseñas seguras y utiliza una gestión de sesiones segura.

8. Fallos de integridad de software y datos

Esta categoría incluye el uso de fuentes no confiables para actualizaciones de software o la deserialización de datos no confiables.

// Vulnerable: Deserializing untrusted data
$data = unserialize($_POST['data']);

Mitigación: Verifica firmas digitales, utiliza comprobaciones de integridad y evita deserializar datos no confiables.

9. Fallos de registro y monitoreo de seguridad

Sin un registro adecuado, las brechas pasan desapercibidas. Por ejemplo, no registrar los intentos de inicio de sesión fallidos.

Mitigación: Registra eventos relevantes para la seguridad, configura alertas y ten un plan de respuesta a incidentes.

10. Falsificación de solicitudes del lado del servidor (SSRF)

SSRF ocurre cuando un atacante puede hacer que el servidor envíe solicitudes a ubicaciones no previstas.

// Vulnerable: Fetching URL from user input without validation
fetch(req.query.url).then(...)

Mitigación: Valida y sanitiza las URL, utiliza listas de permitidos y restringe los permisos del servidor.

Tabla comparativa

RiesgoEjemploMitigación
Control de acceso rotoAcceder a datos de otros usuarios mediante manipulación de URLAplicar verificaciones de acceso en el servidor
Fallos criptográficosAlmacenar contraseñas en texto planoUsar hash fuerte y TLS
InyecciónInyección SQL mediante entrada no sanitizadaConsultas parametrizadas
Diseño inseguroLa recuperación de contraseña revela la existencia del correoModelado de amenazas y patrones seguros
Configuración de seguridad incorrectaModo de depuración activado en producciónReforzar configuraciones
Componentes vulnerablesBiblioteca desactualizada con CVE conocidoActualizaciones regulares y comprobación de dependencias
Fallos de autenticaciónSin limitación de velocidad en el inicio de sesiónMFA y políticas fuertes
Fallos de integridadDeserializar datos no confiablesVerificar firmas y evitar deserialización insegura
Fallos de registroSin registros de inicios de sesión fallidosImplementar registro y monitoreo
SSRFObtener URL proporcionada por el usuarioValidar y permitir solo URL en lista blanca

Preguntas frecuentes

¿Qué es el OWASP Top 10?

El OWASP Top 10 es una lista actualizada periódicamente de los riesgos de seguridad más críticos en aplicaciones web, publicada por el Open Web Application Security Project (OWASP).

¿Con qué frecuencia se actualiza el OWASP Top 10?

Se actualiza periódicamente para reflejar amenazas emergentes y cambios en la tecnología. La última actualización importante fue en 2021.

¿Es suficiente el OWASP Top 10 para la seguridad?

No, es un punto de partida. Un programa de seguridad integral incluye prácticas de codificación segura, pruebas regulares y monitoreo continuo.

Para proteger aún más tus aplicaciones, considera usar herramientas como el Analizador de registros de Nginx para monitorear y detectar actividades sospechosas en los registros de tu servidor.