看到 onekey 老闆維權 Resupply,損失幾 M 資產,感嘆 Defi 真的太脆弱了。看了一圈,似乎都沒有講的特別清楚黑客到底是怎麼攻擊的,所以我自己做了點研究,分享給大家:
故事的主角是 ResupplyPair,用戶可以通過質押資產進行借貸,合約中的 isSolvent 修飾符負責檢查用戶是否有資格借出請求的資產,具體代碼邏輯為:
可以看到 282 行對 ltv 的計算,如果我們有辦法將 _exchangeRate 置為 0,那檢查不就恆成立?繼續閱讀代碼:
可以看到這個值的變量來自於對預言機 getPrices 的調用,且是分母,換句話說我們需要使 collateral 的價格極大。
閱讀預言機的代碼可以知道 getPrices 只是一層轉發,實際是調用了這個質押資產(即金庫)的 convetToAssets 接口。繼續閱讀代碼:
可以看到這個結果由很複雜的數學運算組成,這裡黑客就是通過放大分子,更進一步地 total_assets,完成的攻擊,查看 _total_assets 函數實現可以發現:
這個值和這個金庫的 controller 合約所持有的 borrowed_token,也就是 crvUSD 有關。
分析到這裡其實就清晰了,ResupplyPair 創建時使用了一個空的金庫,黑客通過向金庫的 controller 合約轉入了一定量的 borrowed_token,最終使得 _exchangeRate 歸零,從而使得自己的質押資產價值無限放大,使用極小的成本就借出了高達 10M 的 reUSD。
攻擊交易:
ResupplyPair 合約地址:
金庫 controller 合約地址:
金庫合約地址:
預言機合約地址:
查看原文



6.83萬
307
本頁面內容由第三方提供。除非另有說明,OKX 不是所引用文章的作者,也不對此類材料主張任何版權。該內容僅供參考,並不代表 OKX 觀點,不作為任何形式的認可,也不應被視為投資建議或購買或出售數字資產的招攬。在使用生成式人工智能提供摘要或其他信息的情況下,此類人工智能生成的內容可能不準確或不一致。請閱讀鏈接文章,瞭解更多詳情和信息。OKX 不對第三方網站上的內容負責。包含穩定幣、NFTs 等在內的數字資產涉及較高程度的風險,其價值可能會產生較大波動。請根據自身財務狀況,仔細考慮交易或持有數字資產是否適合您。