歡迎來到 Sherlock 的漏洞聚焦!每週,我們將突出我們的研究人員在 Sherlock 審計中發現的一個影響深遠的漏洞。
本週我們發現了一個由於配置錯誤而導致的過度提款。
這是由 @bin2chen、@TheCHADuke、iglyx、@tapired、@xiaoming9090 和 @0xleastwood 在 @NotionalFinance V3 比賽中發現的。

如果當前餘額是 999,900 USDC,而 withdrawAmountExternal 是 1,000,000 USDC,那麼合約中的餘額不足,需要從貨幣市場(例如 Compound)提取額外資金。

由於合約已經擁有 999,900 USDC,因此只需從貨幣市場再提取 100 USDC 以滿足 1,000,000 USDC 的提現請求。
然而,Notional 並不是從貨幣市場提取 100 USDC,而是根據 oracle.getRedemptionCalldata(withdrawAmountExternal) 函數從市場提取 1,000,000 USDC。因此,從貨幣市場提取了 999,900 USDC 的多餘金額。
這會造成什麼影響?
這導致大量資產在 Notional 中閒置,未能在貨幣市場中產生任何回報或利息,這使得用戶的收益大幅下降,因為他們獲得的利率低於預期,並且承擔了機會損失。
攻擊者可能會利用這一點來提取 Notional 在貨幣市場中投資的資金,導致對協議的損害和驚人的回報/利息損失。
修正方案:
基本上,在修正之前,代碼告訴預言機:"準備從貨幣市場提取用戶想要的所有資金。"
而它應該說的是:"只提取我們在貨幣市場中缺少的部分。"

修正後,對於之前的例子,合約已持有的999,900 USDC將保持不變,繼續獲得收益,提高效率,並為所有用戶保留回報。
這個漏洞源於提現金額計算和傳遞過程中的一個微妙邏輯缺陷。由於忽略了合約的現有餘額,系統不必要地從貨幣市場中提取了過多的資金,導致資本效率低下和收益損失。
我們為能夠通過這一發現幫助保護 Notional 而感到自豪。當安全性至關重要時,Sherlock 是正確的選擇。
2,811
35
本頁面內容由第三方提供。除非另有說明,OKX 不是所引用文章的作者,也不對此類材料主張任何版權。該內容僅供參考,並不代表 OKX 觀點,不作為任何形式的認可,也不應被視為投資建議或購買或出售數字資產的招攬。在使用生成式人工智能提供摘要或其他信息的情況下,此類人工智能生成的內容可能不準確或不一致。請閱讀鏈接文章,瞭解更多詳情和信息。OKX 不對第三方網站上的內容負責。包含穩定幣、NFTs 等在內的數字資產涉及較高程度的風險,其價值可能會產生較大波動。請根據自身財務狀況,仔細考慮交易或持有數字資產是否適合您。