總結
Platypus Finance 是 Avalanche 區塊鏈上的一個 AMM 協議,它先後遭到三次攻擊,詳情如下:
- 2023 年 2 月 17 日,由於償付能力檢查機制錯誤,該協議遭受駭客攻擊,導致總損失約 905 萬美元。其中,在 BlockSec 的協助下成功挽救了 240 萬美元。約 38 萬枚代幣一度卡在 Aave 合約中,隨後被歸還。
- 2023 年 7 月 12 日,該協議再次遭到駭客攻擊,損失約 5 萬美元,原因是因為忽視了穩定幣之間的價格差異。
- 2023 年 10 月 12 日,該協議遭受了價格操縱攻擊,損失約 220 萬美元。在與攻擊者談判後,攻擊者歸還了 90% 的被盜資金。
該專案非常幸運,得以在這些攻擊中倖存。我們對這三次攻擊的分析表明,如果進行謹慎的審計或採取更積極的安全措施,這些邏輯漏洞本是可以避免的。
第一次攻擊
要理解這起安全事件,必須先了解幾個智慧合約的工作流程。大致過程如下:
- 使用者可以將代幣存入資金池成為 LP 並獲得 LP 代幣。
- LP 代幣可以質押在 MasterPlatypus 中以獲得獎勵。在此過程中,LP 代幣會被轉移到 MasterPlatypus 合約。
- LP 代幣可以作為抵押品來借入其他資產,以提高資產效率。
下圖顯示了這些互動過程。

漏洞分析
該漏洞存在於 MasterPlatypus 合約中一個名為 emergencyWithdraw 的函數。在緊急情況下,該函數應被用於提取 MasterPlatypus 合約中質押的 LP 代幣。在此函數中,合約會檢查使用者是否「具有償付能力(Solvent)」以允許提取。該邏輯會檢查使用者是否有任何壞帳(即抵押品是否足以償還債務)。如果沒有壞帳,使用者就可以提取質押的 LP 代幣。
然而,這個邏輯是有缺陷的。使用者「具有償付能力」僅表示他/她的抵押品可以償還債務。但是,它並沒有檢查使用者在緊急提取質押代幣後是否仍然具有償付能力。攻擊者可以利用這個缺陷借入資產,然後同時緊急提取質押的 LP 代幣(而不償還債務)。請參閱 Immunefi 部落格的詳細分析。


攻擊分析
我們以一筆攻擊交易為例來展示整個攻擊過程。
第 1 步:從 AAVE 閃電貸借入 4400 萬 USDC

第 2 步:將 4400 萬 USDC 存入資金池以獲得 LP-USDC

第 3 步:將 LP-USDC 存入 MasterPlatypus

第 4 步:使用 LP-USDC 作為抵押品借入 USP

第 5 步:執行 emergencyWithdraw 函數發起攻擊
攻擊者在未償還 USP 債務的情況下獲得了 LP-USDC。

第 6 步:從資金池提取 LP-USDC 以獲得 USDC

第 7 步:賣出 USP 獲利

然而,利潤留在了攻擊合約中。事實上,攻擊者可以為交易設定一個新的接收地址來獲取利潤。
BlockSec 的救援行動
我們發現攻擊者將利潤留在了攻擊合約中。此外,攻擊合約內沒有提取資產的邏輯。然而,我們發現攻擊合約存在漏洞,可以被利用進行反向入侵,從而提取合約中的部分資產。
具體來說,閃電貸回調函數存在存取控制問題,這意味著任何人都可以呼叫此回調函數。這也是許多 MEV 機器人被攻擊的根本原因。
此外,在回調函數內部,攻擊者合約授權 USDC 代幣給 Platypus Finance 資金池合約。而這個資金池合約是可升級的!

結合上述兩點,我們可以透過以下方式挽救攻擊合約中的 USDC:
- 將 Platypus Finance 資金池合約升級,加入提取合約內 USDC 的邏輯。
- 呼叫攻擊合約的回調函數,將 USDC 授權給資金池合約。
- 資金池合約可以替換任何函數(由攻擊合約執行),以便從攻擊合約中轉移 USDC(因為攻擊合約已將 USDC 授權給資金池合約)。

其他兩次攻擊
請參閱以下連結以了解有關其他兩次攻擊的更多詳細資訊。
-
攻擊 II:2023 年 7 月 11 日,該協議假設 USDC 和 USDT 之間的比例為 1:1,這偏離了市場波動,導致了有缺陷的提款邏輯。一筆攻擊交易連結。此類交易有多筆。
-
攻擊 III:2023 年 10 月 12 日,由於受到操控的
cash和liability影響了掉期價格。[第一筆攻擊交易 | 第二筆攻擊交易]
總結
這三次攻擊利用了協議中不同的漏洞。儘管已有其他廠商審計過該協議,攻擊者仍然找到了漏洞並成功對其進行了攻擊。幸運的是,部分資產得以挽救,但我們不能期待每次都能如此幸運。應採取更多安全措施包括攻擊監控和自動回應,以保護協議和使用者資產安全。
閱讀本系列的其他文章:
- 導引:2023 年十大「精彩」安全事件
- #1:利用 Flashbots Relay 漏洞收割 MEV 機器人
- #2:Euler Finance 事件:2023 年最大規模的駭客攻擊
- #3:KyberSwap 事件:以極其微妙的計算掌握舍入錯誤的精妙利用
- #4:Curve 事件:編譯器錯誤導致從無害原始碼產生錯誤的位元組碼
- #6:Hundred Finance 事件:催化易受攻擊的衍生協議中與精度相關的漏洞利用浪潮
- #7:ParaSpace 事件:與時間賽跑,阻止業界迄今最關鍵的攻擊
- #8:SushiSwap 事件:笨拙的救援嘗試導致了一系列模仿攻擊
- #9:MEV Bot 0xd61492:從掠食者到獵物,一場巧妙的漏洞利用
- #10:ThirdWeb 事件:受信任模組之間的不相容性暴露了漏洞



