总结
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 机器人遭到攻击的根本原因。
此外,在回调函数内部,攻击合约批准(approve)Platypus 金融池合约使用其 USDC 代币。而这个池合约是可升级的!

结合以上两点,我们可以通过以下方式挽救攻击合约内的 USDC:
- 升级 Platypus 金融池合约,以包含提取合约内 USDC 的逻辑。
- 调用攻击合约的回调函数,批准池合约使用 USDC。
- 池合约可以替换任何函数(该函数将由攻击合约执行),以从攻击合约中转移 USDC(因为攻击合约已授权池合约使用其 USDC)。

其他两次攻击
关于另外两次攻击的更多详细信息,请参考以下链接。
-
攻击 II:2023 年 7 月 11 日,协议假设 USDC 和 USDT 之间的比率为 1:1,这偏离了市场波动,导致了有缺陷的提现逻辑。这是其中一笔攻击交易的链接。此类交易有多笔。
-
攻击 III:2023 年 10 月 12 日,由于被操纵的
cash和liability影响了交换价格。[第一笔攻击交易 | 第二笔攻击交易]
总结
这三次攻击利用了该协议中不同的漏洞。尽管其他一些供应商已经对该协议进行了审计,但攻击者仍然发现了漏洞并成功利用了协议。幸运的是,部分资产得到了挽救,但我们不能指望一直保持幸运。应当采取更多的安全措施,包括攻击监测和自动响应,以确保协议和用户资产的安全。
阅读本系列的其他文章:
- 引言:2023 年十大“惊人”安全事件
- #1:通过利用 Flashbots 中继中的漏洞收割 MEV 机器人
- #2:Euler Finance 事件:2023 年最大的黑客攻击
- #3:KyberSwap 事件:通过极其微妙的计算巧妙利用舍入误差
- #4:Curve 事件:编译器错误从无辜的源代码中生成了错误的字节码
- #6:Hundred Finance 事件:催化了易受攻击的分叉协议中与精度相关的漏洞利用热潮
- #7:ParaSpace 事件:与时间赛跑,挫败行业内最关键的一次攻击
- #8:SushiSwap 事件:笨拙的救援尝试导致了一系列模仿攻击
- #9:MEV 机器人 0xd61492:在一场天才的攻击中从猎手变为猎物
- #10:ThirdWeb 事件:受信任模块之间的不兼容导致安全漏洞暴露



