Cайт программиста Ruby, веб-разработчика Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Новосибирск, Первоуральск

2²⁵⁶ вместо обычного баланса. Хакеры украли почти $3 млн у Cosmos

Одна ошибка в учёте балансов Cosmos EVM превратилась в серию атак сразу на несколько блокчейнов. С 20 по 25 августа злоумышленники использовали критическую уязвимость GHSA-7g4w-cg88-2cq2 и вывели активы как минимум из шести сетей экосистемы Cosmos.

Cosmos EVM представляет собой модуль, который добавляет полноценную виртуальную машину Ethereum в блокчейны на базе Cosmos SDK. Проблема возникала на границе двух систем учёта. EVM StateDB видела только доступный баланс аккаунта, тогда как Cosmos SDK отдельно учитывала ещё и заблокированные токены, которые можно было передавать в стейкинг.

Атакующий создавал специальный vesting-аккаунт и вредоносный смарт-контракт, после чего делегировал больше токенов, чем StateDB считала доступными. Из-за неконтролируемого арифметического переполнения баланс превращался в число, близкое к 2256. Второй баг позволял использовать получившееся значение для переполнения баланса другого аккаунта и фактически забирать находившиеся там настоящие токены. Общее предложение монет при такой операции не менялось, поскольку обе ошибки объединялись в одной транзакции.

После вывода средств злоумышленники отправляли активы в другие сети через межсетевые мосты и продавали их. По оценке Cosmos Labs, на децентрализованных биржах удалось обменять активы примерно на $2,87 млн, включая около 2,61 млн USDT, 114 ETH, 93,78 TON и другие токены. Ещё примерно $2,85 млн активов прошли через централизованные биржи. Аккаунты, которыми пользовались злоумышленники на таких площадках, впоследствии заморозили в рамках расследования.

В опубликованной хронологии подробно разобраны атаки на MANTRA, TAC и KiiChain. Ещё три пострадавшие сети Cosmos Labs не назвала. На TAC злоумышленник вывел почти 2,99 млрд токенов TAC, часть перевёл в BNB Chain и обменял примерно 1,21 млрд TAC на 950 тысяч USDT. Из KiiChain атакующий забрал около 148,3 млн KII, после чего продал 64,6 млн KII примерно за 1,61 млн USDT.

Особенно неприятной историю делает тот факт, что разработчики знали о самой ошибке задолго до атак. Уязвимость сообщили через программу поиска ошибок ещё 25 апреля. Команда попыталась воспроизвести проблему на сетях с другой конфигурацией и ошибочно решила, что рабочие блокчейны Cosmos EVM не рискуют потерять деньги. Исправление попало в основную ветку репозитория 15 мая, но разработчики не перенесли его сразу в стабильные версии, поскольку изменение требовало согласованного обновления состояния сети.

В начале августа новые отчёты помогли Cosmos Labs понять, что проблема затрагивает все сети Cosmos EVM независимо от конфигурации. 19 августа команда выпустила версии v0.6.2 и v0.7.2 с исправлением, однако примечания к релизам упоминали лишь наличие изменений безопасности без описания серьёзности угрозы. На следующий день разработчик стороннего проекта Push Chain опубликовал pull request с подробным описанием уязвимости, способом эксплуатации и перечнем уязвимых версий. Первая известная атака на MANTRA началась менее чем через 12 часов.

После инцидента Cosmos Labs связалась примерно с 40 блокчейнами и помогла 13 потенциально уязвимым сетям обновиться, остановиться или применить другие меры защиты. Для ветки 0.6.x требуется версия не ниже v0.6.2, для 0.7.x — не ниже v0.7.2. Компания также пообещала изменить процесс оценки критических ошибок и правила скрытого выпуска исправлений, поскольку неверная первоначальная оценка риска и публичное появление инструкции по эксплуатации вместе создали слишком удобное окно для атакующих.

SecurityLab