El 7 de diciembre de 2023, según Beosin EagleEye, el contrato TIME en Ethereum fue víctima de un ataque de piratas informáticos, lo que resultó en una ganancia de aproximadamente $188,000 para el atacante.

Este no fue un ataque cualquiera.

Al rastrear los orígenes, se descubrió que el 4 de diciembre de 2023, Thirdweb emitió un aviso de vulnerabilidad en su blog y canales oficiales que decía: “El 20 de noviembre de 2023, nos dimos cuenta de que existe una vulnerabilidad de seguridad en la integración de un código abierto común. -Patrón de biblioteca fuente para contratos inteligentes web3. Esta vulnerabilidad afecta a algunos contratos inteligentes prediseñados de Thirdweb y nos hemos comunicado con los equipos de proyecto relevantes para mitigarla”.

El 7 de diciembre, el contrato TIME en Ethereum se convirtió en el primer proyecto víctima de este problema de seguridad. Hoy descubramos la verdad detrás de este ataque.

Descripción general de los antecedentes del protocolo

Protocolo de seguridad de metatransacción nativo ERC2771:

El protocolo EIP 2771 define un protocolo a nivel de contrato para que el contrato del destinatario acepte metatransacciones a través de un contrato de retransmisión confiable. No se realizan cambios de protocolo. El protocolo está diseñado para permitir que Ethereum acepte llamadas de cuentas externas que no tienen ETH para pagar las tarifas del gas. El protocolo envía msg.sender válido (llamado msgSender()) y msg.data (llamado msgData()) al contrato del destinatario agregando datos de llamada adicionales. La intención es permitir que Ethereum acepte llamadas de cuentas externas sin ETH para pagar las tarifas del gas.

Debido al diseño específico, msg.sender, como se describe en el protocolo, se obtiene a través de la función _msgSender(). Esta función verifica si el iniciador es un relé confiable y, de ser así, intercepta los últimos 20 bytes de los datos de llamada entrantes como iniciador de la transacción.

https://eips.ethereum.org/EIPS/eip-2771

Biblioteca de procesamiento por lotes de Muticall:
Muticall es una biblioteca de funciones proporcionada por OpenZeppelin Contracts para procesar múltiples llamadas en una sola llamada externa.

Desde el evento Time, podemos ver que la función Multicall() en su código base itera a través de las funciones DelegateCall para procesar Calldata y llamar a otras funciones en este contrato.

https://github.com/OpenZeppelin/openzeppelin-contracts

Información del evento del contrato TIME

● Transacción de ataque

0xecdd111a60debfadc6533de30fb7f55dc5ceed01dfadd30e4a7ebdb416d2f6b6

● Dirección del atacante

0xfde0d1575ed8e06fbf36256bcdfa1f359281455a

● Contrato de ataque

0x6980a47bee930a4584b09ee79ebe46484fbdbdd0

● Contrato atacado

0x4b0e9a7da8bab813efae92a6651019b8bd6c0a29

Análisis de vulnerabilidad de eventos de contrato TIME

Este ataque aprovechó principalmente un contrato de reenviador que llamaba a la función multicall del token TIME. Debido al uso del protocolo de seguridad de metatransacción nativo ERC2771 por parte del token TIME, el atacante falsificó maliciosamente _msg.sender, lo que provocó la destrucción de los tokens del par. En última instancia, el atacante se benefició del aumento del precio del token a través de los intercambios.

Flujo de ataque de evento de contrato TIME

1. El atacante utilizó inicialmente 5 WTH para intercambiarlos por aproximadamente 3,45 mil millones de tokens Time como fondos preparatorios.

2. Posteriormente, el atacante llamó a la función de ejecución del reenviador mediante la verificación de firma y pasó datos de llamada maliciosos de la siguiente manera:

3. En este punto, la función de ejecución llamaría a la dirección req.to (dirección del token de tiempo), empaquetaría los datos solicitados y la dirección req.from, y llamaría a la función de llamada múltiple del token de tiempo. ¿Cómo descartó el hacker req.from? El pirata informático estableció la longitud (tamaño) de los datos [1] en 0x38, lo que provocó que la llamada múltiple truncara la solicitud desde al analizar los datos.

4. La función multillamada llamó función de grabación, destruyendo los tokens de tiempo en el par como la persona que llama.

5. Finalmente, el atacante llamó a la función de sincronización en el par para sincronizar las reservas, lo que provocó que el precio de los tokens Time aumentara.

Al final, el hacker intercambió los tokens TIME obtenidos durante la fase de preparación por ETH en el par, lo que resultó en una ganancia de 188.000 dólares. Este ataque nos recuerda una vez más la importancia crítica de la seguridad de los contratos inteligentes. Los equipos de proyecto deben fortalecer los esfuerzos de identificación y remediación de vulnerabilidades para garantizar el desarrollo sostenible del ecosistema blockchain y la seguridad del usuario.

Contacto

Si necesita algún servicio de seguridad blockchain, bienvenido a contactarnos:

Sitio web oficial Beosin EagleEye Twitter Telegram Linkedin