Вечером 23 марта 2022 года из протокола стейблкоина на Solana украли ошеломляющую сумму в 52,8 миллиона долларов.
Жертвой стал протокол Cashio. Это децентрализованная платформа, которая позволяет создавать и сжигать нативный стейблкоин CASH.
К сожалению, это не первый случай, когда из DeFi-протокола крадётся большая сумма. И мы уверены, что это ещё не раз повторится.
В 2021 году в DeFi-секторы было украдено более 1 миллиарда долларов в результате
Обратите внимание, что на этом графике не учитывается множество взломов и атак, произошедших после июля 2021 года.
Мы в Bybit твёрдо убеждены в том, что нужно учиться на ошибках прошлого, чтобы не повторять их в настоящем.
Всем, кто так или иначе вовлечён в пространство DeFi, необходимо учиться на ошибках, приведших к предыдущим взломам.
События как эти несут не только потери денег, но кое-что ещё — знания и опыт. Именно то, как мы объединяем сообщество и становимся сильнее, определит направление пространства DeFi на долгие годы и десятилетия вперёд.
Поворот в расследовании
Мы решили провести тщательное расследование недавней атаки на Cashio.
SolanaFM любезно представили нам доступ к альфа-версии их ресурса Solana Blockchain Explorer, чтобы мы могли проанализировать действия хакера.
То, что мы обнаружили, удивило нас.
Краткое описание событий можно прочитать в твиттере.
Мы поняли, что этот хакер не тот, кем кажется на первый взгляд — он вполне может быть современным Робином Гудом.
Большинство новостных ресурсов в своих публикациях называли намного меньшую сумму, чем было украдено на самом деле. В среднем разные источники заявляют, что в результате взлома было утеряно 28 миллионов долларов.
Однако мы обнаружили, что на самом деле хакер украл намного больше — целых 52,8 миллиона долларов.
Обсудим это позже. Сначала нам необходимо определить, что такое Cashio и как он вообще работает.
Как работает Cashio
Cashio – это децентрализованный протокол стейблкоина на Solana, который позволяет пользователям создавать и сжигать CASH.
Чтобы создать CASH, пользователям необходимо внести токены поставщика ликвидности стабильной пары (токены LP) в качестве обеспечения. В настоящее время протокол принимает стабильную пару токенов USDT-USDC LP, которую можно создать, внеся USDT и USDC (в соотношении 50:50) в пул ликвидности автоматизированного маркет-мейкера Saber.
Затем выпущенные стейблкоины CASH могут быть использованы в DeFi в качестве средства сохранения стоимости или обменяны в соотношении 1:1 на любой другой стейблкоин, привязанный к доллару США, например, USDT, USDC, UST и DAI.
Аналогично механизму привязки стейблкоина UST от Terra, токен CASH использует похожий принцип арбитража. Так, любой пользователь Cashio может воспользоваться арбитражем, который косвенным способом удерживает рыночную стоимость CASH в соотношении 1:1 к доллару США.
С помощью сжигания токенов CASH за их эквивалент в токенах USDT-USDC LP, пользователи могут использовать арбитраж против рынка, когда CASH торгуется ниже привязанного уровня. При изъятии CASH из обращения на установленный ценовой уровень оказывается давление.
Если CASH поднимается выше привязанного уровня, пользователи могут создавать CASH за эквивалент LP токенов в долларах США. Затем созданные CASH можно продать на открытом рынке для получения прибыли от арбитража, что напрямую снижает ценовое давление на привязку к доллару.
По мере увеличения пула ликвидности спреды CASH будут сокращаться, что приведёт к уменьшению проскальзывания в сделках.
Атака
Для тех, кому нужна детальная информация про взлом, пожалуйста, перейдите поэтой ссылке. Там вы найдёте последовательный пересказ произошедших событий.
Сначала хакеру удалось создать два миллиарда токенов CASH с помощью двух миллиардов неизвестных токенов.
Это стало возможным из-за уязвимости в коде Cashio. Данная уязвимость уже была успешно устранена пользователем Twitter @samczsun, поэтому не будем на ней останавливаться.
Как вы помните, для создания CASH пользователи должны вносить соответствующий залог. Процесс внесения депозита включает проверку, в ходе которой проверяется, что на счету вкладчика и на счету протокола хранятся токены одних и тех же типов. Если это не подтверждается, то перевод блокируется.
К сожалению, Cashio не удалось обеспечить эффективность этой проверки, что сделало процесс бесполезным. Хакер создал несколько поддельных учётных записей, с которых впоследствии «отчеканил» 2 миллиарда токенов CASH.
Получив два миллиарда токенов CASH, хакер использовал платформу Cashio, чтобы сжечь часть средств и получить LP токены USDT-USDC от Saber. Так он истощил все депозиты стейблкоинов Cashio.
Затем хакер обменял LP токены USDT-USDC через протокол Saber от Solana на 16,4 миллиона USDC и 10,8 миллиона USDT соответственно.
Далее он обменял оставшиеся токены CASH на 8,6 миллиона UST и 17 миллионов USDC через Saber, мгновенно понизив цену этих токенов на открытом рынке.
После завладения токенами USDC, USDT и UST на сумму 52,8 миллиона долларов США в Cashio и Saber хакер обменял 15,3 миллиона USDC и USDT на 3 773,9737 ETH через агрегатор ликвидности Jupiter на Solana. Затем полученный эфир был переведён в 3 транзакции на адрес Ethereum через Wormhole Bridge.
На данный момент хакер перевёл в общей сложности 3 773,9737 ETH, 29 312 939,32 UST и 7 967 375,86 USDC на свой Ethereum-кошелёк 0x86766247Ba3405C5f15F06b895294200809e9Cfb, который в настоящее время помечен на Etherscan как принадлежащий взломщику Cashioapp.
После этого злоумышленник обменял ещё 21 миллион USDC на 20,5 миллиона UST через Jupiter и перевёл 29 миллионов UST и оставшиеся 7,9 миллиона USDC на тот же Ethereum-кошелёк через Wormhole Bridge.
В процессе нашего расследования мы обнаружили скрытое сообщение, которое было встроено хакером в эту транзакцию.
Однако это был не просто взлом, всё немного интереснее.
При просмотре входных данных в формате UTF-8 мы обнаружили следующее сообщение:
В такое благородное послание к подлому поступку. Однако не было никаких гарантий, что он взломщик сдержит своё слово.
Поэтому мы начали внимательнее следить за ним, и обнаружили, что он действительно сдержал своё обещание.
Мы собрали целых 10 страниц со скриншотами транзакций, где он отправляет USDC на кошельки с балансом менее чем 100 тысяч долларов. Чтобы не загромождать статью, мы приведём только две страницы в качестве примера.
Если не хотите верить нам на слово, то можете сами посмотреть все транзакции здесь.
Это кошелёк, с которого новоявленный Робин Гуд отправляет сообществу обещанные USDC:
Хакер действительно вернул украденные USDC на адреса кошельков, где было менее 100 тысяч долларов. Однако невозможно проверить, были ли средства отправлены на все без исключения счета с балансом ниже установленного порога. И только время покажет, сдержит ли хакер своё слово о пожертвовании на благотворительность.
Вывод
Начиная это расследование мы совсем не ожидали, что всё обернётся в таком ключе.
Радует хотя бы то, что у этой атаки был своеобразный «хэппи энд».
Но для чего злоумышленник вообще это всё затеял? Зачем было красть деньги, а потом их возвращать? Возможно, в этой истории есть детали, которые нам ещё только предстоит выяснить.
В ближайшие дни мы определённо будем держать ухо востро.