¡Pérdida de 2.15 millones de dólares! Análisis de vulnerabilidades del evento MobiusDAO y seguimiento de fondos robados

Escrito por: Beosin

Recientemente, el proyecto MobiusDAO del ecosistema BNB Chain fue atacado. El atacante aprovechó una vulnerabilidad lógica en el contrato del proyecto para acuñar una gran cantidad de tokens MBU y venderlos para obtener ganancias. El equipo de seguridad de Beosin llevó a cabo un análisis de vulnerabilidades y un seguimiento de los fondos, y compartió los resultados a continuación:

Pasos detallados del ataque

(1) El atacante primero desplegó el contrato de ataque (0x631adFF068D484Ce531Fb519Cda4042805521641)

y se utilizó el contrato para llamar a la función de depósito del contrato proxy de Mobius 0x95e92B09b89cF31Fa9F1Eca4109A85F88EB08531, luego el contrato de Mobius acuñó más de 9.7x10^15 tokens MBU y los envió al contrato de ataque.

Hash de transacción de ataque: 0x2a65254b41b42f39331a0bcc9f893518d6b106e80d9a476b8ca3816325f4a150

(2) El contrato de ataque llama al contrato relacionado de PancakeSwap para vender el token MBU y completar la obtención de beneficios después de recibir el token MBU.

Análisis de vulnerabilidades

La función de depósito del contrato de Mobius acuñará una cantidad equivalente de tokens MBU y los enviará al depositante después de recibir el depósito. En esta función, cada vez que un usuario deposita WBNB, la función obtendrá el precio de BNB para calcular la cantidad de tokens MBU que se acuñarán y transferirán.

El precio de BNB proviene de la función getBNBPriceInUSDT, que devuelve el precio con una precisión de 18 decimales. Como se muestra en la imagen de arriba, el precio devuelto es de aproximadamente 656 dólares.

Debido a que el contrato lógico de Mobius no es de código abierto, al descompilarlo descubrimos que la vulnerabilidad ocurre cuando la función devuelve un resultado con 18 decimales, el contrato multiplica nuevamente ese valor por 10^18, lo que genera una cantidad de tokens MBU que es 10^18 veces mayor que el resultado normal.

Rastreo de fondos robados

Beosin Trace ha rastreado los fondos robados y ha descubierto que: los fondos robados fueron convertidos por los atacantes en aproximadamente 2,15 millones de tokens USDT, de los cuales 1,35 millones de USDT se convirtieron en BNB y se depositaron en Tornado Cash, mientras que los restantes 800,000 USDT se intercambiaron a través de cadenas cruzadas por ETH en la cadena de Ethereum y posteriormente se depositaron en Tornado Cash. Beosin Trace ha añadido las direcciones relacionadas con los hackers a la lista negra y continuará rastreando.

Según el análisis de Beosin Trace, todos los fondos robados se han depositado en Tornado Cash.

Resumen

El núcleo de este ataque radica en que los atacantes aprovecharon un error aritmético en el contrato del proyecto para acuñar una gran cantidad de tokens y obtener ganancias al venderlos. Este era un error de código muy fácil de detectar, pero el equipo del proyecto Mobius no realizó pruebas exhaustivas del código del contrato para descubrir este error, ni llevó a cabo una auditoría, lo que resultó en pérdidas de más de 2.15 millones de dólares. El equipo de seguridad de Beosin sugiere que el equipo del proyecto debe reforzar la auditoría y las pruebas de seguridad del código del contrato del proyecto para evitar la ocurrencia de situaciones similares.

Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
  • Recompensa
  • Comentar
  • Compartir
Comentar
0/400
Sin comentarios
  • Anclado
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)