Cointime

Download App
iOS & Android

Подробное объяснение инцидента с Socket-атакой

Validated Project

16 января 2024 года компания Socket Tech подверглась атаке, в результате которой был нанесен ущерб примерно в 3,3 миллиона долларов США. Злоумышленник воспользовался уязвимостью в ссылке проверки данных Socket-контракта и похитил средства пользователя авторизованного контракта посредством вредоносного ввода данных. В результате этой атаки было потеряно в общей сложности 230 адресов, а самая крупная потеря одного адреса составила примерно 656 000 долларов США.

Предыстория

Socket — это протокол взаимодействия, обеспечивающий безопасную и эффективную передачу данных и активов между цепочками. Контракт Socket Gateway — это точка доступа для всех взаимодействий с уровнем ликвидности Socket, где все мосты активов и DEX сходятся в один мета-мост и выбирают лучшие транзакции на основе предпочтений пользователя, таких как стоимость, задержка или маршрутизация безопасности.

За три дня до хакерской атаки администратор контракта Socket выполнил команду addRoute, чтобы добавить в систему новый маршрут. Целью добавления маршрутизации было расширение функциональности Socket Gateway, но это непреднамеренно привело к возникновению критической уязвимости.

На рисунке ниже показана запись маршрутизации, добавленная через администратора контракта.

Краткое изложение событий

  1. 1. В 15:03 16 января по пекинскому времени на кошелек злоумышленника были переведены средства, использованные для атаки.Наш временной анализ показывает, что средства поступили из 0xe620 и были связаны с 10 BNB, выведенными из Tornado Cash.
  1. 2. Эти средства были использованы для создания и исполнения двух контрактов по эксплуатации уязвимостей Socket. Первый контракт был нацелен на USDC по адресу, авторизованному SocketGateway (скриншот ниже); 127 жертв были украдены примерно на 2,5 миллиона долларов.
  1. 3. Далее второй контракт нацелен на WETH, USDT, WBTC, DAI и MATIC в адрес жертвы. В результате еще 104 потерпевших лишились следующих активов:
  • 42.47526105 ВЕТ
  • 347 005,65 долларов США
  • 2.88962154 ВБТЦ
  • 13 821,01 ДАИ
  • 165 356,99 МАТИК
  1. 4. Злоумышленник конвертировал USDC и USDT в ETH.

Источник уязвимости

Уязвимость, которой воспользовались злоумышленники, существует в функции PerformAction во вновь добавленном адресе маршрутизации RouteAddress.

Исходная функция функции PerformAction по этому адресу — помогать функциям переноса и развертывания. Однако в этой функции появляется критическая уязвимость: пользователь напрямую вызывает внешние данные через swapExtraData в .call() без проверки, а это значит, что злоумышленник может выполнить произвольные вредоносные функции.

В этом инциденте злоумышленник создал вредоносный ввод swapExtraData, который активировал функцию TransferFrom. Вредоносный вызов использовал авторизацию пользователя к контракту SocketGateway и похитил у него средства.

Хотя контракт гарантирует, что баланс пользователя изменится правильно после вызова fromToken.call() путем проверки проверки баланса, эта функция не учитывает ситуацию, когда злоумышленник устанавливает сумму, равную 0.

Восстановление процесса атаки

  1. 1. Используя контракт атаки, злоумышленник вызвал 0x00000196() в контракте Socket Gateway.
  1. 2. Fallback() использует шестнадцатеричную сигнатуру 196 для вызова контракта уязвимого адреса маршрутизации (routerAddress).
  1. 3. На скриншоте ниже мы видим фальшивый ввод, использованный злоумышленником, а номер подкачки равен 0.
  1. 4. Далее будет вызван WrappedTokenSwapperImpl.performAction() для выполнения обмена.
  1. 5. Поддельные SwapExtraData принимаются и выполняются fromToken (WETH) без какой-либо проверки.
  1. 5. Поддельные SwapExtraData принимаются и выполняются fromToken (WETH) без какой-либо проверки.
  1. 6. Злоумышленник повторяет описанный выше процесс до тех пор, пока активы жертвы не будут исчерпаны. После появления вредоносной транзакции Socket быстро вызвал DisableRoute, заблокировав ранее уязвимый маршрут и предотвратив более широкий спектр атак.
  2. 7. 23 января Socket объявила, что вернула 1032 ETH, а 25-го объявила, что полностью компенсирует все потери. Этот инцидент устранен.

сводка событий

Вредоносные атаки на данные вызовов не являются редкостью в контрактах маршрутизации с неограниченной авторизацией пользователей. Предыдущие подобные атаки включают Dexible и Hector Bridge. 17 февраля 2023 года децентрализованная биржа Dexible подверглась атаке, в результате чего убытки составили более $1,5 млн. Эксплойтер вводит вредоносные данные вызова в функцию fill() Dexible, чтобы украсть пользовательские ресурсы. 2 июня 2023 года был атакован сетевой протокол Hector. Злоумышленник использовал поддельный контракт USDC и перевел 652 000 реальных долларов США из контракта жертвы через вредоносные данные вызова.

Платформы агрегации блокчейна обычно повышают ликвидность и сокращают потери за счет инкапсуляции серии мостовых и маршрутизирующих контрактов. Однако эта сложная инкапсуляция создает больше проблем с безопасностью. Мы рады видеть, что инцидент с Socket может быть решен.CertiK продолжит обеспечивать комплексный аудит и обнаружение для платформы, снижая различные риски агрегации, а также повышая доверие сообщества и уровень безопасности всей отрасли.

Комментарий

Все комментарии

Рекомендуем к прочтению