← Últimos artículos
💻 computer science

Pre-Model Representation Failures in GNN-Based Smart Contract Vulnerability Detection

Este artículo presenta un análisis de fallos de los detectores de vulnerabilidades de contratos inteligentes basados en GNN, revelando que fallos críticos en la capa de representación de grafos —tales como listas blancas de variables predefinidas, ambigüedades estructurales y ausencia de nodos semánticos— pueden causar que códigos idénticos produzcan grafos distintos y que contratos totalmente explotables sean clasificados erróneamente como seguros, lo que de este modo hace que las mejoras posteriores del modelo resulten ineficaces.

Autores originales: Birindwa Prisca Hondi, Chinoso Philip Nwishienyi, Charity Wanja Mwaura, Alia Teto, Jema David Ndibwile

Publicado 2026-08-18
📖 6 min de lectura🧠 Análisis profundo

Autores originales: Birindwa Prisca Hondi, Chinoso Philip Nwishienyi, Charity Wanja Mwaura, Alia Teto, Jema David Ndibwile

Artículo original bajo licencia CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta es una explicación generada por IA del artículo a continuación. No ha sido escrita ni avalada por los autores. Para mayor precisión técnica, consulte el artículo original. Leer descargo de responsabilidad completo

En el mundo digital de las finanzas descentralizadas, el dinero se mueve a través de programas informáticos de ejecución automática llamados contratos inteligentes. Estos programas viven en una cadena de bloques (blockchain), un libro de contabilidad público que registra cada transacción, y están diseñados para gestionar activos reales sin intermediarios humanos. Debido a que estos contratos gestionan fondos valiosos, un solo fallo oculto puede provocar un robo inmediato e irreversible. Para protegerse contra esto, los investigadores han desarrollado sistemas automatizados que escanean el código para encontrar debilidades antes de que sean explotadas. Un enfoque popular utiliza un tipo de inteligencia artificial conocida como red neuronal de grafos. Para entender cómo funciona esto, imagine convertir una pieza compleja de código en un mapa de puntos y líneas conectados, donde los puntos representan partes del programa y las líneas muestran cómo interactúan. La computadora luego estudia este mapa para decidir si el programa es seguro o peligroso. La esperanza es que, al observar la estructura del código en lugar de simplemente leerlo línea por línea, estos sistemas puedan detectar trampas sutiles que los humanos podrían pasar por alto.

Un equipo de investigadores de la Universidad Carnegie Mellon África decidió poner a prueba la base misma de este enfoque. Se centraron en un sistema específico llamado GNNSCVulDetector, que se utiliza ampliamente para encontrar un fallo peligroso conocido como reentrada (reentrancy). Este fallo ocurre cuando un programa envía dinero hacia afuera antes de actualizar sus propios registros, permitiendo que un ladrón engañe al sistema para que pague más de lo que debería. Los investigadores no probaron qué tan bien aprende la computadora o qué tan rápido piensa. En su lugar, investigaron el paso que ocurre antes de que la computadora vea siquiera los datos: el proceso de convertir el código fuente en el mapa. Querían saber si el mapa reflejaba con precisión el código que debía representar. Su investigación reveló una verdad sorprendente: el proceso de creación del mapa estaba roto de formas que ningún entrenamiento podría solucionar.

El primer problema que encontraron fue que el sistema era fácilmente engañado por cambios simples en el código. Los investigadores tomaron un contrato vulnerable conocido y simplemente renombraron sus partes, cambiando el nombre del contrato mismo, los nombres de sus funciones y los nombres de las variables que contenían el dinero. También añadieron líneas de código que no hacían nada, solo para abarrotar el archivo. En un mundo normal, estos cambios harían que el programa pareciera diferente, incluso si la lógica peligrosa permanecía igual. Sin embargo, cuando los investigadores introdujeron tanto el original como las versiones modificadas en el sistema, la computadora produjo mapas que eran idénticos hasta el último byte. El sistema no podía notar la diferencia entre los dos. Esto significa que un atacante podría eludir la verificación de seguridad simplemente renombrando variables, sin necesidad de saber nada sobre cómo funciona el detector o qué datos con los que fue entrenado. El sistema era ciego a la estructura real del código, viendo solo un patrón rígido de nombres.

