Dos votos, millones de USDT y un pool casi vacío: así se desglosa el ataque a X100

Dos votos, millones de USDT y un pool casi vacío: así se desglosa el ataque a X100

Una ventaja de 0.000001 tokens fue suficiente para ganar dos escaños en el senado de X100, después de lo cual salieron aproximadamente 4.85M USDT del pool legítimo.

31 oct 2026

En la primera operación, el monedero iniciador recibió aproximadamente 4.75M USDT después de pagar un flash loan, mientras que los depósitos usados para votar permanecieron bloqueados. El 24 de octubre de 2026, se usaron USDT prestados para comprar suficientes tokens X para tomar dos de los tres escaños en el senado de X100. La mayoría obtenida aprobó de inmediato operaciones de tesorería a través de liquidez controlada por el contrato ejecutor. Vender los tokens X recibidos permitió pagar el préstamo y desembolsar los fondos restantes. En las tres transacciones principales, se pagaron aproximadamente 4.848M USDT a los destinatarios. Incluyendo dos transacciones adicionales, la salida neta de USDT del pool legítimo alcanzó aproximadamente 4.849M USDT.

El mecanismo central está confirmado por registros históricos de transacciones. El rastreo cubre rutas individuales de los fondos recibidos hasta el punto de corte indicado; la dirección final del servicio se identificó mediante una etiqueta en el explorador de la blockchain.

Primera transacción - una participación prestada otorga el control del senado, acceso a los activos de tesorería y la capacidad de pagar al destinatario. Visualización: CertiK
Primera transacción - una participación prestada otorga el control del senado, acceso a los activos de tesorería y la capacidad de pagar al destinatario. Visualización: CertiK

Direcciones y sus roles

Todas las direcciones a continuación están en la red Ethereum. Los roles describen el comportamiento observado de las cuentas, no la identidad de las personas que las controlan.

DirecciónFunción establecida
0x100a2c7f45fd48e217fdce72e658dc78fd43a100El token X; seis decimales
0x79f35a33fe2813414851c4ae8daeacd14d822a46Freezer: contiene depósitos, poderes del senado y activos de tesorería
0xcd5762ac6013fa762782ac1797ab09152c1028e8Módulo DEX de tesorería
0x0d85edd90c94053fc5997551b1baa8a77aa02fa0Pool legítimo de X/USDT
0x7ec2afdf3ec5964899894f8d58afa95cbb8ffd63Remitente de la primera transacción y destinatario de USDT
0x37541fc4a6f1ec86889ba506f51dc39f2bedd10aContrato ejecutor de la primera transacción; conservó los tokens X

Contexto

Los usuarios de X100 bloquean tokens X en el contrato Freezer. El senado clasifica las cuentas registradas según su cantidad actual de tokens bloqueados. Dos votos de tres son suficientes para aprobar operaciones que involucren liquidez de tesorería y swaps. Las tarifas de registro se cobran por separado de los depósitos bloqueados.

El Freezer contiene tokens X de tesorería junto con los depósitos de los usuarios. Después de ejecutar una operación, el contrato verifica si queda suficiente X para cubrir sus obligaciones sobre los fondos congelados. Un límite de tokens independiente restringe la cantidad de activos que se pueden desplegar en el mercado. Retirar posiciones de liquidez libera espacio bajo este límite. Sin embargo, ninguna de estas medidas por sí sola garantiza que las operaciones de tesorería se realicen en condiciones justas.

Cómo se desarrolló el ataque

El atacante llevó a cabo una secuencia compleja de acciones que permitió explotar una vulnerabilidad en el código fuente del contrato inteligente.

1. Obtención del control del senado

A las 14:11:47 UTC, la primera transacción, incluida en el bloque 26,263,022, tomó prestados 1,942,457.637245 USDT de Aave y compró aproximadamente 38,200 tokens X. Dos cuentas auxiliares bloquearon cada una 19,000.000001 X y pagaron por separado 100 X cada una para ser nominadas.

Antes de eso, el segundo lugar en la clasificación lo ocupaba un participante con 19,000 X.

Dado que la votación se basaba en la clasificación actual y ejecutar una decisión no requería esperar un período determinado, la nueva mayoría llevó a cabo la operación dentro de la misma transacción.

2. Convertir poderes en activos de tesorería

La mayoría obtenida aprobó un swap de 400,000 X por aproximadamente 35.68 USDT a través de liquidez creada y controlada por la propia operación. El contrato ejecutor recibió aproximadamente 399,987 X y luego vendió aproximadamente 131,703 X en el mercado legítimo por aproximadamente 6.693M USDT.

