Introducción de CodeMender: un agente de IA para la seguridad del código

Responsabilidad y seguridad

Publicado el 6 de octubre de 2025 autores

Raluca Ada Popa y Four Flynn

Uso de IA avanzada para corregir vulnerabilidades de software críticas

Hoy, compartimos los primeros resultados de nuestra investigación sobre CodeMender, un nuevo agente con IA que mejora la seguridad del código automáticamente.

Las vulnerabilidades de software son notoriamente difíciles y requieren mucho tiempo para que los desarrolladores encuentren y arreglen, incluso con métodos tradicionales y automatizados como Fuzzing. Nuestros esfuerzos basados ​​en IA como Big Sleep y OSS-Fuzz han demostrado la capacidad de la IA para encontrar nuevas vulnerabilidades de día cero en un software bien probado. A medida que logramos más avances en el descubrimiento de vulnerabilidad con IA, será cada vez más difícil solo para los humanos mantenerse al día.

CodeMender ayuda a resolver este problema adoptando un enfoque integral de la seguridad del código que es reactivo, parcheando instantáneamente nuevas vulnerabilidades y reescribiendo y asegurando el código existente y eliminando clases enteras de vulnerabilidades en el proceso. Durante los últimos seis meses que hemos estado construyendo CodeMender, ya hemos subido 72 soluciones de seguridad para proyectos de código abierto, incluidos algunos de tan grandes como 4.5 millones de líneas de código.

Al crear y aplicar automáticamente los parches de seguridad de alta calidad, el agente con IA de CodeMender ayuda a los desarrolladores y mantenedores a centrarse en lo que mejor hacen: construir un buen software.

Codemender en acción

CodeMender opera aprovechando las capacidades de pensamiento de los recientes modelos de pensamiento de Gemini Deep para producir un agente autónomo capaz de depurar y fijar vulnerabilidades complejas.

Para hacer esto, el agente de CodeMender está equipado con herramientas robustas que le permiten razonar sobre el código antes de hacer cambios, y validar automáticamente esos cambios para asegurarse de que sean correctos y no causen regresiones.

Animación que muestra el proceso de CodeMender para fijar las vulnerabilidades.

Si bien los modelos de idiomas grandes están mejorando rápidamente, los errores en la seguridad del código podrían ser costosos. El proceso de validación automática de CodeMender garantiza que los cambios en el código sean correctos en muchas dimensiones al surgir solo para revisión humana de parches de alta calidad que, por ejemplo, corrigen la causa raíz del problema, son funcionalmente correctas, no causan regresiones y siguen las pautas de estilo.

Como parte de nuestra investigación, también desarrollamos nuevas técnicas y herramientas que permiten a CodeMender razonar sobre el código y validar los cambios de manera más efectiva. Esto incluye:

Análisis de programas avanzados: desarrollamos herramientas basadas en el análisis avanzado del programa que incluyen análisis estático, análisis dinámico, pruebas diferenciales, solucionadores Fuzzing y SMT. Utilizando estas herramientas para analizar sistemáticamente los patrones de código, el flujo de control y el flujo de datos, CodeMender puede identificar mejor las causas raíz de las fallas de seguridad y las debilidades arquitectónicas. Por ejemplo, CodeMender utiliza una herramienta de crítica basada en modelos de lenguaje grande que resalta las diferencias entre el código original y modificado para verificar que los cambios propuestos no introduzcan regresiones y sean autocorregados según sea necesario.

Arreglar vulnerabilidades

Para parchear de manera efectiva una vulnerabilidad y evitar que resurgue, Code Mender usa un depurador, un navegador de código fuente y otras herramientas para identificar causas raíz y idear parches. Hemos agregado dos ejemplos de vulnerabilidades de parches de CodeMender en el carrusel de video a continuación.

Ejemplo #1: Identificar la causa raíz de una vulnerabilidad

Aquí hay un fragmento del razonamiento del agente sobre la causa raíz de un parche generado por CodeMender, después de analizar los resultados de la salida del depurador y una herramienta de búsqueda de código.

