Saltar al contenido principal

Inyección SQL - Cómo los atacantes explotan bases de datos

Lectura de 2 min aprox.

La inyección SQL (SQL Injection) es una técnica de ataque que inserta sentencias SQL maliciosas en los formularios de entrada de una aplicación web para manipular la base de datos de forma ilícita. Es una vulnerabilidad extremadamente peligrosa que puede llevar a eludir la autenticación, robar, alterar o eliminar datos, e incluso tomar el control del servidor. Ha figurado entre los primeros puestos del OWASP Top 10 durante muchos años y, en 2024, los ataques de inyección siguen considerándose una categoría de amenaza importante.

Por qué inspeccionar la entrada no lo cierra

La causa de esta vulnerabilidad no es que en el texto introducido aparezcan símbolos peligrosos, sino que sigue existiendo una vía por la que un valor recibido del exterior se interpreta como parte de una orden. Situar la causa ahí cambia también la dirección de la respuesta. Eliminar los símbolos considerados peligrosos, o rechazar las entradas que contienen determinadas palabras, convierte el trabajo en mantener una lista de lo que hay que atrapar. Sin embargo, lo que corresponde a esa lista varía según el tipo de base de datos empleada y según cómo se escriba la instrucción, y el mismo significado puede expresarse a veces de otra manera. Al mismo tiempo, las entradas que contienen símbolos surgen también en el uso corriente del negocio. Los símbolos aparecen en los nombres, en las direcciones y en los términos de búsqueda, de modo que ampliar el alcance del rechazo bloquea entradas legítimas, mientras que reducirlo deja margen para pasar. El ajuste no puede asentarse en ninguno de los dos extremos, y el juicio sobre dónde situar el límite hay que seguir haciéndolo. Sustituir el mecanismo por otro que nunca entregue el valor como parte de una orden y solo pueda tratarlo como valor elimina por completo la necesidad de ese juicio sobre el límite. La otra cuestión que causa dificultades en la práctica es la unidad de la corrección. Cuando se confirma en una pantalla, la misma forma de componer la instrucción suele estar repetida en otras pantallas, porque la forma escrita para una función se toma como referencia al construir una función parecida. Corregir la pantalla en la que se encontró deja por tanto en el mismo estado todas las vías donde permanece esa misma forma. Lo que debe contarse no es el número de pantallas señaladas, sino cuántas formas de componer el valor existen y en cuántos lugares se usa cada una.

El flujo de la inyección SQL

Introducir SQL malicioso
El servidor ejecuta el SQL
Se obtienen datos de la BD de forma ilícita
Filtración de información / manipulación

Cómo funciona el ataque

Los programas que incorporan la entrada del usuario directamente en las sentencias SQL se convierten en objetivos de ataque. Por ejemplo, al introducir «' OR 1=1 --» en un formulario de inicio de sesión, un atacante puede eludir la autenticación, o usar una cláusula UNION para obtener datos de otras tablas. Con la inyección SQL a ciegas (blind SQL injection), aunque no se muestre ningún mensaje de error, se pueden inferir los datos a partir de las diferencias en las respuestas verdadero/falso.

Escenarios de daño concretos

Un error común es pensar que «la inyección SQL es una técnica de ataque antigua que no ocurre en los sistemas modernos». En realidad, todavía se encuentra código que construye SQL mediante la concatenación de cadenas sin usar consultas parametrizadas, incluso en la modernización de sistemas heredados y en el desarrollo nuevo. También en 2024 se reportaron casos de millones de registros de clientes filtrados desde las bases de datos de grandes empresas mediante inyección SQL. Dado que los atacantes usan herramientas automatizadas (como sqlmap) para buscar sitios vulnerables de forma eficiente, incluso los sitios pequeños se convierten en objetivos.

Preparación como usuario

La inyección SQL es una vulnerabilidad del lado del servidor, pero los usuarios también deben estar preparados. Si estableces una contraseña única y aleatoria para cada servicio, aunque ocurra una filtración de datos en uno de ellos, tus demás cuentas seguirán seguras. Si un servicio que utilizas anuncia una filtración de datos, cambia tu contraseña de inmediato.

Términos relacionados

¿Te resultó útil este artículo?