Back to Blog

#5:Platypus Finance:三度遇襲,幸運生還

Code Auditing
February 15, 2024
6 min read

總結

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 授權給資金池合約)。

這是挽救 240 萬 USDC 的交易記錄

其他兩次攻擊

請參閱以下連結以了解有關其他兩次攻擊的更多詳細資訊。

  • 攻擊 II:2023 年 7 月 11 日,該協議假設 USDC 和 USDT 之間的比例為 1:1,這偏離了市場波動,導致了有缺陷的提款邏輯。一筆攻擊交易連結。此類交易有多筆。

  • 攻擊 III:2023 年 10 月 12 日,由於受到操控的 cashliability 影響了掉期價格。[第一筆攻擊交易 | 第二筆攻擊交易]

總結

這三次攻擊利用了協議中不同的漏洞。儘管已有其他廠商審計過該協議,攻擊者仍然找到了漏洞並成功對其進行了攻擊。幸運的是,部分資產得以挽救,但我們不能期待每次都能如此幸運。應採取更多安全措施包括攻擊監控和自動回應,以保護協議和使用者資產安全。

閱讀本系列的其他文章:

Sign up for the latest updates
電子報 - 2026年6月
Security Insights

電子報 - 2026年6月

本月報告涵蓋2026年6月三起最大安全事件,確認損失合計約2200萬美元。一次精密蜜罐攻擊利用未受檢查的代幣授權,從JaredFromSubway的MEV機器人抽走約1500萬美元。兩個舊版Aztec rollup部署因證明結算邊界漏洞損失約435萬美元。SecondFi的Ed25519實現缺陷暴露錢包私鑰,導致374個錢包共損失約240萬美元。三起事件共同模式:表面完整但從未真正執行的安全保證。

~$400萬損失:Taiko、SecondFi遭攻擊 | BlockSec週報
Security Insights

~$400萬損失:Taiko、SecondFi遭攻擊 | BlockSec週報

本週區塊鏈安全報告涵蓋2026年6月22-28日兩起重大事件,以太坊和Cardano確認損失約410萬美元。Taiko橋接漏洞結合了外洩的SGX飛地簽名密鑰與不完整的認證策略,未能拒絕調試飛地,使攻擊者註冊惡意證明者並偽造L2狀態證明。SecondFi錢包漏洞源於Ed25519隨機數派生中的密碼學實現缺陷,移除了秘密輸入,可從Cardano公開交易數據離線恢復私鑰。

~$18M損失:jaredFromSubway、Aztec及更多 | BlockSec每週快報
Security Insights

~$18M損失:jaredFromSubway、Aztec及更多 | BlockSec每週快報

本週區塊鏈安全報告涵蓋2026年6月15日至21日,以太坊與BNB Chain共發生3起重大事件,總損失約1830萬美元。重點分析兩起事件:jaredFromSubway事件揭示反向授權攻擊模式——MEV機器人主動將資產授權給不可信第三方合約套利,攻擊者構造假包裝代幣與交易池,發出真實事件但從未消耗授權額度,損失約1500萬美元。Aztec三日內第二次漏洞:逃生艙ZK電路中`old_data_root`兩個見證值缺少相等約束,致使攻擊者可用偽造Merkle樹證明虛假票據所有權並通過鏈上驗證。

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit