Атака на краткосрочные кредиты BSC: три подражателя

В мае серия атак скомпрометировала несколько проектов Binance Smart Chain (BSC). После PancakeBunny три его форковых проекта — AutoShark, Merlin Labs и PancakeHunny — также подверглись атакам с использованием аналогичных методов. PancakeBunny пострадал от самой дорогостоящей атаки из четырех, в результате которой был нанесен ущерб почти в 45 миллионов долларов. В этой статье доктор Чиачи Ву, руководитель группы безопасности блокчейнов Amber Group, подробно описывает подробности атак на трех подражателей.

Подражатели

AutoShark подвергся атаке через пять дней после PancakeBunny, за ней последовали Merlin Labs и PancakeHunny соответственно. Ниже приводится анализ проблем и возможных методов атаки для этих трех разветвленных проектов.

В функции SharkMinter.mintFor () количество получаемых токенов SHARK (т. е. mintShark) выводится из sharkBNBAmount, вычисляемого функцией tokenToSharkBNB () в строке 1494. Однако tokenToSharkBNB () ссылается на текущий баланс флипа. , что делает его уязвимым местом. Можно предположить, что количество жетонов, полученных в строке 1492, равно сумме флип-баланса. Тем не менее, злоумышленник может манипулировать балансом переворота, просто отправив несколько токенов переворота прямо перед вызовом getReward () и косвенно нарушив логику tokenToSharkBNB ().

В базовой реализации tokenToSharkBNB () есть еще одна поверхность для атаки. Как показано в приведенном выше фрагменте кода, _flipToSharkBNBFlip () удаляет ликвидность из ApeSwap (строка 1243) или PantherSwap (строка 1262) и конвертирует токены LP в SHARK + WBNB. Позже вызывается generateFlipToken () для преобразования SHARK + WBNB в токены SHARK-BNB LP.

Внутри generateFlipToken () текущие балансы SHARK и WBNB SharkMinter (amountADesired, amountBDesired) используются для создания токенов LP, а количество токенов LP возвращается в mintFor () как sharkBNBAmount. Исходя из этого, злоумышленник может передать SHARK + WBNB в SharkMinter, чтобы также манипулировать количеством токенов SHARK, которые должны быть отчеканены.

Брешь в PancakeHunny идентична той, что обнаружена в AutoShark, в том, что злоумышленник может манипулировать монеткой награды HUNNY с помощью токенов HUNNY и WBNB.

По сравнению с AutoShark и PancakeHunny, _getReward () Merlin Labs имеет более очевидную уязвимость.

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

Даже без контракта на эксплойт злоумышленник может получить прибыль за счет нескольких вызовов.

Воспроизведение атаки AutoShark

Чтобы воспроизвести взлом AutoShark, нам нужно сначала получить несколько токенов SHARK-BNB-LP от PantherSwap. В частности, мы меняем 0,5 WBNB на SHARK (строка 58) и переносим оставшийся WBNB с этими токенами SHARK в PantherSwap для чеканки токенов SHARK-BNB-LP (строка 64). Позже мы помещаем эти токены LP в контракт AutoShark StrategyCompoundFLIP (строка 69), чтобы претендовать на вознаграждение. Обратите внимание, что мы намеренно размещаем только половину токенов LP в строке 69.

Второй шаг — заставить getReward () войти в контракт SharkMinter. В приведенном выше фрагменте кода мы знаем, что вознаграждение можно получить с помощью функции Earned () (строка 1658). Кроме того, для запуска SharkMinter.mintFor () в строке 1668 30% вознаграждения (т. Е. Плата за выполнение) должно быть больше 1000 (т. Е. DUST).

Поэтому в нашем коде эксплойта мы передаем некоторые токены LP в контракт StrategyCompoundFLIP в строке 76, чтобы обойти проверку performanceFee> DUST и запустить вызов mintFor (). Поскольку нам нужно много WBNB + SHARK для управления SharkMinter, мы используем 100k WBNB PantherSwap через вызов flash-swap в строке 81.

В обратном вызове flash-swap, pancakeCall (), мы обмениваем половину WBNB на SHARK и отправляем SHARK с оставшимися 50 000 WBNB в контракт SharkMinter для управления добычей вознаграждения.

