3 января 2024 года проект Radiant Capital подвергся атаке с использованием флэш-кредита со стороны злоумышленника. Злоумышленник посредством 3 транзакций похитил более 1900 ETH на сумму более 4,5 миллионов долларов США. Украденные средства в настоящее время все еще хранятся по адресу злоумышленника. .
Автор: Беосин
3 января 2024 года, по данным мониторинга, проведенного платформой мониторинга рисков безопасности EagleEye компании Beosin, раннего предупреждения и блокировки, проект **Radiant Capital подвергся атаке злоумышленника с использованием мгновенного кредита. Злоумышленник посредством 3 транзакций похитил более 1900 ETH на сумму более 4,5 миллионов долларов США. Украденные средства до сих пор хранятся по адресу злоумышленника. **Команда безопасности Beosin немедленно проанализировала этот инцидент.
Основная причина этого инцидента заключается в том, что проект Radiant Capital использовал точное расширение и округление в процессе расчета количества токенов. Это позволило злоумышленнику увеличить прибыль, контролируя точность и комбинируя ее с округлением. Нажмите, чтобы атаковать. **

Наблюдая за приведенным выше кодом, функция rayDiv передает два данных uint256 a и b. Весь процесс можно сократить как (a*RAY+b/2)/b, где RAY — расширенные данные точности, равные 10^27. , поэтому результат вполне При a*RAY/b+0,5 реализована функция округления, и ошибка этого метода расчета в основном возникает из-за b. Если b чрезвычайно мало по сравнению с a, то ошибка будет незначительной, но если b имеет тот же порядок величины, что и a, то ошибка может сама достичь a.
Например: если a*RAY=10000, b=3, то вычисленный результат равен 3333, что на 1/10000 меньше фактического значения; а если a*RAY=10000, b=3000, вычисленный результат равен 3, на 1/10 меньше фактического значения.
В этом инциденте злоумышленник манипулировал значением b так, чтобы значение b и значение a имели один и тот же порядок величины, что сделало расчет эквивалентным 3/2,0001 = 1, а вычисленное значение на 1/3 меньше, чем фактическая стоимость.
Давайте посмотрим на процесс хакерской атаки:






4077000000000000000000000000000000000/2718000000009999999999999998631966035920=1,49999999, а результат округления равен 1, в результате чего результат будет на 1/3 меньше.
Как показано на рисунке ниже, 407 700 USDC должны были быть уничтожены, но осталось 271 800, что указывает на то, что было уничтожено только 271 800, а злоумышленник вывел 407 700 USDC.


На момент публикации 1902 украденных ETH хранились на адресе хакера и не были перемещены.Beosin Trace продолжит следить за средствами. **

К началу 2024 года мы уже стали свидетелями двух случаев масштабных краж. (Обзор вчерашних инцидентов безопасности: Что случилось с первым случаем года, инцидентом с кражей Orbit Chain на сумму 80 миллионов долларов?) Эта серия событий еще раз напоминает нам, что в экосистеме Web3 меры безопасности по-прежнему очень важны! **