CertiK: Аналіз кредитних атак на платформу децентралізованого кредитування HopeLend

18 жовтня 2023 року о 19:48:59 за пекінським часом кредитний пул Hope.money зазнав атаки на основі швидких позик.

Hope.money створив повноцінний децентралізований фінансовий сервіс, включаючи кредитну платформу HopeLend, децентралізовану біржу HopeSwap, $HOPE стейблкоїнів та $LT токенів управління.

Протоколом, який бере участь в атаці, є HopeLend, децентралізована кредитна платформа, яка дозволяє користувачам надавати ліквідність протоколу або надавати надмірну заставу для отримання доходу.

Початок і кінець події

У реалізації коду HopeLend у пулі кредитування була вразливість, яку можна експлуатувати, через неправильну проблему цілочисельного ділення під час знищення депозитних сертифікатів, що призвело до усічення десяткової коми, що призвело до знищення меншої кількості сертифікатів, ніж очікувалося, та отримання токенів тієї ж вартості, що й очікувалося.

Зловмисник скористався цим недоліком, щоб спустошити кілька пулів кредитування коштів на Hope.money.

Кредитний пул hEthWbtc був розгорнутий 73 дні тому, але в ньому не було коштів, тому хакери влили великі суми грошей у пул кредитування, щоб різко підвищити ставку дисконтування, таким чином швидко спустошивши всі інші кредитні пули в блочній транзакції.

Що ще більш драматично, експлуатований хакер не отримав кошти за експлойт, і його транзакція атаки була виявлена викрадачем, який імітував його атаку і успішно вкрав всі кошти доходів від атаки (527 ETH), і в кінцевому підсумку 50% коштів від атаки (263 ETH) були використані грабіжниками для підкупу майнерів, які запакували блок (корисне навантаження).

Початковий хакер, який виявив вразливість, створив контракт атаки в блоці 18377039 і зробив виклик атакувати контракт у блоці 18377042, після чого викрадач відстежував транзакцію в пулі пам'яті та імітував її контракт атаки, як вхід контракту викрадення, і використовував його в тому ж блоці 18377042, і транзакція початкового хакера в блоці 18377042 зазнала невдачі, оскільки вона була відсортована за викрадачем.

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22020909/vgmwbfe1izd6m7c3.png!webp)

Куди йдуть гроші

Через годину після того, як викрадач отримає виручку, кошти перераховуються на: 0x9a9122Ef3C4B33cAe7902EDFCD5F5a486792Bc3A

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22020909/xs8c5jce3oyl7qj1.png!webp)

20 жовтня о 13:30:23 підозрювана офіційна команда зв'язалася з адресою, дозволивши бігунам залишити 26 ETH (10% прибутку) як винагороду, а також отримати відповідь від бігунів.

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22020909/2k6prrcrl8b9ynve.png!webp)

Остаточні кошти були переведені в сховище з мультипідписом GnosisSafe після години спілкування.

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22020909/to197jlp4ce8qoq1.png!webp)

Нижче ми покажемо реальні вразливості та подробиці використання хакерами.

Попередня інформація

*У протоколі кредитування HopeLend реалізовано відгалуження від Aave, тому основна бізнес-логіка, пов'язана з вразливостями, згадується в офіційному документі Aave.

0x00 Депозити та кредити

Aave — це чистий DeFi, кредитний бізнес реалізується через пули ліквідності, користувачі очікують отримати дохід від запозичень, коли депозити Aave забезпечують ліквідність.

Дохід від кредиту не повністю розподіляється між користувачами, невелика частина процентного доходу буде включена в резерв ризику, ця частина становить меншу частку, більша частина доходу по кредиту буде розподілятися між користувачем, який надає ліквідність.

Здійснюючи депозитне кредитування в Aave, Aave конвертує кількість депозитів у різні моменти часу на частку кількості депозитів у початковій точці часу пулу ліквідності шляхом дисконтування, тому суму основної суми та відсотків, що відповідають базовим активам кожної кількості акцій, можна безпосередньо розрахувати за допомогою індексу суми *, що значно полегшує розрахунок і розуміння.

Його можна розуміти як процес, схожий на купівлю коштів, початкова чиста вартість фонду дорівнює 1, користувач інвестує 100 юанів, щоб отримати 100 акцій, припускаючи, що після періоду прибутку чиста вартість стає 1,03, в цей час користувач знову інвестує 100 юанів, отримана частка дорівнює 97, а загальна частка користувача дорівнює 197.

