Логика взлома Pickle Finance
Дисклеймер:
Аудит контракта, завершившийся 17 ноября, не затрагивал контроллер№4, который был взломан. Т.е. баг возник после аудита и добавления новых функций.
По скриншоту видно, что эксплоит (взлом) короткий:
https://twitter.com/orbxball/status/13303955765932113923 основные части:
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 старался сделать интерфейс протокола и порядок с ним взаимодействия более дружелюбным и по совместительству – хакеропригодным.
_______
Источник: 
https://t.me/Defiscamcheck/464