Blog

Feliz cumpleaños inyección SQL, el error que no se puede eliminar

March 17, 2021
Dr. Matias Madou
Pastel de capas colorido con chispas en forma de estrella y estrellas de fondant sobre un plato floral y una base azul.

Una versión de este artículo apareció originalmente en Help Net Security. Ha sido actualizado y distribuido aquí.

‍

Si trabajas en un puesto de ciberseguridad práctico, uno que requiera cierta familiaridad con el código, es muy probable que hayas tenido que pensar en la inyección SQL... una y otra vez. Es una vulnerabilidad común que, a pesar de conocerse su remedio bastante sencillo a las pocas semanas de su primer descubrimiento, sigue plagando nuestro software y ofreciendo una pequeña ventana de oportunidad a posibles atacantes si no se detecta antes de la implementación.

El 13 de diciembre de 2020 se cumplieron 22 años de la inyección SQL y, aunque esta vulnerabilidad ya tiene edad suficiente para beber, dejamos que nos supere en lugar de eliminarla de una vez por todas. En agosto de este año, Freepik Company reveló que había sido víctima de un error de inyección SQL que comprometió las cuentas de 8,3 millones de usuarios. Aunque muchos de ellos utilizaban inicios de sesión de terceros (por ejemplo, Google, Facebook), a unos pocos millones se les expusieron contraseñas sin cifrar junto con su nombre de usuario. Lamentablemente para ellos y para muchos otros, las consecuencias de estos incidentes son un gran dolor de cabeza, y recuperar la confianza de la base de usuarios es un proceso a largo plazo.

Mientras "celebramos" este hito con lo que se considera un problema heredado, analicémoslo por un momento. ¿Por qué sigue apareciendo, por qué sigue siendo tan peligrosa que no ha salido del primer puesto de la lista OWASP Top 10 durante años y por qué su solución, relativamente sencilla, no llega a formar parte de los estándares generales de referencia para el desarrollo de software?

¿Por qué sigue siendo relevante la inyección SQL en 2021?

Un vistazo rápido a una brecha reciente de alto perfil, el devastador ciberataque a FireEye, revela un nivel asombroso de sofisticación: fue un ataque altamente coordinado, perpetrado por un Estado-nación, que utilizó una amplia gama de técnicas avanzadas que parecían estar personalizadas para el robo a FireEye. En un comunicado, el CEO de FireEye, Kevin Mandia, dijo:

“Los atacantes adaptaron sus capacidades de clase mundial específicamente para apuntar y atacar a FireEye. Están altamente capacitados en seguridad operativa y ejecutaron el ataque con disciplina y enfoque... utilizaron una combinación novedosa de técnicas que ni nosotros ni nuestros socios habíamos visto en el pasado.”

Es una pesadilla para cualquier CISO, y si algo así puede sucederle a FireEye, pone en perspectiva lo vulnerables que son realmente muchas empresas.

… excepto que son noticias aún peores para la organización promedio. FireEye es una de las empresas de ciberseguridad más reconocidas del mundo, y el ataque exitoso contra ellos requirió que delincuentes de nivel maestro utilizaran todo lo que tenían en una ejecución coordinada a gran escala. Para muchas empresas, una brecha de datos lucrativa podría ser posible explotando un simple error, bastante rápido y sin necesidad de ningún genio. Y la inyección SQL es un ejemplo común de esto último, que sigue siendo aprovechado por aficionados que buscan ganar dinero rápido en la Dark Web.

En mayo de 2020, un hombre fue acusado de tráfico de tarjetas de crédito y delitos de piratería informática, cuando se le encontró con medios digitales que almacenaban cientos de miles de números de tarjetas de crédito activos. Los obtuvo todos utilizando técnicas de inyección SQL, en una operación que comprometió a muchas empresas y a millones de sus clientes.

Como industria, estamos mejorando todo el tiempo, pero la inyección SQL sigue siendo una amenaza importante y afecta a mucho más que a sistemas heredados o sin parches.

Por qué los desarrolladores la mantienen viva (y por qué no es su culpa)

Seguimos diciendo que la inyección SQL es fácil de solucionar y que el código debería escribirse de manera que no la introduzca en absoluto. Como la mayoría de las cosas, solo es fácil cuando te han enseñado a hacerlo bien.

Aquí es donde el proceso de desarrollo de software empieza a fallar. Los desarrolladores cometen los mismos errores, lo que lleva a que vulnerabilidades recurrentes como la inyección SQL se infiltren en el código. Sin embargo, esto no debería ser una sorpresa. La mayoría de los ingenieros terminan su carrera sin haber aprendido mucho sobre codificación segura, si es que aprendieron algo. La mayor parte de la formación en el trabajo es inadecuada, especialmente en un entorno donde la seguridad no se considera una prioridad empresarial en su función.

No les estamos dando a los desarrolladores una razón para preocuparse por la seguridad, ni una plataforma sólida para empezar a ser más conscientes de ella. Los patrones de codificación deficientes mantienen vivos errores como la inyección SQL, y debemos poner más énfasis en la concienciación sobre seguridad de los desarrolladores, además de darles tiempo para escribir código seguro y de mayor calidad. Los patrones de codificación segura pueden tardar más en escribirse, pero el tiempo invertido allí crea eficiencias que son invaluables más adelante en el proceso.

