Poolz подвергся атаке из-за уязвимости переполнения арифметики, убытки составили около 66,5 тысячи долларов США
15 марта 2023 года в凌晨, Poolz подвергся атаке на сетях Ethereum, BNB Chain и Polygon, что привело к потерям различных токенов на общую сумму около 665000 долларов США. Нападающий использовал уязвимость арифметического переполнения в смарт-контракте, успешно обойдя ограничения на перевод средств.
Согласно мониторингу данных в блокчейне, эта атака затрагивает несколько токенов, включая MEE, ESNC, DON, ASW, KMON, POOLZ и другие. Злоумышленник уже обменял часть прибыльных токенов на BNB, но в настоящее время эти средства еще не были переведены.
Процесс атаки в основном делится на три этапа:
Атакующий сначала обменял небольшое количество токенов MNZ через DEX.
Затем была вызвана функция CreateMassPools в контракте Poolz. Эта функция должна была использоваться для массового создания ликвидностных пулов и предоставления начальной ликвидности, но в ней есть критическая уязвимость.
Уязвимость обнаружена в функции getArraySum. Эта функция выполняет суммирование, перебирая массив _StartAmount, но не учитывает ситуацию переполнения. Злоумышленник тщательно сконструировал массив, который приводит к переполнению uint256, в результате чего функция возвращает значение 1, в то время как фактическое значение _StartAmount является огромным числом.
В конце концов, атакующий вызывает функцию withdraw для извлечения средств, завершая весь процесс атаки.
Этот инцидент еще раз подчеркивает опасность проблемы арифметического переполнения в смарт-контрактах. Чтобы предотвратить подобные атаки, разработчики должны рассмотреть следующие рекомендации:
Используйте более новую версию компилятора Solidity, в которой встроен механизм проверки на переполнение.
В низких версиях Solidity можно использовать сторонние библиотеки безопасности, такие как SafeMath от OpenZeppelin, для выполнения операций с целыми числами.
Провести полную проверку кода, уделяя особое внимание частям, связанным с математическими вычислениями.
Реализуйте многофакторную подпись и другие дополнительные меры безопасности для добавления уровня защиты к критическим операциям.
Это событие снова напоминает нам, что в экосистеме блокчейна код является законом. Команды разработчиков должны всегда быть на чеку и постоянно совершенствовать практики безопасности, чтобы защитить активы пользователей и репутацию проекта.
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
Poolz подвергся атаке арифметического переполнения, убытки составили 665 тысяч долларов, затронуты многоцепочечные активы.
Poolz подвергся атаке из-за уязвимости переполнения арифметики, убытки составили около 66,5 тысячи долларов США
15 марта 2023 года в凌晨, Poolz подвергся атаке на сетях Ethereum, BNB Chain и Polygon, что привело к потерям различных токенов на общую сумму около 665000 долларов США. Нападающий использовал уязвимость арифметического переполнения в смарт-контракте, успешно обойдя ограничения на перевод средств.
Согласно мониторингу данных в блокчейне, эта атака затрагивает несколько токенов, включая MEE, ESNC, DON, ASW, KMON, POOLZ и другие. Злоумышленник уже обменял часть прибыльных токенов на BNB, но в настоящее время эти средства еще не были переведены.
Процесс атаки в основном делится на три этапа:
Атакующий сначала обменял небольшое количество токенов MNZ через DEX.
Затем была вызвана функция CreateMassPools в контракте Poolz. Эта функция должна была использоваться для массового создания ликвидностных пулов и предоставления начальной ликвидности, но в ней есть критическая уязвимость.
Уязвимость обнаружена в функции getArraySum. Эта функция выполняет суммирование, перебирая массив _StartAmount, но не учитывает ситуацию переполнения. Злоумышленник тщательно сконструировал массив, который приводит к переполнению uint256, в результате чего функция возвращает значение 1, в то время как фактическое значение _StartAmount является огромным числом.
В конце концов, атакующий вызывает функцию withdraw для извлечения средств, завершая весь процесс атаки.
Этот инцидент еще раз подчеркивает опасность проблемы арифметического переполнения в смарт-контрактах. Чтобы предотвратить подобные атаки, разработчики должны рассмотреть следующие рекомендации:
Используйте более новую версию компилятора Solidity, в которой встроен механизм проверки на переполнение.
В низких версиях Solidity можно использовать сторонние библиотеки безопасности, такие как SafeMath от OpenZeppelin, для выполнения операций с целыми числами.
Провести полную проверку кода, уделяя особое внимание частям, связанным с математическими вычислениями.
Реализуйте многофакторную подпись и другие дополнительные меры безопасности для добавления уровня защиты к критическим операциям.
Это событие снова напоминает нам, что в экосистеме блокчейна код является законом. Команды разработчиков должны всегда быть на чеку и постоянно совершенствовать практики безопасности, чтобы защитить активы пользователей и репутацию проекта.