Це фактично дисконтування активу за індексом. Причина цього полягає в тому, що фактична сума основної суми та відсотків користувача множиться на поточний індекс на баланс. При другому депозиті правильна основна сума і відсотки користувача повинна бути 100 * 1,03 + 100 = 203, якщо не дисконтується, то другий користувач вносить 100 після того, як основна сума і відсотки стає ( 100 + 100) * 1,03 = 206, є неправильним, якщо дисконтувати, то сума основної суми і відсотків стає (100 + 100 / 1,03) * 1,03 = 103 + 100 = 203, 203 Результат правильний.

Процес атаки

0x25126...... 403907(пул hETHWBTC)

0x5a63e...... 844e74 (Контракт атаки - Кешаут)

Нападника:

1. Позичте початкові кошти флеш-позики та передайте їх у заставу

Зловмисник спочатку позичає 2300 WBTC у Aave Lightning, ставить 2000 депозитів WBTC на HopeLend, а кошти будуть переведені на контракт hEthWbtc HopeLende (0x251 ... 907), а також придбати відповідні 2000 hETHWBTC.

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22020909/anso762vnbov1zr2.png!webp)

2. Маніпулювання початковою обліковою ставкою (liquidityIndex) за допомогою порожніх пулів кредитування

Позичте 2000 WBTC у HopeLend для швидкого кредиту.

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22021102/74cv8ydz0ubnh1dd.png!webp)

Поточне значення становить 1 hETHWBTC = 1 WBTC.

Згідно з нормальною операцією доступу до ETHWBTC для обміну назад на WBTC, це не вплине на обмінний коефіцієнт (тільки коли відсотки будуть зароблені, на 1 hETHWBTC буде отримано більше WBTC).

У цей момент хакери почали маніпулювати обліковою ставкою за допомогою низки складних операцій:

• Хакер безпосередньо перевів кошти 2000 WBTC на контракт hEthWbtc HopeLen (0x 251 ... 907), цей крок не є погашенням кредиту.

• Потім хакер відкликає переважну більшість WBTC (1999.999 ... ), тому попередній крок вимагає відкату до WBTC для поповнення активів у пулі.

• Нарешті, хакер зберігає лише найменшу одиницю (1 e-8) hEthWbtc, яку тут не можна повністю згадати, тому що необхідно залишити трохи, як розрахунок liquidityIndex, він буде заснований на існуючому плюсовому додаванні, якщо його очистити, в результаті чого liquidityIndex стане 0, ви не зможете зробити пропорцію в пулі незбалансованою.

• Знищіть більшу частину wBTC, обміняних на hEthWbtc на попередньому кроці, додайте wBTC, що залишився від попередньої флеш-позики, і поверніть флеш-позику, надану пулу HopeLend, сплативши загалом 2001,8 WBTC (включаючи відсотки 1,8 wBTC).

• Описаний вище процес знищує більшу частину hEthWbtc, залишаючи лише 1 найменшу одиницю (1 e-8) hEthWbtc на хакерському рахунку, так що загальна сума hETHWBTC зменшується, а в кредитному пулі налічується 2001,8 wBTC, після чого індекс ліквідності досягає приголомшливих 126 000 000. Це передбачає знання того, що інтерес користувачів депозитів в основному походить від зростання ліквідності в пулі, і кредитний пул динамічно коригуватиме відсоткові ставки за позиками та депозитами відповідно до ставки за депозитом та коефіцієнтом використання.

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22021101/5iww6yvocq828lnk.png!webp)

Тут, коли пул отримує додаткову ліквідність від відсотка за швидким кредитом (1,8 WBTC), сімдесят відсотків (126 000 000) включається в liquidityIndex (liquidityIndex), який використовується для розрахунку дисконтованої вартості на одиницю депозиту (hEthWbt).

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22021101/0y2avv1q0k0d6dvq.png!webp)

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22021101/he1rfuj0gcks7icu.png!webp)

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22021101/z8wqinijs1xrxj4q.png!webp)

Оскільки пул був порожнім до злому, totalLiquidity після погашення дорівнює лише 1, сума становить 126000000, а початковий індекс liquidityIndex дорівнює 1, що призводить до результату 126000001.

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22021225/4obpc8c6fmseyxxt.png!webp)

3. Продовжуйте збільшувати ставку дисконтування

Хакери позичили 2 000 WBTC у HopeLend для швидких позик і щоразу повертали додатково 1,8 WBTC, що дозволило кожному LiquidityIndex накопичити 126 000 000.

Хакери повторили процес 60 разів, і в підсумку індекс ліквідності досяг 7 560 000 001, а дисконтована вартість 1 найменшої одиниці hEthWBTC, що належить зловмиснику, може досягти 75,6 WBTC (близько $2,14 млн).

Це дозволяє хакерам маніпулювати hEthWBTC, спотворюючи його значення.

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22021225/6c3vhd5dzcqouduz.png!webp)

4. Спустошення інших пулів кредитів, де існують кошти для формування заробітку

Потім зловмисники поставили на стейкінг 1 найменшу одиницю hEthWBTC і позичили велику кількість активів з інших п'яти пулів токенів HopeLond.

Включити:

  • 175.4 - WETH
  • 145, 522.220985 - USDT
  • 123, 406.134999 - USDC
  • 844, 282.284002229528476039 - НАДІЯ
  • 220, 617.821736563540747967 - stHOPE

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22021225/xloltizb5ua2puhd.png!webp)

Ці токени були обміняні на WBTC і WETH через Uniswap в якості виручки, і після вирахування різних комісій хакер в кінцевому підсумку отримав прибуток у розмірі близько 263 WETH (без урахування 263,9 WETH, які підкупили корисне навантаження).

Чому хакери можуть позичати великі суми грошей в інших пулах:

Під час запозичення або зняття депозитів кредитний договір перевірятиме стан заставних активів користувача, щоб переконатися, що кредит не перевищує заставу.

Оскільки ставка дисконтування була маніпульована хакерами, а ставка дисконтування розраховується у вартості застави в множнику нормалізованого доходу, вартість застави однієї одиниці hEthWBTC у його руках досягає 75,6 WBTC.

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22021225/l92lr3astj8pxwg6.png!webp)

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22021225/fz7hdciyi6ismgwr.png!webp)

Щоразу, коли вони позичали гроші в інших пулах, хакер легко проходив перевірку заставних активів.

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22021356/8n7rgjpvl64lytjz.png!webp)

На даний момент зловмисники інвестували загалом 2000+ 1,8* 60 WBTC у HopeLend для маніпулювання індексом ліквідності, залишивши лише 1 одиницю hEtthWBTC.

5. Використовуйте критичні точки вразливості (помилки цілочисельного ділення) для виведення коштів

Щоб вивести попередній інвестиційний wBTC, зловмисники розгорнули ще один контракт атаки: 0x 5 a 63 e... 844 e 74 і викликати туди метод withdrawAllBtc()

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22021356/gxsep176zr1ulz6y.png!webp)

Процес уразливості виглядає наступним чином:

(1) Перший депозит 151.20000002 wBTC, згідно з поточним індексом ліквідності (1 найменша одиниця hEthWBTC=75,6 wBTC), зловмисник отримує 2 найменші одиниці hEthWBTC.

(2) Вивести (зняти) 113,4 wBTC, зворотно обчислити відповідну частку hEthWBTC і спалити hEthWBTC.

(3) 113,4 wBTC потрібно знищити 1,99999999998 найменших одиниць hEthWBTC, але через точність функції div знищується лише одна найменша одиниця hEthWBTC, тому вона стає вразливістю, яку можна експлуатувати, і хакери все ще можуть зберегти 1 найменшу одиницю hEthWBTC.

Критичні вразливості

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22021356/i8sobsuj4gkdna0o.png!webp)

Метод спалювання hEthWBTC викликає високоточне ділення rayDiv.

! [CertiK: Аналіз кредитної атаки на платформу децентралізованого кредитування HopeLend] (https://piccdn.0daily.com/202310/22021356/xw84ns4thoyh5i1g.png!webp)

Тут:

a= 11340000000 (WBTC призначено для видалення)

b=7560000001000000000000000009655610336(ставка дисконтування)

Хоча (a* 1e27+b/2)/b = 1.99999999998, вбудований метод div Solidity скорочує та повертає 1, що еквівалентно 113400000000 / 7560000001 десяткові знаки усічаються після ділення.

0x5a63 (Attack Contract - Cash Out) продовжує вносити 75.60000001 WBTC рівно для того, щоб отримати ще 1 мінімальну одиницю hEthWBTC, таким чином продовжуючи утримувати 2 мінімальні одиниці hEthWBTC.

У цьому циклі виводиться 113.4000000000 wBTC і 75.600000001 wBTC, кожен зловмисник може отримати 37,8 wBTC на рівному місці.

Після 58 циклів зловмисники зняли всі вкладені wBTC наперед і безперешкодно повернули флеш-позику Aave.

Висновок

Оскільки кредитний пул hEthWBTC не ініціалізований, зловмисник може легко маніпулювати індексом ліквідності, щоб збільшити його до максимуму, а ставка виведення значно посилюється як дільник, що полегшує вилучення попередньої інвестиції в блок через помилку усічення цілочисельного ділення.

У добре функціонуючому кредитному пулі непросто суттєво підвищити облікову ставку через невелике збільшення відсотків за кредитом за рахунок наявної ліквідності в пулі.

Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • Прокоментувати
  • Поділіться
Прокоментувати
0/400
Немає коментарів
  • Закріпити