Резюме
Platypus Finance — это протокол AMM в блокчейне Avalanche. Он подвергся трем атакам:
- 17 февраля 2023 года произошел взлом из-за некорректной проверки платежеспособности, что привело к общим убыткам в размере около 9,05 млн долларов США. Из них 2,4 млн долларов США были спасены с помощью BlockSec. Около 380 тысяч токенов застряли в контракте Aave, а затем были возвращены.
- 12 июля 2023 года протокол был взломан, в результате чего было потеряно около 50 тысяч долларов США из-за игнорирования разницы в цене между стейблкоинами.
- 12 октября 2023 года протокол пострадал от атак манипулирования ценами, потери составили около 2,2 млн долларов США. После переговоров со злоумышленником 90% украденных средств были возвращены.
Проекту повезло, что он пережил все эти атаки. Наш анализ этих трех инцидентов показывает, что логических ошибок можно было избежать при проведении тщательного аудита или использовании более активных мер безопасности.
Первая атака
Чтобы понять этот инцидент безопасности, необходимо понимать рабочий процесс нескольких смарт-контрактов. Общий процесс выглядит следующим образом:
- Пользователь может внести токен в пул, чтобы стать поставщиком ликвидности (LP) и получить LP-токен.
- LP-токен можно разместить в MasterPlatypus для получения вознаграждения. В процессе этого LP-токен будет переведен в контракт MasterPlatypus.
- LP-токен можно использовать в качестве залога для займа других активов с целью повышения эффективности управления активами.
На следующем рисунке показаны взаимодействия.

Анализ уязвимости
Уязвимость существует в функции под названием emergencyWithdraw внутри контракта MasterPlatypus. В экстренных случаях эта функция должна использоваться для вывода стейкнутых LP-токенов из контракта MasterPlatypus. В этой функции контракт проверяет, является ли пользователь «платежеспособным» (Solvent), чтобы разрешить вывод средств. Логика проверяет, есть ли у пользователей безнадежная задолженность (т. е. можно ли использовать залог для погашения долга). Если нет, пользователи могут вывести стейкнутые LP-токены.
Однако эта логика ошибочна. Тот факт, что пользователь «платежеспособен», означает лишь то, что его залог может покрыть его долг. Однако функция НЕ проверяет, остается ли пользователь платежеспособным после экстренного вывода стейкнутых токенов. Злоумышленник может использовать этот изъян, чтобы занять активы, а затем экстренно вывести стейкнутые LP-токены (не погашая долги). См. подробный анализ в блоге Immunefi.


Анализ атаки
Мы используем транзакцию атаки в качестве примера, чтобы показать весь процесс атаки.
Шаг 1: Заем флэш-кредита (Flashloan) в размере 44 миллионов USDC от AAVE

Шаг 2: Внесение 44 миллионов USDC в пул для получения LP-USDC

Шаг 3: Внесение LP-USDC в MasterPlatypus

Шаг 4: Использование LP-USDC в качестве залога для займа USP

Шаг 5: Выполнение функции emergencyWithdraw для запуска атаки
Злоумышленник получает LP-USDC, не выплачивая долг в USP.

Шаг 6: Вывод LP-USDC из пула для получения USDC

Шаг 7: Продажа USP для получения прибыли

Однако прибыль осталась внутри контракта атаки. Фактически, злоумышленник мог настроить новый адрес получения для свопа, чтобы забрать прибыль.
Спасение средств от BlockSec
Мы обнаружили, что злоумышленник оставил прибыль внутри контракта атаки. Кроме того, в контракте атаки не было логики для вывода активов. Однако мы обнаружили уязвимость в самом контракте атаки, которую можно было использовать для обратного хака, чтобы вывести часть активов из контракта.
В частности, существует контроль доступа к функции обратного вызова (callback) флэш-кредита, что означает, что любой может вызвать эту функцию. Это также является первопричиной того, что многие MEV-боты подвергаются атакам.
Кроме того, внутри функции обратного вызова контракт злоумышленника одобряет (approve) токен USDC для контракта пула Platypus finance. А этот контракт пула является обновляемым!

Комбинируя эти два факта, мы смогли спасти USDC, находящиеся в контракте атаки, путем:
- Обновления контракта пула Platypus finance для включения логики вывода USDC из контракта.
- Вызова функции обратного вызова контракта атаки, чтобы одобрить передачу USDC в контракт пула.
- Контракт пула позволил заменить любую функцию (которая будет выполнена контрактом атаки) для перевода USDC из контракта атаки (поскольку контракт атаки одобрил передачу USDC для пула).
Вот транзакция для спасения 2,4 миллионов USDC.

Две другие атаки
Пожалуйста, перейдите по следующим ссылкам для получения дополнительной информации о других двух атаках.
-
Атака-II: 11 июля 2023 года. Протокол предполагает, что соотношение между USDC и USDT составляет 1:1, что отклоняется от рыночных колебаний, что приводит к ошибочной логике вывода средств. Ссылка на одну из транзакций атаки. Их было несколько.
-
Атака-III: 12 октября 2023 года, из-за манипуляции значениями
cash(наличность) иliability(обязательства), что повлияло на цену свопа. [Первая транзакция атаки | Вторая транзакция атаки]
Резюме
Три атаки эксплуатировали различные уязвимости в протоколе. Несмотря на то, что некоторые другие вендоры проводили аудит протокола, злоумышленник все же нашел лазейку и успешно атаковал протокол. К счастью, часть активов удалось спасти, но мы не можем рассчитывать на постоянное везение. Для защиты протокола и активов пользователей необходимо применять дополнительные меры безопасности, включая мониторинг атак и автоматическое реагирование.
Читайте другие статьи из этой серии:
- Вступление: Десять самых «выдающихся» инцидентов безопасности в 2023 году
- #1: Сбор MEV-ботов путем эксплуатации уязвимостей в ретрансляторе Flashbots
- #2: Инцидент с Euler Finance: самый крупный взлом 2023 года
- #3: Инцидент с KyberSwap: мастерская эксплуатация ошибок округления с невероятно тонкими расчетами
- #4: Инцидент с Curve: ошибка компилятора создает дефектный байт-код из безобидного исходного кода
- #6: Инцидент с Hundred Finance: катализатор волны эксплойтов, связанных с точностью, в уязвимых форкнутых протоколах
- #7: Инцидент с ParaSpace: гонка со временем, чтобы предотвратить самую критическую атаку в отрасли на текущий момент
- #8: Инцидент с SushiSwap: неуклюжая попытка спасения, приведшая к серии подражательных атак
- #9: MEV Bot 0xd61492: от хищника к добыче в гениальном эксплойте
- #10: Инцидент с ThirdWeb: несовместимость между доверенными модулями раскрывает уязвимость



