OWASP Top 10: vulnerabilidades web críticas

Las amenazas más explotadas en aplicaciones web y cómo prevenirlas con medidas concretas

11 min

El OWASP Top 10 es el estándar de referencia para identificar los riesgos de seguridad más críticos en aplicaciones web. Publicado por la Open Worldwide Application Security Project, se actualiza periódicamente en base a datos reales de miles de organizaciones y millones de vulnerabilidades detectadas.

Conocer este ranking no es solo un ejercicio académico: es una hoja de ruta práctica para priorizar esfuerzos de seguridad. Cada vulnerabilidad del Top 10 tiene patrones de detección claros y medidas de prevención probadas que cualquier equipo de desarrollo puede implementar.

A01: Control de acceso roto

El control de acceso roto ocupa el primer puesto porque es la vulnerabilidad más encontrada en aplicaciones reales. Se produce cuando un usuario puede acceder a recursos o ejecutar acciones que no le corresponden: ver datos de otros usuarios, modificar permisos o acceder a funciones administrativas.

La prevención pasa por denegar acceso por defecto, implementar controles de acceso en el servidor (nunca confiar en el cliente), aplicar el principio de mínimo privilegio y registrar todos los fallos de control de acceso para detectar patrones de ataque.

A02: Fallos criptográficos

Esta categoría cubre la exposición de datos sensibles por uso incorrecto o ausencia de criptografía. Incluye transmitir datos sin TLS, almacenar contraseñas en texto plano, usar algoritmos obsoletos (MD5, SHA-1, DES) o generar claves criptográficas débiles.

Clasifica todos los datos que tu aplicación maneja y aplica cifrado apropiado tanto en tránsito (TLS 1.2+) como en reposo (AES-256). Usa bcrypt o Argon2 para contraseñas. No almacenes datos sensibles que no necesites.

A03: Inyección

Las vulnerabilidades de inyección —SQL, NoSQL, OS command, LDAP— ocurren cuando datos no confiables se envían a un intérprete como parte de un comando o consulta. El atacante puede leer, modificar o eliminar datos, o incluso ejecutar comandos en el servidor.

  • Usa siempre queries parametrizadas o prepared statements, nunca concatenes entrada del usuario en consultas
  • Aplica validación de entrada con allowlists en el servidor
  • Implementa escape de caracteres especiales según el contexto (SQL, HTML, JavaScript)
  • Limita los privilegios de la cuenta de base de datos que usa tu aplicación

A04: Diseño inseguro

Introducida en la edición 2021, esta categoría señala que muchos problemas de seguridad nacen en la fase de diseño, no en la implementación. Un diseño inseguro no se puede arreglar con una implementación perfecta: si el flujo de recuperación de contraseña depende solo del email, por ejemplo, ningún código puede compensar esa debilidad arquitectónica.

La prevención requiere modelado de amenazas desde el inicio del proyecto, revisión de requisitos de seguridad y uso de patrones de diseño seguros. Frameworks como STRIDE o PASTA ayudan a identificar riesgos de diseño antes de escribir código.

A07: XSS y ataques del lado del cliente

Cross-Site Scripting (XSS) permite a un atacante inyectar scripts maliciosos en páginas que ven otros usuarios. Puede robar sesiones, redirigir a sitios de phishing o manipular el contenido de la página. Existen tres variantes: reflected, stored y DOM-based.

Cross-Site Request Forgery (CSRF) engaña al navegador del usuario para que ejecute acciones no deseadas en un sitio donde está autenticado. La prevención de XSS requiere escapar toda salida según su contexto y usar Content-Security-Policy. Para CSRF, implementa tokens anti-CSRF y valida el header Origin.

A05: Configuración de seguridad incorrecta

La configuración por defecto de la mayoría de servidores, frameworks y servicios cloud no es segura. Puertos abiertos innecesarios, credenciales por defecto, mensajes de error verbosos, listado de directorios habilitado o cabeceras de seguridad ausentes son errores de configuración explotables.

  • Implementa un proceso de hardening repetible y documentado para cada entorno
  • Elimina funcionalidades, componentes y documentación que no se utilicen
  • Automatiza la verificación de configuraciones con herramientas como Ansible, Terraform o CIS Benchmarks
  • Revisa configuraciones de seguridad cloud (S3 público, security groups permisivos) con herramientas como ScoutSuite o Prowler

A06: Componentes con vulnerabilidades conocidas

Las aplicaciones modernas dependen de decenas o cientos de librerías de terceros. Si alguna tiene una vulnerabilidad conocida (CVE) y no se actualiza, tu aplicación hereda ese riesgo. El ataque a Log4j en 2021 demostró el impacto devastador de una sola dependencia vulnerable.

Mantén un inventario actualizado de dependencias con sus versiones. Usa herramientas como Dependabot, Snyk o Renovate para recibir alertas automáticas de vulnerabilidades. Establece un SLA interno para parchear dependencias críticas en menos de 48 horas.

Puntos clave

  • El control de acceso roto y los fallos criptográficos encabezan las vulnerabilidades más críticas
  • Las inyecciones se previenen con queries parametrizadas y validación de entrada estricta
  • El diseño inseguro no se arregla con código: requiere modelado de amenazas desde el inicio
  • Las dependencias vulnerables son un vector de ataque masivo: automatiza su monitorización
  • Una configuración segura es tan importante como un código seguro

¿Quieres evaluar tu aplicación frente al OWASP Top 10?

Realizamos auditorías de seguridad basadas en OWASP para identificar y corregir vulnerabilidades antes de que sean explotadas.