Aave recibió aproximadamente 1.943M USDT, incluida una comisión de financiamiento de aproximadamente 971.23 USDT. El monedero iniciador recibió aproximadamente 4.75M USDT, y el contrato ejecutor conservó aproximadamente 268,284 X. Los depósitos usados para votar permanecieron bloqueados: los fondos recibidos permitieron pagar el préstamo sin desbloquear los tokens. Los registros de liquidación muestran etapas sucesivas en el movimiento del mismo dinero; estos montos no se pueden sumar, ya que eso duplicaría el conteo de las pérdidas.

3. Recuperación y reutilización de poderes

A las 14:35:59, la segunda transacción usó un préstamo flash de 1.95M USDT de Morpho para crear dos depósitos de 19,000.000002 X y desplazar al primer par de participantes. Cinco retiros de posiciones de liquidez de la tesorería devolvieron alrededor de 50,000 X, liberando espacio bajo el límite antes del siguiente intercambio de autonegociación. Tras pagar el préstamo, el destinatario recibió alrededor de 96,382 USDT y 9,895 X.

A las 14:40:47, la tercera transacción usó las facultades ya en poder de los contratos auxiliares de la segunda operación, sin adquirir nuevos tokens bloqueados. Para ello, tomó un préstamo flash de 300 USDT y retiró una gran posición de liquidez de la tesorería. El pago final ascendió a alrededor de 1,909 USDT y 549,916 X. Las llamadas históricas al contrato muestran que la operación usó cuentas auxiliares para presentar propuestas y votar con los escaños del senado ya obtenidos. Según Bitquery, la reutilización fue posible porque las funciones de los contratos auxiliares que abren el acceso a la gobernanza no restringían qué direcciones podían llamarlas. Sin embargo, esta explicación sobre el control de acceso no fue verificada de forma independiente como parte de este análisis. Que las iniciaran monederos diferentes no prueba, por sí solo, que hubiera personas distintas detrás.

A continuación se produjeron dos transacciones más a las 14:40:59 y 14:41:23. Aumentaron la salida neta de USDT del pool en alrededor de 168.61 USDT. Ambas transacciones fueron enviadas por la misma dirección, y sus números de secuencia (nonces) eran consecutivos.

Transacción principalUSDT pagado al destinatarioSalida neta de USDT del pool legítimo
Primera4,749,726.0969734,750,733.001112
Segunda96,381.88349196,381.884163
Tercera1,909.3587581,873.897121
Total de las tres transacciones principales4,848,017.3392224,848,988.782396

El tercer pago también usó USDT recibido previamente de la tesorería. Por lo tanto, el monto del pago supera la reducción de los fondos del pool causada directamente por esa transacción. Sumando las dos transacciones posteriores, la salida combinada del pool a lo largo de las cinco transacciones asciende a 4,849,157.396718 USDT. Los fondos prestados, los pagos, los intercambios y los activos que permanecen en las direcciones se relacionan parcialmente con los mismos flujos de dinero. Los tokens X no vendidos no se incluyen en la estimación en dólares.

4. Intercambio y movimiento de los fondos recibidos

El primer destinatario intercambió alrededor de 4.75M USDT por 2,022.016 ETH. Luego, una dirección consolidadora recibió este ETH junto con los fondos que ya tenía y envió cuatro lotes de 400 ETH. En el punto de corte de los datos, el 26 de octubre a las 01:20:23 UTC, las cinco direcciones de retención verificadas tenían alrededor de 2,022.857 ETH, incluidos pequeños saldos no relacionados con los fondos de esta conversión.

El segundo destinatario intercambió alrededor de 96,382 USDT por 40.908 ETH. Dos direcciones intermedias movieron alrededor de 40.900 ETH a una dirección que Etherscan etiqueta como ChangeNOW Dep. Aquí es donde termina el rastreo de los fondos: no se ha confirmado la identidad del cliente, las liquidaciones posteriores ni si el dinero finalmente fue retirado a efectivo.

Rutas verificadas de los fondos y direcciones donde se encontraron. Visualización: CertiK
Rutas verificadas de los fondos y direcciones donde se encontraron. Visualización: CertiK
Un pump de 100x, un préstamo de $75M y una reversión de la blockchain: ¿qué pasó con Tectonic?5 sept 2026Leer más

La vulnerabilidad

El costo de obtener el control de la gobernanza no guardaba casi ninguna relación con el valor de mercado de los activos ni con el tamaño del depósito necesario para votar. La mayoría obtenida pudo retirar fondos líquidos suficientes para pagar el préstamo usado para comprar el control, aunque los depósitos de votación permanecieron bloqueados.

