
北京時間11月22日凌晨2點37分,CertiK安全研究團隊通過Skynet發現Pickle Finance項目遭到攻擊,共損失約1975萬枚價值近一億三千萬人民幣DAI。
自9月10日Pickle Finance開始挖礦起,一直沒有什麼存在感。
有了食物大軍的大幅漲跌經驗在前,投資者本身對於異軍突起的Pickle項目保持著一定程度的警惕。
但自從9月14日獲得V神親自站台,酸黃瓜在洶湧的DeFi浪潮中憑藉其DeFi新玩法及各種背書,可謂是平地起價完成了10倍的漲幅。
“剛用5美元的價格把手裡價值1萬美元的PICKLE賣掉,睡了一覺它的價值就變成了60美元???這???”
正當各投資者摩拳擦掌預備好入手這一新型食物代幣或是已經深陷其中,11月23日傳來的消息卻令投資者們大驚失色。
整個攻擊流程如下:
二級標題
整個攻擊流程如下:
整個攻擊流程如下:
第一步:攻擊者通過StrategyCmpdDAIV2.getSuppliedUnleveraged()的函數獲得當前在位於地址0xcd892a97951d46615484359355e3ed88131f829d的StrategyCmpdDAIV2合約中有多少可以被取出的Dai數目,這裡記為Amount_A。
第二步:攻擊者調用位於0x6847259b2b3a4c17e7c43c54409810af48ba5210地址處的ControllerV4智能合約中的swapExactJarForJar()函數,並在調用時傳入1號和2號臟jar,Amount_A以及0,[],[]作為參數。
其中1號臟jar和2號臟jar由於是攻擊者自己部署的,符合IJar接口的智能合約,因此其中的token()函數的邏輯實現以及其他函數都是由攻擊者自己決定的。因為Pickle Finance swapExactJarForJar()函數沒有對傳入的jar是否為官方的智能合約地址進行驗證,因此該步驟得以成立。
隨著swapExactJarForJar()函數的執行,當執行到上圖289行的位於swapExactJarForJar()函數中的withdrawForSwap()函數時,經過一系列函數調用,最終執行位於0xcd892a97951d46615484359355e3ed88131f829d的deleverageToMin()函數以及deleverageUntil()函數,將當前StrategyCmpdDAIV2中可以被取出的代幣(Amount_A)轉移到位於0x6949bb624e8e8a90f87cd2058139fcd77d2f3f87地址的PickleJar智能合約中。
deleverageToMin()函數以及deleverageUntil()函數
第三步:調用位於0x6949bb624e8e8a90f87cd2058139fcd77d2f3f87地址的PickleJar智能合約中的earn()函數(如上圖所示)。
總共調用三次,目的是將位於當前PickleJar中的pDAI數目的DAI,從0x6b175474e89094c44da98b954eedeac495271d0f地址轉移到位於0x6847259b2b3a4c17e7c43c54409810af48ba5210地址處的ControllerV4智能合約中,並在887行通過調用ControllerV4合約中的earn()函數(如下圖所示),在下圖152行中通過deposit()函數。
從而實現調用0xcd892a97951d46615484359355e3ed88131f829d的StrategyCmpdDAIV2合約中的deposit()函數,將PickleJar中的pDAI數目的cDAI鑄造給StrategyCmpdDAIV2。
第四步:再次調用位於0x6847259b2b3a4c17e7c43c54409810af48ba5210地址處的ControllerV4智能合約中的swapExactJarForJar()函數,並在調用時傳入3號和4號臟jar,以及0,0, CurveProxyLogic智能合約地址,0x20作為參數。
此處0x20是一個注入參數,目的是為了與CurveProxyLogic智能合約地址配合,執行位於0x6186e99d9cfb05e1fdf1b442178806e81da21dd8地址的CurveProxyLogic智能合約中的add_liquiditya()函數。
3號臟jar:
0xa2da08093a083c78c21aeca77d6fc89f3d545aed
4號臟jar:
0xa445e12d69e8bd60290f6935d49ff39ba31c6115
CurveProxyLogic智能合約地址: 0x6186e99d9cfb05e1fdf1b442178806e81da21dd8
在此步驟之後,在第三步中存儲在StrategyCmpDAIV2被從StrategyCmpDAIV2智能合約中轉移到ControllerV4智能合約處。
至此所有可以被取出的代幣被以cDAI的形式存儲在ControllerV4智能合約中,並且攻擊者擁有取出cDAI的資格。
第五步,攻擊者調用位於地址0x5d3a536e4d6dbd6114cc1ead35777bab948e3643的CErc20Delegator智能合約中的redeemUnderlying()函數,內部調用了位於0xbb8be4772faa655c255309afc3c5207aa7b896fd地址處的CErc20中的redeemUnderlying(),redeemUnderlyingInternal()以及redeemFresh()函數。
最終將所有獲得的cDAI轉換成DAI,提出所有DAI並完成攻擊。
CErc20Delegator中的redeemUnderlying()函數
安全建議
安全建議
多次的DeFi攻擊事件,表明了一個事實:“已審計”並不意味著其擁有了安全保證。
Pickle Finance在10月或更早通過的安全審計,並不代表其新增的智能合約均得到了實時的安全檢測。
高收益伴隨著高風險,此次漏洞的爆發同樣也是一個警示。
完備的安全保障=安全審計+實時檢測+資產保障=CertiK審計服務+CertiK實時檢測安全預言機+CertiK快速掃描+CertiKShield去中心化資產保障資金池
CertiK的一系列安全服務及工具,覆蓋了項目及用戶的資產安全需求。
如您有審計需求,歡迎點擊CertiK公眾號底部對話框,留言免費獲取諮詢及報價!