熱門話題
#
Bonk 生態迷因幣展現強韌勢頭
#
有消息稱 Pump.fun 計劃 40 億估值發幣,引發市場猜測
#
Solana 新代幣發射平臺 Boop.Fun 風頭正勁
歡迎來到 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.44K
熱門
排行
收藏