Протокол Popsicle Finance - REKT



Кризис.

Потеряно ~$20 миллионов.

Комплексный хак обычного бага поставил протокол Popsicle Finance в щекотливое положение.

Баг механизма RewardDistribution уже несколько раз подвергался эксплоитам в других протоколах.

**Аудиторам и разработчикам Смарт-контрактов стоило бы следить за новостями. Этот код не должен был попасть в производство.

Если бы только они могли где-нибудь прочитать о предыдущих хаках и эксплоитах...

Источник: @Peckshield & @Mudit__Gupta

Адрес атакующего: 0xf9E3D08196F76f5078882d98941b71C0884BEa52

Хэш транзакции: 0xcd7dae143…

Контракт "Sorbetto Fragola" автоматически управляет ликвидностью на Uniswap V3. Fragola регулирует позицию таким образом, чтобы она всегда была в правильном диапазоне.

Причиной хака стал неправильный расчет комиссии в момент трансфера токенов LP.

Конкретно, атакующий создал три контракта: А, В и С и повторил последовательности:

A.deposit(),

A.transfer(B),

B.collectFees(),

B.transfer(C),

C.collectFees() для восьми пулов.

Шаг 1: Взял флэш-кредит в размере 30M USDT, 13K WETH, 1.4KBTC, 30M USDC, 3M DAI и 200K UNI на Aave, чтобы атаковать восемь пулов PLP.

Далее мы рассматриваем пул USDT-WETH в качестве примера.

Шаг 2: Алиса вызывает функцию deposit(), чтобы внести 30M USDT и 5.467K WETH ликвидности в пул USDT-WETH PLP и получает 10.51 токенов PLP.

Шаг 3: A посылает 10.52 PLP токенов B

Шаг 4: B вызывает функцию collectFees(), чтобы обновилось значение его tokenRewards.

Шаг 5: B посылает 10.52 токенов PLP C

Шаг 6: C вызывает функцию collectFees(), чтобы обновилась значение его tokenRewards.

Шаг 7: C переводит 10.52 токенов PLP обратно A, чтобы A смог вывести ликвидность позже.

Шаг 8: A вызывает функцию withdraw(), чтобы вывести ликвидность и получает обратно 30M USDT и 5.46 WETH.

Шаг 9: B вызывает функцию collectFees(), чтобы получить 2.15M USDT и 392 WETH в качестве вознаграждения.

Шаг 10: C вызывает функцию collectFees(), чтобы получить 2.15M USDT и 402 WETH в качестве вознаграждения.

Шаг 11: Атакующий повторяет шаги со 2 по 10 для еще нескольких пулов PLP и выплачивает флэш-кредит из шага 1.

Часть прибыли от атаки (4,100 ETH, примерно $100 миллионов) незамедлительно отправлена в Tornado Cash.

В момент написания оставшиеся 2,560 WETH, 96 WBTC и 159,928 DAI все еще находятся на счету атакущего: 0xf9E3D08196F76f5078882d98941b71C0884BEa52.

Все допускают ошибки, но не многие в ответе за $20 миллионов TVL...

Странно, что Peckshield приняли решение опубликовать пост-мортем кода, аудит которого они проводили, вместо того, чтобы подождать и опубликовать его в качестве официального релиза с аккаунта Popsicle.

Фонды еще одного клиента потеряны, пока Peckshield гоняется за славой в Твиттере.

Сложно простить аудитору недосмотр уже существующего бага.

Ну они хотя бы написали неплохой пост-мортем, так что Popsicle Finance хоть что-то получили за свои деньги.


Поделиться

REKT представляет собой общественную площадку для анонимных авторов. Мы не несём ответственность за выражаемые точки зрения или контент на этом веб-сайте.

Пожертвование (ETH / ERC20): 0x3C5c2F4bCeC51a36494682f91Dbc6cA7c63B514C

Дисклеймер:

REKT не несет никакой ответственности за любое содержание, размещенное на нашем Веб-сайте или имеющее какое-либо отношение к оказываемым нами Услугам, независимо от того, было ли оно опубликовано или создано Анонимным Автором нашего Веб-сайта или REKT. Не смотря на то, что мы устанавливаем правила поведения и нормы публикаций для Анонимных Авторов, мы не контролируем и не несем ответственность за содержание публикаций Анонимных Авторов, а также за то, чем делятся и что передают Авторы с помощью нашего Сайта и наших Сервисов, и не несем ответственность за любое оскорбительное, неуместное, непристойное, незаконное или спорное содержание, с которым вы можете столкнуться на нашем Веб-сайте и на наших Сервисах. REKT не несет ответственность за поведение, будь то онлайн или офлайн, любого пользователя нашего Веб-сайта или наших Сервисов.