Profundizando más, los investigadores descubrieron por qué sucedió esto. La herramienta que construye el mapa no lee ni entiende realmente el código como un programador humano. En su lugar, depende de una lista predefinida de cuarenta y siete nombres de variables específicos que tiene permitido reconocer. Si el código usa un nombre de esta lista, la herramienta crea un nodo en el mapa. Si el nombre no está en la lista, la herramienta lo ignora o crea un marcador de posición genérico. Los investigadores probaron esto creando cuatro contratos diferentes que tenían exactamente el mismo fallo peligroso pero usaban nombres diferentes para las variables de dinero. Cuando el nombre de la variable coincidía perfectamente con la lista, el mapa lucía normal. Cuando el nombre era ligeramente diferente, el mapa cambiaba de formas confusas. Cuando el nombre era completamente nuevo y no estaba en la lista, el mapa se degradaba, perdiendo detalles importantes. En el peor de los casos, cuando ningún nombre coincidía en absoluto, la herramienta fabricaba partes del mapa que no existían en el código original, creando una estructura basada en nada más que sus propias reglas internas. Esto significaba que la calidad del mapa dependía enteramente de si el programador había usado uno de los cuarenta y siete nombres aprobados.

El segundo fallo importante involucró una parte específica del mapa que representa al atacante. En el diseño del sistema, hay un nodo destinado a representar al llamador externo (external caller): la entidad externa que desencadena el ataque. Para que exista un fallo de reentrada, este llamador externo debe estar presente en el mapa. Los investigadores descubrieron que, para el ejemplo más famoso de un contrato vulnerable en la literatura, este nodo estaba completamente ausente. La herramienta no logró dibujar la conexión entre el atacante y la función vulnerable, a pesar de que el código mostraba claramente que esto sucedía. Esto no fue una limitación del diseño del mapa, ya que otros contratos en los datos de entrenamiento sí mostraban esta conexión. Fue una inconsistencia en cómo la herramienta decidía construir el mapa. Debido a que la conexión faltaba, la computadora no tenía forma de ver el patrón de ataque, aunque el patrón estaba allí mismo en el código.

Para demostrar que esta pieza faltante causaba el fallo del sistema, los investigadores construyeron un contrato mínimo y diseñado a propósito que contenía un fallo de reentrada totalmente explotable. Utilizaron un nombre de variable que se sabía que estaba en la lista aprobada, asegurando que el primer problema con el renombramiento no interfirera. Introdujeron este contrato en el sistema. El resultado fue una clasificación errónea clara: el sistema etiquetó el contrato peligroso como seguro. La razón fue simple y directa. Debido a que la herramienta falló al dibujar la conexión entre el llamador externo y la función vulnerable, el mapa carecía de la señal crítica necesaria para identificar la amenaza. La computadora no se equivocó en su cálculo; simplemente estaba trabajando con una imagen incompleta. La información necesaria para tomar la decisión correcta había sido descartada antes de que la computadora comenzara a pensar.

Estos hallazgos sugieren que los altos números de precisión reportados en estudios previos son engañosos porque fueron medidos bajo condiciones que no expusieron estos fallos. Los sistemas funcionaron bien solo porque los datos de prueba utilizaban precisamente los nombres y patrones que la herramienta podía reconocer. En el mundo real, donde el código se escribe con diferentes convenciones de nomenclatura y estructuras, estos sistemas pueden fallar silenciosamente. Los investigadores enfatizan que mejorar el modelo de inteligencia artificial en sí mismo no resolverá este problema. Ninguna cantidad de mejor entrenamiento o más datos puede arreglar un mapa que fue dibujado incorrectamente en primer lugar. La solución requiere cambiar la forma en que el código se convierte en un mapa, pasando de una simple coincidencia de nombres hacia una comprensión más profunda de lo que el código realmente hace. Hasta que la base no se arregle, los sistemas de seguridad construidos sobre ella seguirán siendo vulnerables a los mismos ataques que pretenden prevenir.

¿Ahogado en artículos de tu campo?

Recibe resúmenes diarios de los artículos más novedosos que coincidan con tus palabras clave de investigación — con resúmenes técnicos, en tu idioma.

Probar Digest →