TG Archive

Логика взлома Pickle Finance

Дисклеймер:
Аудит контракта, завершившийся 17 ноября, не затрагивал контроллер№4, который был взломан. Т.е. баг возник после аудита и добавления новых функций.

По скриншоту видно, что эксплоит (взлом) короткий:
https://twitter.com/orbxball/status/1330395576593211392

3 основные части:
swapExactJarForJar, earn () и снова `swapExactJarForJar'.

1 ШАГ: "swapExactJarForJar" позволяет текущему алгоритму протокола Pickle Finance заимствовать DAI из протокола Compound с делевериджем ( т е заложено 20 млн DAI –> взять под их залог 10 млн DAI ).

После делевериджа DAI -> отправлять их в хранилище pDAI Jar.

2 ШАГ: Функция `earn ()`превращает заимствованные DAI в cDAI, как и ожидалось.

3 ШАГ: Повторный вызов функции swapExactJarForJar хакер отзывал cDAI обратно к контроллеру, а затем поместил их в поддельное хранилище.

В этом эксплойте используется 8 недостатков протокола Pickle Finance. Но есть одна вещь, на которую стоит обратить внимание. Этот эксплойт происходит только тогда, когда эти 8 недостатков происходят одновременно. Таким образом, если бы хоть 1 из 8 уязвимостей была исправлена, либо даже не существовала, этого эксплойта не было бы.

8 уязвимостей:

!!! 1. нет проверки соответствия по адресу, вызывавшему функцию swapExactJarForJar, именно так и было подделано хранилище, куда «складывались» украденные средства

2. _target & _data функции передавались в открытом виде

3. функция withdrawForSwap помещена в неавторизованную функцию

4. функция delegatecall помещена в неавторизованную функцию

5. адреса whitelist имеет функцию арбитража

6. адреса whitelist могут обращаться к неавторизованной функции

7. функция earn находится в публичной части контракта

8. разрешен вывод активов из стратегии (нет таймлока).

Pickle Finance старался сделать интерфейс протокола и порядок с ним взаимодействия более дружелюбным и по совместительству – хакеропригодным.

👁 1.9K31Оригінал