Следующим шагом является запуск getReward (), когда SharkMinter получает токены WBNB + SHARK, чтобы получить большое количество SHARK для вызывающего.

Последний шаг — преобразовать SHARK в WBNB, выплатить флэш-кредит и уйти с оставшимися токенами WBNB.

В нашем эксперименте плохой субъект начинается с 1 WBNB. С помощью мгновенных кредитов он получает прибыль от более чем 1000 WBNB, возвращаемых за одну транзакцию.

Воспроизведение атаки PancakeHunny

Теория атаки PancakeHunny аналогична атаке AutoShark. Короче говоря, нам нужно отправить много HUNNY + WBNB в HunnyMinter перед запуском getReward (). Однако контракт токена HUNNY имеет механизм защиты, называемый antiWhale, для предотвращения переводов больших сумм. Поэтому быстрые кредиты здесь не работают.

Чтобы обойти antiWhale, мы создаем несколько дочерних контрактов и инициируем несколько вызовов CakeFlipVault.deposit () через указанные контракты.

В приведенном выше фрагменте кода эксплойта токены LP, собранные в строке 116, разделены на 10 частей и переданы в 10 контрактов Lib в строке 122, за которыми следуют вызовы Lib.prepare () для каждого из них.

Внутри Lib.prepare () мы утверждаем (), что CakeFlipVault тратит токены LP, и вызываем CakeFlipVault.deposit (), чтобы включить последующие вызовы getReward () для чеканки наградных токенов HUNNY.

После подготовки 10 контрактов Lib, основной контракт выполняет итерацию каждого из них, чтобы: 1) поменять местами WBNB на максимально допустимую сумму HUNNY; 2) передать WBNB + HUNNY на HunnyMinter; 3) вызвать getReward () через lib.trigger (); и 4) обменять HUNNY обратно на WBNB.

В конце концов, злоумышленник с 10 WBNB зарабатывает около 200 WBNB за 10 запусков 10 операций по контрактам Lib.

Воспроизведение атаки Лаборатории Мерлина

Как упоминалось ранее, в Merlin Labs есть модификатор noContract, позволяющий избавиться от атак с использованием срочных кредитов. Однако мы могли бы использовать сценарий для запуска атаки с несколькими транзакциями, инициированными с адреса EOA (внешняя учетная запись). Единственное отличие состоит в том, что кто-то может инициировать транзакцию злоумышленника, чтобы украсть прибыль.

Как и в случае атаки AutoShark, нам нужно подготовить достаточное количество LINK и WBNB (строка 23), использовать их для чеканки токенов WBNB-LINK-LP (строка 34) и внести токены LP в контракт VaultFlipCake (строка 38).

Остальные действия:

  • Замена WBNB на CAKE (строка 42).
  • Управление минтингом MERL путем отправки CAKE в контракт VaultFlipToCake (строка 50).
  • Запуск getReward () в строке 55 (выпущено большое количество токенов MERL).
  • Замена MERL обратно на WBNB и повторение вышеуказанных шагов несколько раз.
  • Как упоминалось ранее, если кто-то запустит шаг 3 сразу после шага 2, этот человек может удалить большое количество MERL.

    В нашем эксперименте злоумышленник начинает с 10 WBNB и уходит с примерно 165 WBNB, повторяя четыре шага 10 раз.

    О компании Amber Group

    Amber Group — ведущий глобальный поставщик услуг криптовалютного финансирования, работающий по всему миру и круглосуточно, с присутствием в Гонконге, Тайбэе, Сеуле и Ванкувере. Компания Amber Group, основанная в 2017 году, обслуживает более 500 институциональных клиентов и в совокупности продала более 500 миллиардов долларов на более чем 100 электронных биржах, при этом под управлением находятся активы на сумму более 1,5 миллиарда долларов. В 2021 году Amber Group привлекла 100 миллионов долларов в рамках серии B и стала последним единорогом FinTech, стоимость которого превышает 1 миллиард долларов. Для получения дополнительной информации посетите www.ambergroup.io.