¿Habrá algún día un funeral para la inyección SQL?

La metáfora del funeral es un poco morbosa, pero, en realidad, nuestros datos confidenciales estarían más seguros si la inyección SQL fuera enterrada para siempre. Sin embargo, estoy muy seguro de que celebraremos algunos cumpleaños más antes de que eso suceda, porque la cultura en torno a la seguridad preventiva y el énfasis en la codificación segura simplemente no ha evolucionado lo suficiente como para empezar a cerrar el ataúd.

Lenguajes más nuevos y con mayor seguridad, como Rust, están ayudando a erradicar algunos de los errores con los que hemos lidiado durante mucho tiempo mediante el uso de funciones más seguras, pero existe una enorme cantidad de software heredado, sistemas antiguos y bibliotecas que seguirán en uso y potencialmente vulnerables.

La responsabilidad compartida de la seguridad en el proceso de desarrollo (hola, DevSecOps) será crucial si queremos acabar definitivamente con las vulnerabilidades "fáciles". Se debe involucrar a los desarrolladores desde el principio y apoyarlos para que asuman su parte de responsabilidad en la creación de código más seguro y de mayor calidad.

¿Cómo deberían los desarrolladores abordar la corrección de un error de inyección SQL en su código?

Hemos preparado una guía completa para los desarrolladores que deseen aprender a identificar y corregir la inyección SQL. Con un desafío gamificado en el lenguaje de programación que elijan (¡incluso COBOL!), esta guía ofrece una base de aprendizaje excelente que ayudará a todo desarrollador a crear código más seguro y de mayor calidad.

Eslogan

Controle el desarrollo impulsado por IA antes de su lanzamiento

Mida el riesgo asistido por IA, aplique políticas de codificación segura en el momento de la confirmación y acelere la entrega segura en todo su ciclo de vida de desarrollo de software (SDLC).

Reservar una demostración
Biblioteca de recursos

Explorar más blogs

Acceda a contenido especializado sobre programación segura, gobernanza de IA y gestión de riesgos de software.

ver todo
Caso de estudio
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Una cultura de seguridad: cómo Sage creó su programa de defensores

Descubre cómo Sage reforzó su seguridad con un enfoque flexible y centrado en las relaciones, logrando formar a más de 200 expertos en seguridad y alcanzar una reducción de riesgos cuantificable.

Más información
Icono de ventana de navegador con las letras KVK en negrita y dos líneas horizontales azules debajo sobre un fondo azul degradado.
Caso de estudio
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Kamer van Koophandel: Seguridad a escala impulsada por los desarrolladores

La Cámara de Comercio (Kamer van Koophandel) comparte cómo integró la programación segura en el desarrollo diario mediante certificaciones basadas en roles, evaluaciones comparativas de puntuación de confianza y una cultura de responsabilidad compartida en seguridad.

Más información
Logotipo de Insurance Australia Group con texto y un icono en azul y gris dentro del diseño de una ventana de navegador web.
Caso de estudio
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Cómo un «Juego de Códigos» guía a IAG Group hacia un futuro de programación más seguro

IAG Group es la entidad detrás de muchas de las principales compañías de seguros en la región de Asia-Pacífico, que suscribe pólizas para millones de clientes por un valor aproximado de 11.400 millones de dólares australianos en primas anuales.

Más información
Blog
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Mes de la Concienciación sobre Ciberseguridad 2026: Comprender la seguridad de la IA es fundamental para la defensa empresarial

Hemos llegado a un punto en el que la mayoría de las principales empresas de IA han pedido públicamente una ralentización global en el desarrollo de la IA para que las medidas de seguridad puedan ponerse al día, pero la verdad es que ya se han materializado graves problemas de seguridad. Esto deja a innumerables líderes de seguridad y equipos ejecutivos en una situación urgente, a medida que los costes monetarios y de riesgo de la implementación de la IA siguen acumulándose.

Más información
Blog
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Habilitador 8: Branding de su programa

Un programa de codificación segura necesita algo más que un buen contenido para tener éxito. El Habilitador 8 muestra cómo el branding transforma la participación en una experiencia codiciada basada en el estatus.

Más información
Blog
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Cada empleado está ahora en la primera línea de la ciberseguridad de la IA

El panorama tecnológico empresarial está cambiando a una velocidad que pocos previeron hasta que fue demasiado tarde. Hemos cruzado oficialmente el umbral del código escrito por humanos y la asistencia básica de copilotos hacia la era del Ciclo de Vida de Desarrollo Agéntico (ADLC). Si bien los agentes de IA autónomos prometen una eficiencia sin precedentes en múltiples funciones, también traen consigo una clase completamente nueva de riesgos regulatorios y de seguridad.

Más información

Proteja el desarrollo basado en IA antes de su lanzamiento

Identifique riesgos de desarrollo, aplique políticas y prevenga vulnerabilidades en todo el ciclo de vida de su software.

Reservar una demostración
No se encontraron elementos.