Pull to refresh

Анализ атаки на Loopscale: манипуляция ценой PTUSDe и её последствия

Level of difficultyMedium

Недавно Loopscale официально подтвердил в Twitter, что в результате уязвимости в механизме ценообразования RateX было потеряно около 12% средств в их SOL‑ и USDC‑Genеsis‑вкладках. В этой статье я постараюсь разобрать вектор атаки, посмотрю ключевые транзакции и объясню, как некорректное использование оракула привело к выводу миллионов USDC и WSOL. Как автор, я хочу развить свои навыки в блокчейн‑разработке и аудите смарт‑контрактов, поэтому начинаю писать об уязвимостях и постараюсь делать это регулярно. Поэтому Let’s go.

твит компании
твит компании

Что такое Loopscale

Loopscale — модульный протокол кредитования на Solana с использованием ордер‑бука (order book), а не пула ликвидности. Заёмщики и кредиторы взаимодействуют напрямую, согласовывая точную цену и объём займа.

  • Адрес протокола: 1oopBoJG58DgkUVKkEzKgyG9dvRmpgeEm1AVjoHkF78

  • Залоги: поддерживаются разные активы, в том числе собственный токен PTUSDe и PTkySOL.

Эксплойтеры и атака

На момент написания статьи уже были известны два «эксплойтера», поэтому начинаю рассматривать их транзакции на solanascan и не иду на контракт Loopscale:

  • 4QsqugQcrCuSVzU9WjeLDoR6HaaSZtMEZr5JCyxwHgCV - Loopscale Exploiter 1

  • C1QyPYoWQiueqhtLeaG5Nhkv1LJ8oweBNCbfGJ3LprYT - Loopscale Exploiter 2

Ключевые события:

  • Деплой вредоносного аккаунта BdADVdaAdDbFo85EP2ynEanQQMDDJgPyTZmAKtaHKRbK на BPF‑загрузчике.

  • Серия транзакций create_loan, в которых с минимальным залогом (0.001 PTUSDe или PTkySOL) выводились сотни тысяч и миллионы USDC/WSOL.

список транзакций адреса Loopscale Exploiter 2
список транзакций адреса Loopscale Exploiter 2

Структура транзакций атаки

Транзакции:

  1. 2Cti6x4wMw2CCvDwQYa4JvnHZAeQaSu6krAtMnBjx9mxHpr3LTmbRDwZs21fjRiwU2Z5dV4BTJbkjaD7E2mxrRrq

  2. 55dmSjy4Whjfqbfp8LwRduzTwz1fDeLu6aj8STqDXeiezZneNJwr2XiX3Qy7yWb2G2DL3d991ACD6sejNkQ7eH5Q

  3. XxksDRzx1KFVJpUzVCFDjRCXJcUzwbdTRYPmHQzZwmzYS6DptV8qAJxU2CGAXhxyPvWLPitFCAuPA6ASBG5beub

  4. 2SkCkmX2Q8R7W7RDzgfc6ZFCmYgehmENw72sgTQLfNLHGupNdPDeNkW6S7qCNgYtintFcxhkBCsyf81XA9NSF2RJ

  5. 3LcknBmavGUAMJvNMAc5xwsLqFaKs3vfguWsoTNYzpBv76B4ChiagitSHogpdMwWZpuKDV3a62uT4wXn2SvLZvGP

Во всех пяти транзакциях create_loan прослеживался единый паттерн:

  1. Блокировка залога 0.001 PTUSDe / PTkySOL в ATA заёмщика.

  2. CPI‑вызов к Marginfi V2: снятие из пула 1 500 000 USDC (в транзакциях 1-3) и 1 226 725 USDC  (в транзакции 4) .

  3. Закрытие временного ATA и возврат депозита SOL (~0.002 SOL).

  4. CPI‑вызов к Marginfi V2: снятие из пула WSOL (~1 211.4 SOL) в транзакции 5.

Малый размер залога в сочетании с колоссальным выводом средств ясно указывает на эксплуатацию уязвимости оракула.

Это было подтверждено самой командой Loopscale в твиттере.

Следует подчеркнуть, что Loopscale в своём твите чётко заявили: сами по себе оракул RateX (который они используют) не виноват — уязвимость возникла исключительно из-за того, как Loopscale использовал его для ценообразования. Их цитата из твитераД «Коренной причиной эксплойта стала изолированная проблема расчётов стоимости залогов на основе RateX в Loopscale. Сам RateX к этому не причастен. Потери понесли лишь вкладчики SOL и USDC в их Genesis-хранилищах.»

Так же отреагировал founder RateX:

твит фаундера
твит фаундера

Самый главный вопрос, на который мне пока не удалось найти ответа, как именно выглядела манипуляция оракулом (какие значения возвращались подставным оракулом? Какая проверка была со стороны loopscale на данные возвращаемые оракулами, которая пропустила это?). Сложность в том, что проект не является open source и я не очень знаю как к этому подобраться.

Как отметил пользователь Twitter @bill_papas_12, хотя Loopscale и не открывает исходный код, тщательный анализ бинарников, IDL и примеров транзакций позволяет почти полностью восстановить логику работы смарт-контракта. Возможно, именно этим методом воспользовался атакующий: изучив, какие данные должна возвращать программа BdADVdaAdDbFo85EP2ynEanQQMDDJgPyTZmAKtaHKRbK, он смог подменить цену и провести эксплойт.

твит
твит

Куда средства были отправлены далее?

Транзакция bR4YweLndnAAUX3DxwSfSqQNZcTgjdhnamLg35hF7tKzMnTPEzHvyAyQJtsAooKwgXY68tBuZzptc2R4aCqLz7H показывает, что USDC были обменены на WSOL.

USDC->WSOL
USDC->WSOL

Затем в транзакции 4uG4fVWmxXuZXNxw2BLWfTFVFbU4aYoqJ6PTntcD2dvRG9wL8csJraZ1MXYK8HjLWp5Wc6k3bwSfgcK861KTigN7 токены SOL были отправлены на Loopscale Exploiter 1.

Loopscale Exploiter 1 получает токены
Loopscale Exploiter 1 получает токены

И далее в трех транзакциях

  1. 5XzyPcvEL8JRD4B8rZcQxKCAi3FtxFYmGBjaWw5rSAu3ET3Z59RHuJafSJebeazZ3xDZDj9Qum8EubRchzN1Gm1e

  2. FcafMbKHC4e1bArfsWJTDDgYtqktWTLeptmBnpGpSKZTdkSFYUJqtffwmvV1PQTX7Vfxp1EjHdjWMFcw1VWahTH

  3. 4KHQphm8CSS9YxgDiKgAfsLmTceFLYD8f9JEiaoZZRi7RQxfL3kPY4MD9GXuazeG6eyebChuupkQBA93ufh41QU2

токены были отправлены на Ethereum используя Wormhole:

отправка токенов на Ethereum
отправка токенов на Ethereum

P.S. Основные выводы я постарался получить собственными силами, проанализировав транзакции, а затем сверил их с данными из других источников — чтобы дополнить картину и исключить свои домыслы.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.