El 10 de junio de 2024, UwU Lend fue atacado y el proyecto perdió aproximadamente 19,3 millones de dólares.

SharkTeam realizó un análisis técnico de este incidente de inmediato y resumió las precauciones de seguridad. Esperamos que los proyectos posteriores puedan aprender de esto y construir conjuntamente una línea de defensa de seguridad para la industria blockchain.

1. Análisis de transacciones de ataque

Atacante: 0x841dDf093f5188989fA1524e7B893de64B421f47

El atacante lanzó un total de 3 transacciones de ataque:

Transacción de ataque 1:

0x242a0fb4fde9de0dc2fd42e8db743cbc197ffa2bf6a036ba0bba303df296408b

Transacción de ataque 2:

0xb3f067618ce54bc26a960b660cfc28f9ea0315e2e9a1a855ede1508eb4017376

Transacción de ataque 3:

0xca1bbf3b320662c89232006f1ec6624b56242850f07e0f1dadbe4f69ba0d6ac3

Tome la transacción de ataque 1 como ejemplo para el análisis:

Contrato de ataque: 0x21c58d8f816578b1193aef4683e8c64405a4312e

Contrato objetivo: contrato de tesorería UwU Lend, que incluye:

EE.UU.: 0xf1293141fc6ab23b2a0143acc196e3429e0b67a6

uDAI: 0xb95bd0793bcc5524af358ffaae3e38c3903c7626

USDT: 0x24959f75d7bda1884f1ec9861f644821ce233c7d

El proceso de ataque es el siguiente:

1. Préstamo rápido de múltiples tokens de diferentes plataformas, incluidas WETH, WBTC, sUSDe, USDe, DAI, FRAX, USDC, GHO

La dirección de recepción del token es 0x4fea76b66db8b548842349dc01c85278da3925da.

Los tokens y las cantidades de préstamos flash son los siguientes:

Préstamo flash 159.053,16 WETH y 14.800 WBTC de Aave V3

Préstamo flash 40.000 WETH de Aave V2

Préstamo flash 91.075,70 WETH y 4.979,79 WBTC de Spark

Préstamo flash de Morpho 301.738.880,01 sUSDe, 236.934.023,17 USDe y 100.786.052,15 DAI

Préstamo flash 60.000.000 FRAX y 15.000.000 USDC de Uniswap V3: FRAX-USDC

Préstamo flash 4.627.557,47 GHO y 38.413,34 WETH de Balancer

Préstamo flash 500.000.000 DAI de Maker

Un total de aproximadamente 328.542,2 WETH, 19779,79 WBTC, 600786052,15 DAI, 301.738.880,01 sUSDe, 236.934.023,17 USDe, 4.627.557,47 GHO, 60.000.000 FRAX, 15.000 , 000 USDC

2. Transfiera el token de préstamo flash al contrato 0xf19d66e82ffe8e203b30df9e81359f8a201517ad (abreviado como 0x f 19 d) para prepararse para el ataque.

3. Controlar el precio de sUSDe (bajar el precio) intercambiando tokens

(1)USDecrvUSD.exchange

Cambie 8.676.504,84 USDe por 8.730.453,49 crvUSD. La cantidad de USDe en USDecrvUSD aumenta y el precio disminuye. La cantidad de crvUSD disminuye y el precio aumenta.

(2)USDeDAI.intercambio

Cambie 46.452.158,05 USDe por 14.389.460,59 DAI. La cantidad de USDe en USDeDAI aumenta, el precio disminuye, la cantidad de DAI disminuye y el precio aumenta.

(3)FRAXUSDe.exchange

Cambie 14.477.791,69 USDe por 46.309.490,86 FRAX, la cantidad de USDe en USDeDAI aumenta, el precio disminuye, la cantidad de FRAX disminuye y el precio aumenta.

(4)GHOUSDe.intercambio

Convierta 4.925.427,20 USDe en 4.825.479,07 GHO, la cantidad de USDe en USDeDAI aumenta, el precio disminuye, la cantidad de GHO disminuye y el precio aumenta

(5)USDeUSDC.intercambio

Convierta 14.886.912,83 USDe en 14.711.447,94 USDC, la cantidad de USDe en USDeDAI aumenta, el precio disminuye, la cantidad de USDC disminuye y el precio aumenta

Después del intercambio anterior, el precio del USDe en los 5 fondos comunes disminuyó. Al final, el precio del sUSDe se desplomó.

