Demuestran que la IA no está preparada para quitar el trabajo a un programador: "Escribe código, pero la mitad no es seguro"

Generada con IA

Un nuevo estudio demuestra que el 45% del código generado por la inteligencia artificial es funcional, pero presenta varias vulnerabilidades reconocidas.

Los grandes modelos de lenguaje natural –o LLM– son expertos en generar código funcionalmente correcto mediante un prompt, aunque están introduciendo vulnerabilidades de seguridad "a un ritmo alarmantemente alto".

Es la principal conclusión que se desprende del estudio 2025 GenAI Code Security Report, que ha identificado diferentes vulnerabilidades en la generación de código con estos modelos de lenguaje en 4 lenguajes de programación diferentes: Java, Javascript, C# y Python.

"En parte, refleja el hecho de que una fracción significativa de los ejemplos de código utilizados para el entrenamiento contienen fallos de seguridad", advierten los investigadores de Veracode, una plataforma líder en gestión de riesgos en la era de la inteligencia artificial. 

"También refleja el hecho de que los modelos no pueden descubrir fácilmente propiedades del programa, a diferencia de lo que ocurre cuando los datos están controlados por el usuario, que son cruciales para la correcta corrección de los fallos", agregan en relación a la importancia de programadores humanos.

A diferencia de lo que se podría pensar, no hay gran diferencia en lo que tiene ver con modelos pequeños o grandes, ya que todos han mostrado deficiencias en la seguridad del código: el 45% de las tareas resultantes no eran código seguro.

"Nuestros resultados generales indican que los modelos tienen un bajo rendimiento en seguridad y que, sorprendentemente, este se mantiene prácticamente igual en todos los tamaños de modelo y a lo largo del tiempo: los modelos más nuevos y de mayor tamaño no generan un código significativamente más seguro", aseguran.

Para comprobar esto, los investigadores desarrollaron una serie de 80 tareas de código en los lenguajes ya mencionados e identificaron mediante herramientas de análisis estático –sin ejecutar el código– si mantenían vulnerabilidades reconocidas.

Estas han sido algunas muy conocidas en el ámbito de la ciberseguridad, como CWE 89 –inyección SQL–, CWE 80 –cross-site scripting o XSS–, CWE 117 –inyección de registro– y CWE 327 –algoritmos rotos–.

En este sentido, el estudio ha comprobado que los modelos muestran un buen rendimiento en seguridad en las vulnerabilidades que tienen que ver con la inyección SQL o los algoritmos rotos, pero no lo hace tan bien en lo que tiene que ver con XSS e inyección de registro.

En cuanto a los diferentes lenguajes de programación, no hay grandes diferencias entre Python, C# y Javascript, aunque sí se puede ver un rendimiento muy pobre en seguridad si se habla de Java.

"Creemos que los programadores suelen centrarse en la funcionalidad del código que necesitan generar y no siempre son conscientes de cuándo puede tener implicaciones de seguridad", detallan sobre su metodología. 

"Por lo tanto, hemos adoptado un enfoque que añade mínima información adicional a la solicitud para exponer el comportamiento del modelo en ausencia de solicitudes específicas de seguridad", añaden.

Aquí también celebran la labor de los programadores humanos, ya que un desarrollador no necesita especificar restricciones de seguridad para obtener el código que necesita. Desafortunadamente, esto queda en manos del modelo en cuestión, algo que no es lo más seguro.

"Por ejemplo, un desarrollador puede solicitar a un modelo que genere una consulta a la base de datos sin especificar si el código debe construir la consulta mediante una sentencia preparada (segura) o concatenación de cadenas (insegura)", continúan. "Por lo tanto, la decisión queda en manos del modelo".

Otros artículos interesantes: