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://img-cdn.gateio.im/webp-social/moments-7f230462a9-420dceb701-dd1a6f-69ad2a.webp)
Куда уходят деньги
Через час после того, как похититель получит выручку, средства переводятся на: 0x9a9122Ef3C4B33cAe7902EDFCD5F5a486792Bc3A
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-2bec7812fd-dd1a6f-69ad2a.webp)
20 октября в 13:30:23 предполагаемая официальная команда связалась с адресом, позволив бегунам оставить 26 ETH (10% прибыли) в качестве вознаграждения и получить ответ от бегунов.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-b3c8715e62-dd1a6f-69ad2a.webp)
Последние средства были переведены в мультисиговое хранилище GnosisSafe после часа общения.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-a7c1f91d1a-dd1a6f-69ad2a.webp)
Ниже мы покажем реальные уязвимости и подробности использования ими хакерами.
Предварительная информация
Протокол кредитования HopeLend реализует форки от Aave, поэтому основная бизнес-логика, связанная с уязвимостями, упоминается в white paper 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://img-cdn.gateio.im/webp-social/moments-7f230462a9-39c44b60e7-dd1a6f-69ad2a.webp)
2. Манипулирование начальной ставкой дисконтирования (liquidityIndex) с пустыми кредитными пулами
Одолжите 2000 WBTC у HopeLend для получения срочного кредита.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-493bd5cd96-dd1a6f-69ad2a.webp)
Текущее значение равно 1 hETHWBTC = 1 WBTC.
В соответствии с нормальной операцией доступа к ETHWBTC для обмена обратно на WBTC, это не повлияет на коэффициент обмена (только когда проценты будут заработаны, на коэффициент обмена повлияет 1 hETHWBTC, и он получит больше WBTC).
В этот момент хакеры начали манипулировать учетной ставкой с помощью серии сложных операций:
• Хакер напрямую перевел средства WBTC в размере 2000 долларов на контракт HopeLen hEthWbtc (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://img-cdn.gateio.im/webp-social/moments-7f230462a9-e386610ea7-dd1a6f-69ad2a.webp)
Здесь, когда пул получает дополнительную ликвидность от процентов по флэш-займу (1,8 WBTC), семьдесят процентов (126 000 000) включаются в индекс ликвидности (liquidityIndex), который используется для расчета дисконтированной стоимости за единицу депозита (hEthWbt).
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-56409cd0fd-dd1a6f-69ad2a.webp)
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-96bcc3e14e-dd1a6f-69ad2a.webp)
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-9a75762f1e-dd1a6f-69ad2a.webp)
Так как пул был пуст до взлома, totalLiquidity равна только 1 после погашения, сумма равна 126000000, а начальный liquidityIndex равен 1, в результате чего результат 126000001.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-c54ae6461b-dd1a6f-69ad2a.webp)
3. Продолжайте увеличивать ставку дисконтирования
Хакеры позаимствовали 2 000 WBTC у HopeLend для флэш-кредитов и каждый раз возвращали дополнительно 1,8 WBTC, что позволило каждому индексу ликвидности накопить 126 000 000.
Хакеры повторили процесс 60 раз, и в итоге индекс ликвидности достиг 7 560 000 001, а дисконтированная стоимость 1 наименьшей единицы hEthWBTC, принадлежащей злоумышленнику, могла достичь 75,6 WBTC (около $2,14 млн).
Это позволяет хакерам манипулировать hEthWBTC, искажая его значение.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-7a6cfad314-dd1a6f-69ad2a.webp)
4. Выхолащивание других пулов кредитов, где существуют средства для формирования доходов
Затем злоумышленники разместили 1 самую маленькую единицу hEthWBTC и одолжили большое количество активов из других пяти пулов токенов HopeLond.
Включать:
175.4 - ВЕТ
145, 522.220985 - USDT
123, 406.134999 - USDC
844, 282.284002229528476039 - НАДЕЖДА
220, 617.821736563540747967 - stHOPE
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-8aa289f7db-dd1a6f-69ad2a.webp)
Эти токены были обменены на WBTC и WETH через Uniswap в качестве выручки, и после вычета различных комиссий хакер в конечном итоге получил прибыль в размере около 263 WETH (не считая 263,9 WETH, которые подкупили полезную нагрузку).
Почему хакеры могут занимать большие суммы денег у других пулов:
При заимствовании или снятии депозитов кредитный договор проверяет состояние залоговых активов пользователя, чтобы гарантировать, что кредит не превышает залоговое обеспечение.
Поскольку ставка дисконтирования была изменена хакерами, а ставка дисконтирования рассчитывается в стоимости залога в нормализованном мультипликаторе дохода, залоговая стоимость одной единицы hEthWBTC в его руках достигает 75,6 WBTC.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-e21db310ea-dd1a6f-69ad2a.webp)
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-9c0111bcf6-dd1a6f-69ad2a.webp)
Каждый раз, когда они занимали деньги у других пулов, хакер легко проходил проверку залогового актива.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-362c84f0ae-dd1a6f-69ad2a.webp)
На данный момент злоумышленники вложили в HopeLend в общей сложности 2000+ 1,8* 60 WBTC для манипулирования liquidityIndex, оставив только 1 единицу hEtthWBTC.
5. Использование критических уязвимостей (ошибок целочисленного деления) для обналичивания средств
Чтобы вывести из строя предыдущую инвестицию wBTC, злоумышленники развернули еще один атакующий контракт: 0x 5 a 63 e... 844 e 74 и вызвать метод withdrawAllBtc() там
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-821db2a3ae-dd1a6f-69ad2a.webp)
Процесс устранения уязвимости выглядит следующим образом:
(1) Первый депозит 151.20000002 wBTC, согласно текущему индексу ликвидности (1 наименьшая единица hEthWBTC=75.6 wBTC), злоумышленник получает 2 наименьшие единицы hEthWBTC.
(3) 113,4 wBTC необходимо уничтожить 1,99999999998 наименьших единиц hEthWBTC, но из-за точности функции div уничтожается только одна наименьшая единица hEthWBTC, поэтому она становится уязвимостью, которой можно воспользоваться, и хакеры все еще могут сохранить 1 наименьшую единицу hEthWBTC.
Критические уязвимости
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-7ff70593aa-dd1a6f-69ad2a.webp)
Метод burn в hEthWBTC вызывает высокоточное деление rayDiv.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-8ab92bd200-dd1a6f-69ad2a.webp)
Здесь:
a= 11340000000 (WBTC, предназначенный для удаления)
Хотя (a* 1e27+b/2)/b = 1.99999999998, встроенный метод div в Solidity усекает и возвращает 1, что эквивалентно 11340000000 / 7560000001 десятичные знаки усекаются после деления.
0x5a63 (Attack Contract - Cash Out) продолжает вносить 75.60000001 WBTC ровно для того, чтобы получить еще 1 минимальную единицу hEthWBTC, таким образом, продолжая держать 2 минимальные единицы hEthWBTC.
В этом цикле выводится 113.400000000 wBTC и вносится 75.60000001 wBTC, каждый злоумышленник может получить 37.8 wBTC из воздуха.
После 58 циклов злоумышленники вывели все вложенные wBTC и плавно вернули флэш-кредит Aave.
Заключение
Поскольку кредитный пул hEthWBTC не инициализирован, злоумышленник может легко манипулировать liquidityIndex, чтобы увеличить его до максимума, а скорость вывода значительно усиливается в виде делителя, что упрощает вывод предыдущей инвестиции в блок из-за ошибки усечения целочисленного деления.
В хорошо функционирующем кредитном пуле непросто существенно увеличить ставку дисконтирования из-за небольшого увеличения процентов по кредиту из-за существующей ликвидности в пуле.
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
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://img-cdn.gateio.im/webp-social/moments-7f230462a9-420dceb701-dd1a6f-69ad2a.webp)
Куда уходят деньги
Через час после того, как похититель получит выручку, средства переводятся на: 0x9a9122Ef3C4B33cAe7902EDFCD5F5a486792Bc3A
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-2bec7812fd-dd1a6f-69ad2a.webp)
20 октября в 13:30:23 предполагаемая официальная команда связалась с адресом, позволив бегунам оставить 26 ETH (10% прибыли) в качестве вознаграждения и получить ответ от бегунов.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-b3c8715e62-dd1a6f-69ad2a.webp)
Последние средства были переведены в мультисиговое хранилище GnosisSafe после часа общения.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-a7c1f91d1a-dd1a6f-69ad2a.webp)
Ниже мы покажем реальные уязвимости и подробности использования ими хакерами.
Предварительная информация
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://img-cdn.gateio.im/webp-social/moments-7f230462a9-39c44b60e7-dd1a6f-69ad2a.webp)
2. Манипулирование начальной ставкой дисконтирования (liquidityIndex) с пустыми кредитными пулами
Одолжите 2000 WBTC у HopeLend для получения срочного кредита.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-493bd5cd96-dd1a6f-69ad2a.webp)
Текущее значение равно 1 hETHWBTC = 1 WBTC.
В соответствии с нормальной операцией доступа к ETHWBTC для обмена обратно на WBTC, это не повлияет на коэффициент обмена (только когда проценты будут заработаны, на коэффициент обмена повлияет 1 hETHWBTC, и он получит больше WBTC).
В этот момент хакеры начали манипулировать учетной ставкой с помощью серии сложных операций:
• Хакер напрямую перевел средства WBTC в размере 2000 долларов на контракт HopeLen hEthWbtc (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://img-cdn.gateio.im/webp-social/moments-7f230462a9-e386610ea7-dd1a6f-69ad2a.webp)
Здесь, когда пул получает дополнительную ликвидность от процентов по флэш-займу (1,8 WBTC), семьдесят процентов (126 000 000) включаются в индекс ликвидности (liquidityIndex), который используется для расчета дисконтированной стоимости за единицу депозита (hEthWbt).
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-56409cd0fd-dd1a6f-69ad2a.webp)
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-96bcc3e14e-dd1a6f-69ad2a.webp)
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-9a75762f1e-dd1a6f-69ad2a.webp)
Так как пул был пуст до взлома, totalLiquidity равна только 1 после погашения, сумма равна 126000000, а начальный liquidityIndex равен 1, в результате чего результат 126000001.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-c54ae6461b-dd1a6f-69ad2a.webp)
3. Продолжайте увеличивать ставку дисконтирования
Хакеры позаимствовали 2 000 WBTC у HopeLend для флэш-кредитов и каждый раз возвращали дополнительно 1,8 WBTC, что позволило каждому индексу ликвидности накопить 126 000 000.
Хакеры повторили процесс 60 раз, и в итоге индекс ликвидности достиг 7 560 000 001, а дисконтированная стоимость 1 наименьшей единицы hEthWBTC, принадлежащей злоумышленнику, могла достичь 75,6 WBTC (около $2,14 млн).
Это позволяет хакерам манипулировать hEthWBTC, искажая его значение.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-7a6cfad314-dd1a6f-69ad2a.webp)
4. Выхолащивание других пулов кредитов, где существуют средства для формирования доходов
Затем злоумышленники разместили 1 самую маленькую единицу hEthWBTC и одолжили большое количество активов из других пяти пулов токенов HopeLond.
Включать:
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-8aa289f7db-dd1a6f-69ad2a.webp)
Эти токены были обменены на WBTC и WETH через Uniswap в качестве выручки, и после вычета различных комиссий хакер в конечном итоге получил прибыль в размере около 263 WETH (не считая 263,9 WETH, которые подкупили полезную нагрузку).
Почему хакеры могут занимать большие суммы денег у других пулов:
При заимствовании или снятии депозитов кредитный договор проверяет состояние залоговых активов пользователя, чтобы гарантировать, что кредит не превышает залоговое обеспечение.
Поскольку ставка дисконтирования была изменена хакерами, а ставка дисконтирования рассчитывается в стоимости залога в нормализованном мультипликаторе дохода, залоговая стоимость одной единицы hEthWBTC в его руках достигает 75,6 WBTC.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-e21db310ea-dd1a6f-69ad2a.webp)
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-9c0111bcf6-dd1a6f-69ad2a.webp)
Каждый раз, когда они занимали деньги у других пулов, хакер легко проходил проверку залогового актива.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-362c84f0ae-dd1a6f-69ad2a.webp)
На данный момент злоумышленники вложили в HopeLend в общей сложности 2000+ 1,8* 60 WBTC для манипулирования liquidityIndex, оставив только 1 единицу hEtthWBTC.
5. Использование критических уязвимостей (ошибок целочисленного деления) для обналичивания средств
Чтобы вывести из строя предыдущую инвестицию wBTC, злоумышленники развернули еще один атакующий контракт: 0x 5 a 63 e... 844 e 74 и вызвать метод withdrawAllBtc() там
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-821db2a3ae-dd1a6f-69ad2a.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://img-cdn.gateio.im/webp-social/moments-7f230462a9-7ff70593aa-dd1a6f-69ad2a.webp)
Метод burn в hEthWBTC вызывает высокоточное деление rayDiv.
! [CertiK: Анализ кредитной атаки на децентрализованную кредитную платформу HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-8ab92bd200-dd1a6f-69ad2a.webp)
Здесь:
a= 11340000000 (WBTC, предназначенный для удаления)
b=7560000001000000000000000009655610336(ставка дисконтирования)
Хотя (a* 1e27+b/2)/b = 1.99999999998, встроенный метод div в Solidity усекает и возвращает 1, что эквивалентно 11340000000 / 7560000001 десятичные знаки усекаются после деления.
0x5a63 (Attack Contract - Cash Out) продолжает вносить 75.60000001 WBTC ровно для того, чтобы получить еще 1 минимальную единицу hEthWBTC, таким образом, продолжая держать 2 минимальные единицы hEthWBTC.
В этом цикле выводится 113.400000000 wBTC и вносится 75.60000001 wBTC, каждый злоумышленник может получить 37.8 wBTC из воздуха.
После 58 циклов злоумышленники вывели все вложенные wBTC и плавно вернули флэш-кредит Aave.
Заключение
Поскольку кредитный пул hEthWBTC не инициализирован, злоумышленник может легко манипулировать liquidityIndex, чтобы увеличить его до максимума, а скорость вывода значительно усиливается в виде делителя, что упрощает вывод предыдущей инвестиции в блок из-за ошибки усечения целочисленного деления.
В хорошо функционирующем кредитном пуле непросто существенно увеличить ставку дисконтирования из-за небольшого увеличения процентов по кредиту из-за существующей ликвидности в пуле.