4. Cree continuamente posiciones crediticias, es decir, deposite otros activos (WETH, WBTC y DAI) en el contrato LendingPool y luego tome prestado sUSDe. Debido a que el precio del sUSDe se desplomó, la cantidad de sUSDe prestada fue mucho mayor que antes de que el precio se desplomara.

5. Similar al paso 3, la operación inversa aumentará el precio de sUSDe.

A medida que se eleva el sUSDe, el valor de la posición prestada en el paso 4 excede el valor de la garantía y alcanza el estándar de liquidación.

6. Liquidar posiciones de préstamos en lotes y obtener recompensas de liquidación uWETH

7. Pagar el préstamo y retirar los activos subyacentes WETH, WBTC, DAI y sUSDe.

8. Deposite sUSDe nuevamente en LendingPool. En este momento, el precio de sUSDe aumenta, por lo que se pueden prestar más activos, incluidos DAI y USDT.

9. Intercambie tokens y pague el préstamo flash. Beneficio final 1.946,89 ETH

2. Análisis de vulnerabilidad

A través del análisis anterior, se encuentra que hay una gran cantidad de préstamos rápidos y múltiples manipulaciones del precio de sUSDe durante todo el proceso de ataque. Cuando se hipoteca sUSDe, afectará la cantidad de activos prestados cuando se presta. afectará la tasa de préstamo y, por lo tanto, el coeficiente de liquidación (factores de salud).

Los atacantes aprovechan esto para bajar el precio de sUSDe a través de préstamos rápidos, hipotecar otros activos, prestar una gran cantidad de sUSDe, luego aumentar el precio de sUSDe, liquidar los activos hipotecarios para obtener ganancias e hipotecar el sUSDe restante para prestar. Saque otros activos, finalmente pague el préstamo rápido y se complete el ataque.

En el paso 3 anterior, descubrimos que el atacante manipuló el precio de sUSDe controlando el precio de USDe en los cinco grupos de negociación de Curve Finance: USDe/rvUSD, USDe/AI, FRAX/SDe, GHO/SDe y USDe/SDC. La función de lectura de precios es la siguiente:

Entre ellos, el precio sUSDe se calcula a partir de 11 precios, los primeros 10 de los cuales se leen de CurveFinance y el último lo proporciona Uniswap V3.

El precio leído por CurveFinance lo proporcionan los 5 grupos de negociación USDe/rvUSD, USDe/AI, FRAX/SDe, GHO/SDe y USD/SDC, que también son los 5 grupos de negociación manipulados por el atacante en la transacción de ataque.

El precio devuelto se calcula a partir del precio leído por uwuOracle, price_oracle(0) y get_p(0) en el contrato del grupo de operaciones de CurveFinance.

(1) el precio es el precio proporcionado por Chainlink y no puede manipularse;

(2) Parámetros del grupo de negociación

El atacante manipula el valor de retorno de get_p(0) manipulando la cantidad de tokens en el grupo comercial, manipulando así el precio.

3. Sugerencias de seguridad

En respuesta a este ataque, se deben seguir las siguientes precauciones durante el proceso de desarrollo:

(1) Para abordar la vulnerabilidad de la manipulación de precios, se puede utilizar un oráculo de precios fuera de la cadena para evitar la manipulación de precios.

(2) Antes de que el proyecto entre en funcionamiento, una empresa de auditoría profesional externa debe realizar una auditoría de contrato inteligente.

Sobre nosotros

La visión de SharkTeam es proteger el mundo Web3. El equipo está formado por profesionales de seguridad experimentados e investigadores senior de todo el mundo, que dominan la teoría subyacente de blockchain y contratos inteligentes. Proporciona servicios que incluyen identificación y bloqueo de riesgos, auditoría de contratos inteligentes, KYT/AML, análisis en cadena y otros servicios, y ha creado una plataforma inteligente de bloqueo e identificación de riesgos en cadena ChainAegis, que puede combatir eficazmente la amenaza persistente avanzada (Advanced Amenaza persistente) en el mundo Web3, APT). Ha establecido relaciones de cooperación a largo plazo con actores clave en diversos campos del ecosistema Web3, como Polkadot, Moonbeam, Polygon, Sui, OKX, imToken, Collab.Land, TinTinLand, etc.

Sitio web oficial: https://www.sharkteam.org

Twitter: https://twitter.com/sharkteamorg

Telegrama: https://t.me/sharkteamorg

Discordia: https://discord.gg/jGH9xXCjDZ