Cosmos Labs недооценила уязвимость перед атакой на шесть сетей с ущербом в $5,72 млн
Ключевые выводы
- •Сам Cosmos Hub не был взломан; дефект находился в ПО cosmos/evm, которое использовали шесть сетей, включая MANTRA, TAC и KiiChain.
- •Атакующие конвертировали или продали примерно $5,72 млн, из них около $2,85 млн прошли через централизованные биржи, счета на которых впоследствии были заморожены.
- •Уязвимость представляла собой целочисленный андерфлоу из-за вычитания делегированных сумм, включая заблокированные токены, из меньшего расходуемого баланса, что позволяло напрямую похищать средства жертв.
- •Cosmos Labs изначально ошибочно сочла баг ограниченным, не сумев воспроизвести его на сетях с 18 знаками после запятой, а её последующие тихие патчи содержали примечания без указания, что задержка обновления ставит средства пользователей под угрозу.
- •Cosmos Labs планирует расширить анализ уязвимостей, увеличить и проверить сеть контактов безопасности, а также пройти внешний аудит практик операционной безопасности.

Cosmos Hub не был взломан
Инцидент не затронул Cosmos Hub и не каждую блокчейн-сеть в более широкой экосистеме Cosmos. Дефект находился в cosmos/evm — общем программном обеспечении, позволяющем независимым сетям на базе Cosmos запускать Ethereum-совместимые приложения.
Согласно пост-мортему Cosmos Labs, шесть сетей, использовавших это ПО, были атакованы в период с 20 по 25 августа. В подробной хронологии названы MANTRA, TAC и KiiChain; документ публично не идентифицировал остальные три сети.
Это различие важно: оно не позволяет сбою общего программного обеспечения превратиться в вводящий в заблуждение заголовок о «взломе Cosmos». То же правило охвата применимо к эксплойту моста The Sandbox — скомпрометированная интеграция не означала, что весь базовый протокол был взломан.
Атакующие конвертировали $5,72 млн двумя путями
По оценке Cosmos Labs, атакующие обменяли примерно $2,87 млн через децентрализованные площадки по ценам на 19 августа. Компания охарактеризовала эту цифру как оценку, не прошедшую независимого аудита. Ещё $2,85 млн, как сообщается, было продано через централизованные биржи, что довело общую конвертированную или проданную сумму до примерно $5,72 млн.
Cosmos Labs сообщила, что пострадавшие сети доложили о заморозке счетов на централизованных биржах на фоне продолжающихся полицейских расследований. Общая сумма конвертации $5,72 млн не изменится, однако возврат замороженных биржевых средств может сократить итоговый чистый ущерб.
Ответные меры также ограничили ущерб. Cosmos Labs работала с 13 другими потенциально уязвимыми сетями над установкой патчей, остановкой или иной защитой без дальнейших зарегистрированных инцидентов и в целом координировалась с 40 сетями.
Как несовпадение в учёте раскрыло реальные балансы
Уязвимость возникла из-за того, что две части программного обеспечения по-разному рассчитывали балансы. StateDB Cosmos EVM отслеживал только сумму, которую аккаунт мог немедленно потратить. Однако вестинг-аккаунт Cosmos мог содержать как расходуемые, так и заблокированные токены, а система стейкинга позволяла делегировать заблокированные токены.
Когда программа вычитала полную делегированную сумму из меньшего расходуемого баланса, непроверенный арифметический андерфлоу мог «перевернуть» результат до числа, близкого к 2^256. Атакующий мог затем сочетать этот андерфлоу с оверфлоу при переводе. Этот класс багов — целочисленный андерфлоу и оверфлоу в беззнаковой арифметике — является хорошо известной категорией уязвимостей смарт-контрактов и блокчейнов, и это одна из причин, по которым современные языки смарт-контрактов по умолчанию включают проверяемую арифметику.
Последовательность не создавала устойчивого увеличения предложения. Вместо этого она могла обнулить аккаунт жертвы с высоким балансом и оставить атакующему сумму, ранее принадлежавшую этому аккаунту. Это делало дефект прямым риском кражи средств, а не просто неточным отображением или учётной погрешностью.
Предупреждение поступило почти за четыре месяца до атак
Кража стала финалом более длительной цепочки событий. Решающая ошибка была допущена на этапе первоначальной оценки — за месяцы до того, как кто-либо использовал код.
Cosmos Labs отнеслась к производственной угрозе как к плановому обслуживанию
Первоначальный proof-of-concept использовал сеть, настроенную на шесть знаков после запятой. Cosmos Labs протестировала конфигурации с 18 знаками, не смогла воспроизвести результат и заключила, что известные рабочие сети в безопасности. Этот вывод оказался ошибочным: лежащее в основе несовпадение балансов могло затронуть любую сеть Cosmos EVM независимо от конфигурации знаков после запятой.
Когда последующие отчёты показали более широкий охват, Cosmos Labs узнала, что рабочие средства находятся под угрозой. Компания выбрала процесс «тихого патчинга», чтобы передать исправленный код операторам, не публикуя деталей, которые могли бы помочь атакующим.
Релизы были доступны примерно за 20 часов до первой известной атаки, но примечания к ним не указывали степень серьёзности и не сообщали операторам, что задержка обновления может подвергнуть средства пользователей риску. Операторы видели, что новые релизы содержат исправления безопасности, но примечания не объясняли, что непатченные сети сталкиваются с потенциальной потерей средств.
Раскрытие стало публичным на следующее утро. Pull request в одном из нижестоящих форков описал путь эксплуатации и указал затронутые теги релизов примерно за 12 часов до первой атаки. Публичный pull request дал атакующим более ясный путь, а Cosmos Labs уже оставила операторов без предупреждения, объясняющего срочность.
Дилемма, с которой столкнулась Cosmos Labs, хорошо знакома в безопасности открытого ПО: полное раскрытие уязвимости может вооружить атакующих до того, как все операторы установят патчи, а молчание лишает операторов возможности оценить срочность. Практики координированного раскрытия во всей софтверной индустрии пытаются сбалансировать именно этот компромисс, и данный инцидент показывает, что происходит, когда баланс нарушен с обеих сторон.
Cosmos не знала каждую сеть, которую нужно было предупредить
Даже процесс приватных предупреждений работает только если сопровождающие знают, с кем связываться. По словам Cosmos Labs, экосистема включает более 115 известных публичных сетей, но не имеет полного реестра. В ходе реагирования компания узнала о 11 развёртываниях Cosmos EVM, не зарегистрированных в её каналах безопасности.
Cosmos Labs обслуживала общий код, не зная каждую сеть, которая его развернула. Этот пробел затруднял доставку конфиденциального предупреждения до публикации информации, достаточной для того, чтобы команды сетей сами распознали угрозу.
Хронология реагирования также показывает, почему сообщение должно было быть однозначным. После того как MANTRA сообщила о первой атаке, Cosmos Labs отправила первое критическое защищённое письмо примерно через два часа. TAC была атакована примерно через 45 часов после MANTRA, несмотря на более раннюю коммуникацию, и позднее руководство ужесточилось до рекомендации всем сетям Cosmos EVM остановиться.
Для независимых сетей Cosmos EVM публикации кода было недостаточно. Их командам всё равно нужно было узнать, что обновление срочно, и согласовать релиз с изменением состояния.
Уязвимые сети должны обновиться или остановиться
Критическое уведомление безопасности относит к затронутым версии до 0.6.2 и версии от 0.7.0 включительно до 0.7.2 (не включая её). Операторам следует перейти на Cosmos EVM 0.6.2, 0.7.2 или более поздний релиз.
Обходного решения только через конфигурацию не существует. Отключение стейкинг-прекомпайла устраняет основной триггер, описанный в уведомлении, однако Cosmos Labs не считает этот шаг заменой обновлению. Сеть, которая не может немедленно установить исправленный релиз, должна остановиться.
BTCPay недавно выпустила аналогичные инструкции для конкретных версий после подтверждения кражи средств: обновить затронутые установки или вывести их из работы. В обоих случаях полезное руководство конкретно, потому что риск зависит от используемой версии ПО.
Следующее исправление — процесс раскрытия информации
Cosmos Labs заявила, что расширит анализ уязвимостей за рамки proof-of-concept репортера, увеличит сеть контактов безопасности и будет проверять, остаются ли эти контакты на связи. Также запланированы более чёткие стандарты приватных и тихих патчей, включая случаи, когда сопровождающим следует рекомендовать остановку вместо скоординированного обновления. Планируется и внешний аудит практик операционной безопасности.
Эти изменения касаются той части инцидента, которую ещё один патч кода решить не может: как децентрализованная группа независимых сетей получает, понимает и действует в соответствии с срочным предупреждением. Первоначальная оценка слишком быстро сузила масштаб бага. Более поздний процесс релизов скрыл срочность от части людей, которые должны были установить исправление. Код был доступен до первой атаки. Некоторым операторам не хватало предупреждения о том, что ожидание может стоить пользователям их средств.
Статья носит исключительно информационный характер и не является финансовой, инвестиционной или консультацией по безопасности. Операторам сетей следует обратиться к официальному уведомлению Cosmos EVM и проверить развёрнутую версию.
Источник: Coindoo