jueves, 14 de enero de 2010

Vulnerabilidades: Inyección SQL

La inyección de código SQL pertenece al tipo de ataques de validación de entradas del usuario. Nos encontramos con una vulnerabilidad web que se encuentra en un gran número de aplicaciones de ese tipo y su potencial destructivo es enorme. SQL Server no ha sido una excepción a este respecto, y continuamente han ido apareciendo actualizaciones y parches de seguridad para solventar problemas de esa índole con las consecutivas versiones que Microsoft ha ido sacando al mercado, pero es un problema que parece no tener fin, a menudo por la falta de concienciación de seguridad de algunos programadores. Los programadores principiantes (y otros no tan principiantes) descuidan en ocasiones el código por desconocimiento, despistes o simplemente por comodidad.

La vulnerabilidad puede ocurrir cuando un programa construye descuidadamente una sentencia SQL, con parámetros dados por el usuario, para luego hacer una consulta a una base de datos. Dentro de los parámetros dados por el usuario podría venir el código SQL inyectado. Al ejecutarse esa consulta, el código SQL inyectado hace lo propio y podría hacer un sinnúmero de cosas, como insertar registros, modificar o eliminar datos, autorizar accesos, e incluso, llegar a ejecutar código malicioso en el computador.

Se trata por tanto de un problema de seguridad verdaderamente preocupante, ya que no requiere que el atacante tenga una elevada cualificación. Uno de los usos más simples es hacer uso de la inyección SQL para burlar una identificación y permitir el acceso no autorizado a una base de datos, pero esto es únicamente la punta del iceberg, puesto que el potencial de esta vulnerabilidad asciende al desastre total.

Por desgracia, Microsoft SQL Server es una de las aplicaciones que se muestran más vulnerables a ataques de inyección, dado que permite explotar el fallo más fácilmente por haber contemplado la posibilidad de concatenar consultas y la ejecución de sentencias múltiples. Además posee opciones que facilitan el acceso al sistema, como la ejecución de comandos desde la inyección (xp_cmdshell).

Todos los procedimientos que generan instrucciones SQL deben revisarse en busca de errores que den pié a ataques de este tipo, ya que SQL Server ejecutará todas las consultas recibidas que sean válidas desde el punto de vista sintáctico. Cabe mencionar que también existe un ataque menos directo que inyecta código dañino en cadenas destinadas a almacenarse en una tabla o como metadatos. Cuando las cadenas almacenadas se concatenan posteriormente en un comando SQL dinámico, se ejecuta el código dañino, pudiendo este quedar oculto en la base de datos temporalmente hasta que se accede a él y se produce el desastre.

No hay comentarios:

Publicar un comentario en la entrada