Autor: Victory & Lisa

Fondo

El 22 de mayo, según informes de la comunidad, el proveedor de liquidez Cetus en el ecosistema SUI fue supuestamente atacado, la profundidad del grupo de liquidez disminuyó drásticamente, y varios pares de intercambio de tokens en Cetus experimentaron caídas, con pérdidas estimadas en más de 230 millones de dólares. Posteriormente, Cetus emitió un anuncio diciendo: "Detectamos un incidente en nuestro protocolo, por razones de seguridad, el contrato inteligente ha sido pausado temporalmente. Actualmente, el equipo está investigando el incidente. Publicaremos una declaración de investigación adicional pronto."

Después del incidente, el equipo de seguridad de Slow Mist intervino de inmediato para analizar y emitió un aviso de seguridad. A continuación se presenta un análisis detallado de los métodos de ataque y la situación de la transferencia de fondos.

(https://x.com/CetusProtocol/status/1925515662346404024)

Información relevante

Una de las transacciones de ataque:

https://suiscan.xyz/mainnet/tx/DVMG3B2kocLEnVMDuQzTYRgjwuuFSfciawPvXXheB3x

Dirección del atacante:

0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06

Dirección del grupo atacado:

0x871d8a227114f375170f149f7e9d45be822dd003eba225e83c05ac80828596bc

Tokens involucrados:

haSUI / SUI

Análisis del ataque

El núcleo de este incidente es que el atacante, al construir cuidadosamente los parámetros, hizo que ocurriera un desbordamiento pero aún así pudo eludir la detección, y al final pudo cambiar una cantidad muy pequeña de tokens por activos de liquidez masivos. A continuación se presenta un análisis de los pasos específicos:

1. El atacante primero tomó prestados 10,024,321.28 haSUI a través de un préstamo relámpago, lo que provocó que el precio del grupo cayera de 18,956,530,795,606,879,104 a 18,425,720,184762886, con una caída del 99.90%.

2. El atacante eligió cuidadosamente un rango de precios extremadamente estrecho para abrir una posición de liquidez:

  • Límite inferior de Tick: 300000 (precio: 60,257,519,765,924,248,467,716,150)

  • Límite superior de Tick: 300200 (precio: 60,863,087,478,126,617,965,993,239)

  • Ancho del rango de precios: solo 1.00496621%

3. Luego viene el núcleo de este ataque, el atacante declara que desea agregar una enorme liquidez de 10,365,647,984,364,446,732,462,244,378,333,008 unidades, pero debido a la vulnerabilidad, el sistema solo aceptó 1 token A.

Analicemos por qué el atacante pudo intercambiar 1 token por una gran cantidad de liquidez. La razón principal es que la función get_delta_a contiene una vulnerabilidad para eludir la detección de desbordamiento en checked_shlw. El atacante aprovechó esto para que el sistema cometiera un grave error al calcular cuánta haSUI se necesitaba realmente agregar. Debido a que el desbordamiento no fue detectado, el sistema subestimó la cantidad de haSUI necesaria, lo que permitió al atacante intercambiar solo una pequeña cantidad de tokens por grandes activos de liquidez, logrando así el ataque.

Cuando el sistema calcula cuánta haSUI se necesita para agregar tal liquidez:

La clave aquí es que la implementación de la función checked_shlw presenta defectos graves. En realidad, cualquier valor de entrada menor que 0xffffffffffffffff << 192 eludirá la detección de desbordamiento. Sin embargo, cuando estos valores se desplazan a la izquierda 64 bits, el resultado excederá el rango de representación de u256, momento en el cual los datos de alto orden se truncarán, lo que resulta en que el resultado obtenido es mucho menor que el valor teórico. Así, el sistema subestimará la cantidad de haSUI necesaria en cálculos posteriores.

  • Máscara de error: 0xffffffffffffffff << 192= un valor muy grande (aproximadamente 2^256-2^192)

  • Casi todas las entradas son menores que esta máscara, evitando la detección de desbordamiento

  • El verdadero problema: cuando n >= 2^192, n << 64 superará el rango de u256 y será truncado

El valor intermedio que construyó el atacante liquidity * sqrt_price_diff =6277101735386680763835789423207666908085499738337898853712:

  • Menor que la máscara de error, eludiendo la detección de desbordamiento

  • Pero después de desplazar a la izquierda 64 bits, superará el valor máximo de u256, lo que provocará que la parte desbordada sea truncada

  • Lo que lleva a que el resultado final calculado sea aproximadamente menor que 1, pero debido a que se redondea hacia arriba, el cociente calculado es igual a 1

4. Finalmente, el atacante retira liquidez y obtiene enormes ganancias en tokens:

  • Primera extracción: obtuvo 10,024,321.28 haSUI

  • Segunda extracción: obtuvo 1 haSUI

  • Tercera extracción: obtuvo 10,024,321.28 haSUI

5. El atacante devuelve el préstamo relámpago, obteniendo un beneficio neto de aproximadamente 10,024,321.28 haSUI y 5,765,124.79 SUI, el ataque ha concluido.

Estado de las correcciones del proyecto

Después del ataque, Cetus emitió un parche de corrección. El código de corrección específico se puede consultar en: https://github.com/CetusProtocol/integer-mate/pull/7/files#diff-c04eb6ebebbabb80342cd953bc63925e1c1cdc7ae1fb572f4aad240288a69409.

La función checked_shlw corregida es la siguiente:

Descripción de la corrección:

  • Corrija la máscara incorrecta 0xffffffffffffffff << 192 al valor umbral correcto 1 << 192

  • Corrija la condición de juicio de n > mask a n >= mask

  • Asegúrese de que cuando el desplazamiento a la izquierda de 64 bits pueda causar un desbordamiento, se detecte correctamente y se devuelva la bandera de desbordamiento

Análisis de MistTrack

Según el análisis, el atacante 0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06 obtuvo beneficios de aproximadamente 230 millones de dólares, incluidos SUI, vSUI, USDC y otros activos.

Descubrimos que el atacante ya había preparado la tarifa de gas dos días antes, y luego hizo un intento antes del ataque, pero falló:

Después de obtener ganancias, el atacante transfirió parte de los fondos como

USDC, SOL, suiETH a través de puentes entre cadenas como Sui Bridge, Circle, Wormhole, Mayan hacia la dirección EVM 0x89012a55cd6b88e407c9d4ae9b3425f55924919b:

De los cuales, 5.2341 WBNB se transfirieron a la dirección BSC 0x89012a55cd6b88e407c9d4ae9b3425f55924919b:

Luego, el atacante transfirió un valor de

10 millones de dólares en activos depositados en Suilend:

El atacante también transfirió 24,022,896 SUI a la nueva dirección 0xcd8962dad278d8b50fa0f9eb0186bfa4cbdecc6d59377214, actualmente no ha sido transferida:

Afortunadamente, según Cetus, con la cooperación de la Fundación SUI y otros miembros del ecosistema, se han congelado con éxito 162 millones de dólares en fondos robados en SUI.

(https://x.com/CetusProtocol/status/1925567348586815622)

A continuación, utilizamos la herramienta de análisis de lavado de dinero y seguimiento en cadena MistTrack para analizar la dirección 0x89012a55cd6b88e407c9d4ae9b3425f55924919b que recibió fondos entre cadenas en EVM.

Esta dirección recibió 5.2319 BNB en BSC, actualmente no ha sido transferida:

Esta dirección recibió 3,000 USDT, 40,880,000 USDC, 1,771 SOL y 8,130.4 ETH en Ethereum.

De los cuales, USDT, USDC y SOL fueron intercambiados por ETH a través de CoW Swap, ParaSwap, etc.:

Luego, esta dirección transfirió 20,000 ETH a la dirección 0x0251536bfcf144b88e1afa8fe60184ffdb4caf16, aún no ha sido transferida:

Actualmente, el saldo de esta dirección en Ethereum es de 3,244 ETH:

MistTrack ha agregado las direcciones relevantes anteriores a la base de datos de direcciones maliciosas y, al mismo tiempo, seguiremos monitoreando el saldo de direcciones de forma continua.

Resumen

Este ataque demuestra el poder de una vulnerabilidad de desbordamiento matemático. El atacante eligió parámetros específicos mediante cálculos precisos, aprovechando el defecto de la función checked_shlw para obtener liquidez por el costo de un token, por valor de miles de millones. Este es un ataque matemático extremadamente sofisticado, el equipo de seguridad de Slow Mist recomienda a los desarrolladores que verifiquen estrictamente todas las condiciones de límite de las funciones matemáticas en el desarrollo de contratos inteligentes.