El cazador cazado luego que un bot MEV robara $7,8 millones a un hacker en la mempool de Ethereum

El cazador cazado luego que un bot MEV robara $7,8 millones a un hacker en la mempool de Ethereum

El ecosistema de las finanzas descentralizadas (DeFi) ha vuelto a presenciar una de sus dinámicas más vertiginosas y despiadadas, la ley del más rápido en la mempool es el que se queda con el botín.

Y es que, en una secuencia de eventos celebrada en la red de Ethereum, un ciberdelincuente identificó una vulnerabilidad crítica en una billetera de alto patrimonio y diseñó una compleja maniobra para extraer 7,8 millones de dólares en activos.

Sin embargo, en cuestión de milisegundos y dentro del mismo bloque de transacciones, un bot de Valor Máximo Extraíble (MEV, «por sus siglas en inglés») conocido como “Yoink” detectó la jugada, se adelantó al atacante y se adjudicó la totalidad del monto transaccionado.

 


El incidente, que no afectó la seguridad de los contratos inteligentes principales del protocolo de re-staking Kelp DAO ni la infraestructura base de Gnosis Safe, ofrece una lección magistral sobre los peligros de los módulos personalizados con permisos excesivos y el funcionamiento de la “jungla oscura” que constituye la sala de espera de transacciones en Ethereum.

Para comprender el origen de la brecha, es necesario analizar la estructura operativa de la víctima, una billetera de tipo multifirma Gnosis Safe identificada con la dirección 0x40E9, la cual es un tipo de billeteras ampliamente utilizado por instituciones y usuarios de alto patrimonio gracias a su robusto diseño de seguridad.

Sin embargo, la arquitectura de Safe permite adjuntar “módulos” de terceros como contratos inteligentes complementarios diseñados para automatizar operaciones complejas, como el rendimiento de liquidez o el rebalanceo de estrategias DeFi, sin requerir la firma manual de los propietarios en cada movimiento.

En este caso particular, la billetera afectada tenía habilitado un módulo de liquidez personalizado configurado para interactuar con Uniswap v4 y operar con apalancamiento sobre tokens de re-staking líquido (rsETH).

 


No obstante, la falla no residía en el contrato central de Safe ni en la custodia de las claves privadas del usuario, sino en la lógica interna de este ejecutor personalizado, ya que algunos investigadores de firmas de seguridad blockchain como BlockSec, Blockaid y SlowMist determinaron que el módulo exponía un punto de entrada público (recipe entrypoint) que aceptaba instrucciones arbitrarias proporcionadas por cualquier usuario externo.

El contrato carecía de los controles de acceso y validaciones adecuados; concretamente, interpretaba que cualquier llamada que apuntara a su propia dirección estaba previamente autorizada.

Aprovechando esta vulnerabilidad, el atacante envió una instrucción utilizando la función DELEGATECALL (operation=1). En la máquina virtual de Ethereum (EVM), el comando DELEGATECALL ejecuta el código del contrato de destino pero manteniendo el contexto, el almacenamiento y la identidad del contrato que realiza la llamada.

Al ser el módulo un componente autorizado por la Safe, el atacante logró que la billetera ejecutara código malicioso como si viniera de sus propios administradores, obteniendo control absoluto sobre los activos depositados.

Una vez obtenido el control del módulo, el explotador inició una serie de transacciones para liquidar las posiciones de la víctima, la billetera contenía aproximadamente 7,73 millones de dólares representados en aEthrsETH, una versión encapsulada en Aave del token rsETH que generaba rendimientos.

 


El atacante utilizó una función de llamada múltiple (multicall) para redirigir el módulo hacia un Hook (módulo de extensión) malicioso en Uniswap v4 y luego, a través de este mecanismo, el módulo desempaquetó el aEthrsETH de la billetera y lo convirtió en rsETH sin procesar (alrededor de 2.900 tokens).

