返回博客

#5:Platypus Finance:三次遭遇攻击,全靠运气逃过一劫

Code Auditing
2024年2月15日
阅读约 6 分钟

摘要

Platypus Finance 是 Avalanche 区块链上的一个 AMM 协议。它已经遭受过三次攻击,具体如下:

  • 2023 年 2 月 17 日,由于错误的偿付能力检查,该协议遭到黑客攻击,总损失约为 905 万美元。其中,240 万美元在 BlockSec 的帮助下被追回。约 38 万代币被卡在 Aave 合约中,随后被归还。
  • 2023 年 7 月 12 日,该协议遭到黑客攻击,由于忽略了稳定币之间的价差,损失约 5 万美元。
  • 2023 年 10 月 12 日,该协议遭受了价格操纵攻击,损失约 220 万美元。在与攻击者协商后,90% 的被盗资金被归还。

该项目能在这些攻击中幸存下来实属幸运。我们对这三次漏洞利用事件的分析表明,如果采用了细致的审计或更积极的安全措施,这些逻辑缺陷本可以避免。

攻击一

要理解这一安全事件,必须先了解几个智能合约的工作流程。大致过程如下:

  • 用户可以将代币存入资金池成为 LP,并获得 LP 代币。
  • LP 代币可以质押到 MasterPlatypus 中以获得奖励。在此过程中,LP 代币将被转移到 MasterPlatypus 合约中。
  • LP 代币可以用作抵押品来借入其他资产,以提高资产效率。

下图展示了这些交互关系。

漏洞分析

该漏洞存在于 MasterPlatypus 合约内名为 emergencyWithdraw 的函数中。在紧急情况下,应使用此函数来提取质押在 MasterPlatypus 合约中的 LP 代币。在该函数中,合约会检查用户是否处于 Solvent(偿付能力充足)状态,以决定是否允许提款。其逻辑检查用户是否存在坏账(即抵押品是否足以偿还债务)。如果没有坏账,用户便可以提取质押的 LP 代币。

然而,这一逻辑存在缺陷。用户处于 Solvent 状态仅意味着该用户的抵押品能够偿还其债务,但它并未检查用户在紧急提取质押代币后是否仍然保持偿付能力充足。攻击者可以利用这一缺陷借入资产,然后紧急提取质押的 LP 代币(而无需偿还债务)。详见 Immunefi 博客中的详细分析

攻击分析

我们以一笔攻击交易为例,来展示整个攻击过程。

步骤一:从 AAVE 借入 4400 万 USDC 闪电贷

步骤二:将 4400 万 USDC 存入资金池以获得 LP-USDC

步骤三:将 LP-USDC 存入 MasterPlatypus

步骤四:使用 LP-USDC 作为抵押品借入 USP

步骤五:执行 emergencyWithdraw 函数发起攻击

攻击者在不偿还 USP 债务的情况下获得了 LP-USDC。

步骤六:从资金池中提取 LP-USDC 以获得 USDC

步骤七:卖出 USP 以获利

然而,这些利润留在了攻击合约内部。实际上,攻击者本可以为该次兑换设置一个新的接收地址来获取利润。

BlockSec 的救援行动

我们发现攻击者将利润留在了攻击合约内部。此外,攻击合约内部没有提取资产的逻辑。然而,我们在攻击合约中发现了一个漏洞,可以利用它进行反制黑客攻击,从而提取合约内的部分资产。

具体来说,闪电贷回调函数存在访问控制问题,这意味着任何人都可以调用该回调函数。这也是许多 MEV 机器人被攻击的根本原因。

此外,在该回调函数内部,攻击者合约将 USDC 代币授权给了 Platypus finance 资金池合约。而这个资金池合约是可升级的!

结合以上两点,我们可以通过以下方式救回攻击合约内部的 USDC:

  • 升级 Platypus finance 资金池合约,添加一个提取合约内 USDC 的逻辑
  • 调用攻击合约的回调函数,将 USDC 授权给资金池合约
  • 资金池合约可以替换任何(将由攻击合约执行的)函数,从攻击合约中转出 USDC(因为攻击合约已将 USDC 授权给了资金池合约)。

以下是救回 240 万 USDC 的交易

另外两次攻击

有关另外两次攻击的更多详情,请参阅以下链接。

总结

这三次攻击利用了该协议中不同的漏洞。尽管该协议已经过其他一些厂商的审计,攻击者仍然找到了漏洞并成功对协议实施了攻击。幸运的是,部分资产得以追回,但我们不能指望永远如此幸运。为了保护协议和用户资产的安全,应采用更多的安全措施,包括攻击监控和自动响应

阅读本系列的其他文章:

订阅最新动态
~3.2亿美元损失:Liquid Network、Symbiosis 遭利用攻击 | BlockSec
Security Insights

~3.2亿美元损失:Liquid Network、Symbiosis 遭利用攻击 | BlockSec

本报告覆盖2026/09/07-09/13,分析两起共损失约3.2亿美元的安全事件,含此前未覆盖的Liquid Network于09/06遭利用事件。较大事件中,Elements的rangeproof验证缓存因字段拼接无分隔符导致验证结果错配,攻击者伪造4000枚无支撑L-BTC并几乎全部兑出。Symbiosis跨链桥比特币路线因手续费未做负值校验,330聪存款铸造出46,116,860,184.27388234 syBTC,流动性池仅存11.26 syBTC,致约970万美元损失(约9.97 BTC)。

约940万美元损失:Injective、Aquifer遭利用攻击 | BlockSec Weekly
Security Insights

约940万美元损失:Injective、Aquifer遭利用攻击 | BlockSec Weekly

过去一周(2026/08/31-2026/09/06),Injective、Solana、Ethereum和Flow EVM上发生四起安全事件,损失约940万美元。最大的是Injective漏洞,保险基金标识符与二元期权市场标识符冲突,结算路径未比较其面额,损失约480万美元;Solana上的Aquifer因交换路径调用未验证的调用者提供的Token Program,损失约247万美元;Ethereum上的Notional Finance V1因未检查的uint128转换将债务估值为零,损失约173万美元。Flow EVM上的Ankr FLOW因质押入口跳过暂停保护并按过时比率铸币,损失约41万美元。

超越智能合约:Web3中的域名与DNS运营安全
Security Insights

超越智能合约:Web3中的域名与DNS运营安全

合约审计只审合约本身。我们对DefiLlama TVL前100协议背后的100个域名进行了8项基于SEAL的DNS和注册商检查,共800项检查,只有一个域名全部通过。以下是大多数项目缺失的四项关键控制措施,以及它们在用户入口处为何至关重要。

Web3 最佳安全审计方

在上线之前验证设计、代码与业务逻辑,对标业内最高安全标准。

BlockSec 审计