Tres características de diseño hicieron posible esta situación:

  • Las facultades surgían inmediatamente después de realizarse un nuevo depósito. Las funciones Freezer._stakeOf y Senate._tally usaban la cantidad actual de tokens bloqueados y la clasificación de los participantes. El período de validez de una propuesta limitaba la ventana durante la cual podía ejecutarse, pero la ruta de ejecución examinada no tenía un retraso mínimo antes de la ejecución. Dos cuentas nuevas obtuvieron una mayoría y la usaron de inmediato.
  • Los votos a favor de una propuesta válida permitían operaciones de autonegociación. El módulo DEX verificaba si los tokens correspondientes estaban permitidos y si el pool existía, y luego aceptaba el retorno mínimo especificado en la propuesta. No ofrecía una verificación independiente de si los términos de la operación eran justos ni descartaba el uso de liquidez controlada por el ejecutor. Así, una operación aprobada formalmente permitía retirar activos de la tesorería en términos establecidos por la propia operación.
  • Las verificaciones de cantidad protegían solo una condición más limitada. La verificación de que el monto total de los fondos congelados estuviera cubierto mantenía alineadas las obligaciones registradas en tokens X. Al mismo tiempo, retirar posiciones de liquidez liberaba espacio dentro del límite para desplegar activos en el mercado. Ninguna de estas verificaciones limitaba las pérdidas aceptables en el valor de la tesorería. Además, los contratos auxiliares permitían reutilizar poderes ya obtenidos en una operación anterior.

Respuesta y recuperación

Los materiales recopilados no contienen ninguna confirmación independiente de que los fondos hayan sido devueltos o de que la vulnerabilidad se haya corregido efectivamente. En el punto de corte registrado, quedaban aproximadamente 1.97 USDT en el pool legítimo, y las tres direcciones de ejecución y pago verificadas contenían aproximadamente 826,902 X. Estos saldos ilíquidos de X no pueden valorarse de forma confiable en dólares a partir del estado de un mercado drenado.

El Freezer seguía cubriendo las obligaciones registradas sobre los depósitos congelados, y el senado seguía teniendo los dos escaños obtenidos durante la segunda operación y controlados por contratos. Solo quedaban 0.000002 X antes del límite de despliegue observado. Sin embargo, esta instantánea no demuestra que se haya restablecido el control de la gobernanza ni que se haya corregido su mecanismo.

En retrospectiva: el precio del control

Otros ataques a mecanismos de gobernanza permiten comparar cuánto dinero se necesitó para obtener el control, qué poderes otorgó ese control y qué parte del valor de los activos se realizó efectivamente.

IncidenteFechaDaño reportado
BonkDAO6 de julio de 20264.426 billones de BONK movidos, valorados en aproximadamente $19.3M
Term Finance23 de agosto de 2026Aproximadamente $8.46M en ETH y USDC
Astroport / Neutron22 de septiembre de 2026Aproximadamente $9.4M en valor total de activos; $1.96M en activos líquidos
Arkadiko22 de octubre de 2026Aproximadamente $1.09M como parte del drenaje de Arkadiko

Estos casos y estimaciones se basan en informes publicados; la secuencia completa de acciones en cada ataque no fue reconstruida de forma independiente. Los cálculos utilizan diferentes enfoques de valoración, y el valor declarado de los tokens no demuestra, por sí mismo, que pudieran venderse por el monto correspondiente.

Exposición financiera. En el caso de BonkDAO, los tokens de votación fueron devueltos, y en el caso de Arkadiko, los tokens DIKO fueron revendidos. Esto difiere de la situación de X100, donde los depósitos permanecieron bloqueados. El capital necesario para obtener el control y los fondos que quedan en riesgo posteriormente son indicadores diferentes. El costo neto total de obtener el control en estos casos no fue reconstruido de forma independiente. Según los informes, en Term Finance el control se obtuvo mediante un wrapper alrededor del token de gobernanza, del cual se emitió solo una pequeña cantidad; la ejecución se produjo después del período de votación.

Poderes. Según los datos publicados, la secuencia de eventos en Astroport / Neutron incluyó once reasignaciones de administradores de contratos, seguidas de diez migraciones maliciosas y retiros de activos. En Arkadiko, se aprobó un contrato privilegiado cuyas funciones públicas de retiro y acuñación no verificaban los permisos del llamante. En X100, en cambio, la mayoría aprobó operaciones de tesorería con autonegociación. En todos estos casos, los derechos de voto dieron acceso a diferentes formas de controlar activos.

Valor realizable. Solo una parte del BONK robado se transfirió a un exchange; depositar tokens en una dirección de exchange no demuestra, por sí mismo, que hayan sido vendidos. X100 conservó tokens X sin vender cuyo posible producto no puede determinarse de forma confiable. Quemar tokens USDA en Arkadiko redujo la oferta sin respaldo, pero no devolvió la garantía. El valor estimado de los tokens de la tesorería, la cantidad de tokens emitidos y los fondos realmente recibidos de una venta son indicadores diferentes.

#Tether#Hackeo#Ethereum#DeFi
Casi $4.85M salieron del pool de X100: lo que revelaron cinco transacciones