Los 10 riesgos de seguridad más críticos en aplicaciones web del 2013

OWASP (Open Web Application Security Project), publicaba recientemente su top 10 de vectores de ataque en aplicaciones y servicios web (ES), centrándose por tanto en las debilidades, y no en el nombre de los servicios que están por detrás, como ya vimos en el Top10 de vulnerabilidades de Kaspersky. Una iniciativa abierta que pone de manifiesto la filosofía comunitaria de la web, al tratarse este de un proyecto dirigido distribuidamente entre miles de expertos que, desinteresadamente, ya van por el quinto ranking de estas características (el primero fue en 2003, hubo otro en 2004, otro en 2007 y otro en 2010).

owasp-top-10-v2013

Respecto a los datos del año pasado, cabe mencionar que el de este año cubre más ámbitos, unificando algunos vectores que en 2010 se consideraron más específicos, y como viene siendo habitual, hay algunos nuevos y otros que aunque siguen en el top, han caído o ganado puestos.

10.- Redirecciones y reenvíos no validados: Algo bastante común con iframes publicitarios, que redirigen a webs con código malicioso, y que en muchos casos están alojados en servicios totalmente lícitos.

9.- Utilización de componentes con vulnerabilidades conocidas: Con la evolución de estos servicios, no es raro usar en un proyecto librerías o software que en sí puede ser un vector de ataque. Los CMS como WordPress o Joomla son un claro ejemplo, al representar servicios ampliamente conocidos y utilizados para la creación de webs, y que es de vital importancia mantener actualizados, ya que continuamente aparecen nuevos ataques y se parchean otros.

8.- Falsificación de Peticiones en Dominios Cruzados o Cross-site Request Forgery (CSRF): Anteriormente estaba en el puesto 5, por lo que ha bajado, y no por ello no se debe tener en cuenta. Hablamos de Cross-Site ocurre cuando un atacante consigue entablar conexión y utilizar los privilegios de un usuario legítimo de un servicio web, pudiendo hacer acciones que de otra manera no podría, y por supuesto, sin el conocimiento por parte del usuario.

7.- Ausencia de control de acceso a funciones: Es una generalización de la antigua categoría 8. Básicamente hablamos de este tipo de ataque cuando en nuestro servicio hay al menos alguna URL o dato que nos permite saltarnos las verificaciones oportunas. Quizás el mejor ejemplo sean los ataques mediante buscadores (Google, Bing), cuando el interesado es capaz de acceder a una web por algún camino en el que sin necesidad de loguearse ya aparece como tal (quizás el haber enlazado a una página de reseteo de contraseña no dinámica).

6.- Exposición de datos sensibles: Otra generalización, en este caso que aglutina al antiguo número 7 y 9, y que por tanto ha ganado varios puestos. Sobre este tema, se puede encontrar muchísima más información en la LOPD, ya que trata uno de los temas que más portadas están robando estos últimos meses. Los malos hábitos a la hora de guardar o recopilar información sensible en un servicio web pueden pasarle factura cuando un atacante es capaz de sustraerlos.

5.- Configuración de seguridad incorrecta: A mi punto de vista peca de ser demasiado generalista, ya que define los posibles fallos de seguridad que pudieran afectar al buen desempeño del servicio atendiendo tanto a la arquitectura de cliente-servidor como a los procesos y sistemas usados. Es decir, hablaríamos de cualquier fallo que pudiera deberse a una mala gestión de los recursos de una máquina, de la base de datos, de los directorios utilizados,… Lo que viene a decir, es que se debería estudiar cada elemento como un todo, algo que por lo general no se hace.

4.- Referencias directas inseguras a objetos: Bajo este nombre se aglutinan todos aquellos casos en los que el desarrollador ha puesto al acceso de cualquiera sin privilegios datos o recursos del servicio web críticos o sensibles, como bien puede ser acceso a la base de datos, a un directorio,…

3.- Cross Site Scripting: Y llegamos así al top 3, con un clásico presente en todos los tops de seguridad web. Normalmente apoyado en javascript, permite usando alguno de los exploits de esta máquina escalar privilegios para obtener el acceso a datos del navegador, como bien pueden ser inicios de sesión, historial o cookies del usuario.

2.- Pérdida de autenticación y gestión de sesiones: Anteriormente en el puesto 3, ocurre cuando un atacante es capaz de asumir la identidad de un usuario, comprometiendo así el acceso a los credenciales o tokens del mismo.

1.- Inyecciones de código: Ya sea SQL o LDAP, encabeza el top, al tratarse de uno de los factores más críticos en este tipo de servicios. Como ya hablamos en su momento en el artículo respectivo de la serie #MundoHacker, ocurre cuando cualquier intérprete (por lo general PHP) es sensible de forzarse aprovechando una consulta (como bien puede ser un formulario mal diseñado).

Como podéis ver, muchos de estos ya los habíamos tratado en el tutorial sobre exploits webs, donde además doy algunas posibles soluciones al respecto.