Para completar la extracción, el ciberdelincuente creó un token sin valor técnico denominado “Permissionless Attacker Token” (PAT) y un pool de liquidez correspondiente en Uniswap v4, ya que su objetivo final era drenar los 2.900 rsETH introduciéndolos en dicho pool a cambio de los tokens PAT, dejando a la billetera víctima únicamente con un recibo en forma de NFT de liquidez completamente inservible.

 


El atacante estructuró su ataque impecablemente en el plano teórico, pero cometió un error fatal en la ejecución práctica, puesto que envió su transacción de explotación a la mempool pública de Ethereum en lugar de utilizar un canal de retransmisión privado (como Flashbots Protect).

La mempool es la zona de espera donde las transacciones enviadas por los usuarios aguardan a ser empaquetadas por un validador e incluidas en un bloque y para los que no lo saben, en este espacio operan de manera continua cientos de bots MEV conocidos como searchers (buscadores).

Estos programas analizan en tiempo real cada transacción pendiente, simulan su ejecución en entornos locales y buscan oportunidades de arbitraje, liquidaciones o explotación de errores, por lo que entrar a la mempool pública es caer bajo el escrutinio de estos MEVs.

El bot MEV identificado como “Yoink” (0xfde0…455a) detectó la transacción del atacante en la mempool y tras simular la operación de inmediato, el algoritmo del bot determinó que la carga útil (payload) enviada por el hacker permitía extraer ~7,8 millones de dólares en rsETH.

En una fracción de segundo, el bot MEV denominado Yoink copió la misma carga útil del atacante y redactó su propia transacción, dirigiéndola hacia su propia dirección de destino en lugar de la del hacker.

Además, para garantizar que su transacción se procesara antes que la del atacante original en el mismo bloque, el bot realizó una maniobra de front-running pagando una elevada comisión de prioridad (priority fee) de aproximadamente 46.000 dólares en gas directamente al constructor del bloque (block builder) para entrar primero.

El validador empaquetó el bloque incluyendo la transacción de Yoink en primer lugar por lo que, para cuando la transacción del hacker original intentó ejecutarse milisegundos después, falló debido a que los fondos del Safe ya habían sido extraídos en su totalidad por el bot.

De esta manera, el atacante no solo perdió el botín de $7,8 millones, sino que también gastó tarifas de red en vano, convirtiéndose en “el cazador cazado” de la red Ethereum. A pesar de la espectacularidad de la jugada, los 7,8 millones de dólares en rsETH no han quedado del todo liquidados.

A diferencia de activos puramente inmutables, el token rsETH de Kelp DAO cuenta con funciones de pausa administrativa, ya que apenas dos horas después de detectarse el movimiento, el equipo de Kelp DAO pausó temporalmente las transferencias del token y restringió la dirección donde Yoink había depositado los 2,882 rsETH, asegurando paralelamente que los contratos centrales del protocolo seguían operando con normalidad y totalmente respaldados.

El destino final de los fondos aún depende de si la entidad detrás del bot Yoink decidirá actuar bajo los marcos de seguridad ética (whitehat), como el programa SEAL Safe Harbor, ya que en incidentes similares registrados a lo largo del año, operadores de bots MEV han devuelto la gran mayoría de los fondos interceptados a las víctimas o protocolos a cambio de retener una recompensa por hallazgo (usualmente del 10%).

Sin duda que el caso deja una advertencia clara para el desarrollo en Web3, al evidenciar que la seguridad modular exige los mismos estándares de auditoría que el núcleo de un protocolo principal sobre el que se ejecutan los smart contrats.

Otorgar permisos de ejecución como DELEGATECALL a contratos secundarios sin una validación rigurosa de los datos de entrada convierte cualquier arquitectura multifirma en un punto único de falla, expuesto a los ojos de un ecosistema automatizado que jamás perdona un error en la mempool.

Advertencia "La inversión en criptoactivos no está regulada, puede no ser adecuada para inversores minoristas y perderse la totalidad del importe invertido"