Aunque el parche final en este ejemplo solo cambió unas pocas líneas de código, la causa raíz de la vulnerabilidad no fue clara de inmediato. En este caso, el informe del accidente mostró un desbordamiento del búfer de montón, pero el problema real estaba en otra parte: una gestión de pila incorrecta de elementos de lenguaje de marcado extensible (XML) durante el análisis.

Ejemplo #2: el agente puede crear parches no triviales

En este ejemplo, el agente de CodeMender pudo crear un parche no trivial que se ocupa de un problema complejo de vida de objetos.

El agente no solo pudo descubrir la causa raíz de la vulnerabilidad, sino que también pudo modificar un sistema completamente personalizado para generar código C dentro del proyecto.

Reescribir proactivamente el código existente para una mejor seguridad

También diseñamos CodeMender para reescribir proactivamente el código existente para usar estructuras de datos y API más seguras.

Por ejemplo, implementamos CodeMender para aplicar anotaciones de seguridad en partes de una biblioteca de compresión de imagen ampliamente utilizada llamada libwebp. Cuando se aplican anotaciones de seguridad -fbounds, el compilador agrega verificaciones de límites al código para evitar que un atacante explote un desbordamiento o un flujo subterráneo para ejecutar código arbitrario.

Hace unos años, un actor de amenaza utilizó una vulnerabilidad de desbordamiento del búfer de montón en libwebp (CVE-2023-4863) como parte de una exploit iOS de clic cero. Con las anotaciones de seguridad -fbounds, esta vulnerabilidad, junto con la mayoría de los otros desbordamientos de búfer en el proyecto donde hemos aplicado anotaciones, se habría vuelto inexplorable para siempre.

En el video carrusel a continuación, mostramos ejemplos del proceso de toma de decisiones del agente, incluidos los pasos de validación.

Ejemplo #1: Pasos de razonamiento del agente

En este ejemplo, se le pide al agente de CodeMender que aborde el siguiente error de seguridad en bit_depths:

Ejemplo #2: el agente corrige automáticamente los errores y las fallas de prueba

Otra de las características clave de CodeMender es su capacidad para corregir automáticamente nuevos errores y cualquier fallas de prueba que surjan de sus propias anotaciones. Aquí hay un ejemplo del agente que se recupera de un error de compilación.

Ejemplo #3: el agente valida los cambios

En este ejemplo, el agente CodeMender modifica una función y luego usa la herramienta de jueces LLM configurada para la equivalencia funcional para verificar que la funcionalidad permanezca intacta. Cuando la herramienta detecta una falla, el agente se autocorrecta en función de los comentarios del juez de LLM.

Hacer que el software sea seguro para todos

Si bien nuestros primeros resultados con CodeMender son prometedores, estamos adoptando un enfoque cauteloso, centrándonos en la confiabilidad. Actualmente, todos los parches generados por CodeMender son revisados ​​por investigadores humanos antes de que se envíen aguas arriba.

Usando CodeMender, ya hemos comenzado a enviar parches a varias bibliotecas críticas de código abierto, muchas de las cuales ya han sido aceptadas y rosas. Poco a poco estamos aumentando este proceso para garantizar la calidad y abordar sistemáticamente los comentarios de la comunidad de código abierto.

También nos comunicaremos gradualmente con los mantenedores interesados ​​de proyectos críticos de código abierto con parches generados por CodeMender. Al iterando en los comentarios de este proceso, esperamos publicar CodeMender como una herramienta que todos los desarrolladores de software pueden utilizar para mantener sus bases de código seguras.

Tendremos una serie de técnicas y resultados para compartir, que pretendemos publicar como documentos técnicos e informes en los próximos meses. Con CodeMender, acabamos de comenzar a explorar el increíble potencial de la IA para mejorar la seguridad del software para todos.

Expresiones de gratitud

Créditos (listados en orden alfabético):

Alex Rebert, Arman Hasanzadeh, Carlo Lemos, Charles Sutton, Dongge Liu, Gogul Balakrishnan, Hiep Chu, James Zern, Koushik Sen, Lihao Liang, Max Shavrick, Oliver Chang y Petros Maniatis.