По оценкам, злоумышленнику удалось вывести криптовалюты примерно на 120 млн долларов, возможно больше. Сначала было непонятно, каким именно образом прошла атака. Теперь команда Balancer опубликовала предварительный разбор и свела все к тому, как в протоколе обрабатывались операции с балансами токенов и как работало округление.
Инцидент сильно удивил рынок DeFi. Balancer считается зрелым проектом. Его много раз проверяли известные аудиторы. К тому же эксплуатируемая версия протокола работает с 2021 года и не считалась проблемной, согласно Securitylab.
Если упростить техническую часть, суть проблемы была в ошибке округления внутри кода Balancer. Речь о так называемых пакетных обменах. Это когда несколько обменов разных токенов собираются в одну транзакцию. Это задумано для экономии на комиссии за газ при работе со смарт-контрактами. В одном из вариантов такого обмена, режиме EXACT_OUT, протокол масштабирует числа чтобы точнее считать итоговые суммы. Иногда при этом происходило округление в меньшую сторону. Возникали микроскопические расхождения в балансах. Если проводить много повторяющихся операций и при этом сознательно искажать состояние пула, можно было накапливать эти расхождения в свою пользу. Именно это и сделала атака. Поэтому сравнение с Office Space оказалось уместным. Были и дополнительные приемы, но именно ошибка округления открыла окно для взлома.
Отдельная часть истории связана с тем, как отреагировали блокчейны. Часть сетей не дала хакеру вывести все, что он украл. Они просто заморозили активы. Это идет вразрез с идеей что смарт-контракты работают сами по себе и что действует правило code is law. Но на практике многие сети и протоколы по-прежнему управляются достаточно централизованно и могут вмешиваться примерно так же как это делают обычные финтех-сервисы.
По данным Unchained, сети Polygon и Sonic заблокировали часть активов, связанных с атакой на Balancer, чтобы не позволить им уйти дальше. Сеть Berachain пошла еще дальше и выпустила экстренный хардфорк. Это нужно пострадавшим пользователям чтобы вернуть средства.