Skip to content
Yieldo

Poly Network 🌉 Мост

$611.0M
Украдено средств
Возвращено средств
10 Aug 2021
Дата инцидента
Техника
Improper Access Control
Классификация
Access Control
Тип цели
DeFi Protocol
Затронутые сети
Ethereum BSC Polygon
Источник
Нет публичной ссылки на источник

10 августа 2021 года анонимный злоумышленник вывел из протокола Poly Network около $610–612 млн в криптоактивах — это остаётся одним из крупнейших единичных хищений в истории DeFi (Chainalysis). Poly Network — протокол-релей, блокирующий токены на одной сети и высвобождающий их эквивалент на другой, чтобы стоимость могла переходить между Ethereum, BNB Smart Chain и Polygon. Приватный ключ никто не крал, flash loan не использовался — брешь была в том, как контракты протокола проверяли полномочия друг друга; это описывают как эксплуатацию контроля доступа в логике верификации кросс-чейн транзакций (rekt.news).

Как устроена атака

На каждой сети логика Poly Network была разделена между двумя контрактами: один хранил текущий набор публичных ключей «кипера» (keeper) — ротируемый список адресов, чьи подписи требовались для одобрения кросс-чейн перевода, — а второй, управляющий контракт, исполнял переданные транзакции при наличии валидной подписи кипера. Проблема была в том, что управляющий контракт мог вызвать почти любую функцию почти любого контракта данными, которые передавал вызывающий, — включая свой же контракт хранения ключей. Контракт определяет, какую функцию вызвать, по первым четырём байтам хеша её сигнатуры; злоумышленник подобрал параметры вызова так, что их хеш совпал с этими четырьмя байтами для функции, перезаписывающей ключи кипера (rekt.news). Это позволило вызвать функцию замены ключей напрямую через собственный механизм исполнения управляющего контракта — а контракт хранения ключей был построен так, что безусловно доверял именно этому вызывающему. Атакующий заставил легитимный контракт протокола вызвать привилегированную функцию, которая не должна была быть доступна произвольным данным, и переписал список ключей на подконтрольный себе адрес. С этого момента любая команда «высвободить заблокированные монеты» на всех трёх сетях несла подпись, которую сам протокол принимал как действительную, — и атакующий вывел обеспечение.

Что было дальше

Poly Network сразу публично сообщила о взломе и обратилась к биржам, валидаторам и самому атакующему с призывом помочь заблокировать средства. Примерно через сутки атакующий начал возвращать активы, сопровождая переводы сообщениями во встроенных данных транзакций, в которых называл произошедшее демонстрацией уязвимости протокола, а не хищением в чистом виде. Часть маршрута перемещения средств удалось связать с идентифицируемыми биржевыми аккаунтами — вероятно, это и подтолкнуло атакующего к возврату вместо попытки обналичить украденное (Chainalysis). К 12–13 августа было возвращено несколько сотен миллионов долларов; около $33 млн в USDT вернуть не удалось, поскольку эмитент Tether успел заморозить эти токены. Последний транш, хранившийся на адресе с доступом и у атакующего, и у команды Poly Network, был разблокирован к 25 августа, доведя итоговый возврат почти до полной суммы похищенного (Wikipedia). Poly Network публично поблагодарила атакующего, назвав его «Mr. White Hat», предложила баг-баунти в $500 000 и символическую должность «главного советника по безопасности» — жест, вызвавший критику среди специалистов по безопасности: у частного протокола нет полномочий гарантировать иммунитет от уголовного преследования. Ареста или уголовного дела не последовало, личность атакующего официально так и не подтверждена. Протокол продолжил работу и позже запустил баг-баунти на платформе Immunefi.

Что из этого следует

  • Мосты концентрируют риск, а не распределяют его. Единственная брешь в контроле доступа обнажила весь мультичейн-пул сразу, а не средства одной сети. Любой мост с единым слоем «кипер/верификатор» наследует тот же профиль риска.
  • Уязвимость была не видна со стороны пользователя. Ни интерфейс, ни документация не сигнализировали, что управляющий контракт способен вызвать собственный контракт хранения ключей произвольными данными атакующего — это дефект архитектуры, обнаруживаемый только аудитом кода, а не чек-листом due diligence.
  • Возврат средств — не шаблон, на который стоит рассчитывать. Почти полный возврат стал возможен благодаря сочетанию частичной деанонимизации атакующего и способности эмитента стейблкоина заморозить токены. Большинство взломов мостов после 2021 года (Ronin, Wormhole, Nomad) закончились без возврата.
  • Индустрия сместилась в сторону децентрализации самого слоя верификации. Более поздние кросс-чейн архитектуры чаще опираются на пороговые/мультисторонние подписи и более узкие права контрактов вместо одного управляющего контракта с широкими полномочиями вызова, а баг-баунти стали стандартным превентивным контролем.

On-chain DeFi несёт риск смарт-контрактов. Держите основные средства на регулируемой бирже.