PenPie事件分析

本文为机器翻译
展示原文

2024 年 9 月 3 日,为Pendle Finance 提供收益和 veTokenomics 助推服务的 PenPie 项目遭到攻击,造成约 2700 万美元的损失。让我们来看看这次攻击是如何发生的细节。

概述

攻击者地址:

https://etherscan.io/address/0x7a2f4d625fb21f5e51562ce8dc2e722e12a61d1b

攻击交易:

https://etherscan.io/tx/0x7e7f9548f301d3dd863eac94e6190cb742ab6aa9d7730549ff743bf84cbd21d1
https://etherscan.io/tx/0x42b2ec27c732100dd9037c76da415e10329ea41598de453bb0c0c9ea7ce0d8e5

背景

Pendle Finance 允许用户通过将收益资产分为 PT 和 YT 两个部分来交易未来收益:

  1. PT(Principal Token):代表基础资产(本金)的所有权,分离后不再产生收益。

  2. YT(收益代币):代表直至到期为止从资产中获得未来收益的权利。

要创建新的PT和YT代币对,创建者需要在调用PendleYieldContractFactory.createYieldContract()函数时提供SY合约地址。

SY(标准化收益)是Pendle团队创建的代币标准(EIP-5115)。它包装任何产生收益的代币,并提供标准化接口来与这些代币的收益生成机制进行交互。

如果用户想将其代币存入Pendle协议,以 stETH 为例,他们会将其 stETH 存入Pendle并收到 SY-stETH(stETH 的标准化收益版本)。然后Pendle将此 SY-stETH 拆分为 PT-stETH 和 YT-stETH。

为了实现 PT 和 SY 代币之间的交易,在 PT 和其对应的 SY 代币之间创建了Pendle市场 ( PendleMarketV3 )。支付给流动性提供者的激励代币是Pendle代币。通过锁定Pendle,用户可以获得 vePENDLE 治理代币,其价值与质押的数量和期限成正比(最长 2 年)。

PenPie 是一种建立在Pendle Finance 之上的协议,旨在为用户提供收益和 veTokenomics 提升服务。与Pendle Finance 集成后,PenPie 专注于锁定Pendle代币以获得Pendle Finance 内的治理权和增强的收益收益。

PenPie 允许将Pendle创建的市场合约注册到其 PendleStaking 合约中,该合约是代表用户持有 vePENDLE 头寸以提高收益率和投票权的主要合约。

漏洞分析

攻击过程可以分为两步,通过以下两笔交易进行分析:

第一笔交易

在第一笔交易中,攻击者试图注入一个恶意的 SY 合约,使用PendleYieldContractFactory.createYieldContract()调用来创建新的 (PT, YT) 对,然后使用PendleMarketFactoryV3.createNewMarket()创建一个虚假市场。这个恶意的 SY 合约随后会被 PenPie 合约调用来领取奖励。

利用新创建的Pendle市场,攻击者调用 PenPie 的PendleMarketRegisterHelper合约的registerPenpiePool函数,将该市场注册到相应的 PenPie 奖励池。任何由PendleMarketFactoryV3创建的市场都会受到 PenPie 的信任。

注册后,将创建一个新代币 PRT ( PenpieReceiptToken ),与Pendle市场 LP 代币相对应。此外,还将创建一个新的奖励者合约 ( BaseRewardPoolV2 ) 来管理此Pendle市场 LP 的奖励 ( Pendle代币)。然后,有关 stakingToken、receiptToken 和奖励者的信息将添加到MasterPenpie合约中。

接下来攻击者调用PendleYieldToken合约的mintPY函数,该函数用于将 SY 代币化为 PT 和 YT,由于 SY 合约被攻击者控制,因此攻击者可以铸造大量的 PT 和 YT 代币。

随后,攻击者将 PT 和 SY 代币(SY 代币由攻击者任意铸造)提供给Pendle市场来铸造 LP 代币( fake_0x5b6c_PENDLE-LPT )。

然后,攻击者调用 PenPie 的PendleMarketDepositHelperdepositMarket函数来存入Pendle市场 LP 代币并铸造相应的 PRT( PenpieReceiptToken )。

第二笔交易

在Pendle和 PenPie 中建立虚假市场和资金池后,攻击者执行了第二笔交易来窃取资金。首先,他们需要使用来自BalancerVault的闪电贷借入大量 agETH 和 rswETH 代币。

通过调用 PenPie 中PendleStaking合约的batchHarvestMarketRewards函数,触发了假Pendle市场的redeemRewards函数和攻击者 SY 合约的claimRewards函数。在调用claimRewards函数时,攻击者使用借入的 agETH 和 rswETH 为相应的Pendle市场增加流动性,然后将这些 LP 代币存入 PenPie 池中,保留 PRT 代币以供日后提取。实际目的是欺骗 PenPie 质押合约将这些Pendle市场 LP 代币识别为奖励代币。

为了诱使 PenPie 质押合约将新添加的市场代币(agETH 和 rswETH)识别为奖励,攻击者在 SY 合约中设计了自己的getRewardTokens()函数。该函数旨在将这两个市场代币作为奖励,并将由市场的getRewardTokens()函数调用。

由于这两个代币( 0x6010_PENDLE-LPT-agETH0x038c_PENDLE-LPT-rswETH )被添加到bonusTokens列表中,因此它们通过queueNewRewards函数中的奖励合约作为奖励发送给用户。

最后,攻击者调用 MasterPenpie 合约的multiclaim函数,从奖励者合约中提取所有奖励。攻击者可以利用 PRT 代币(在claimRewards回调中为 PenPie 添加流动性时获得),通过调用 PenPie 合约中的withdrawMarket将其兑换回市场代币,并偿还贷款。

结论

针对以太坊和Arbitrum的攻击针对多个 PenPie 矿池,造成约 2700 万美元的损失。攻击的根本原因是假设Pendle Factory 合约创建的所有市场都是合法的。这一事件强调了采取严格的安全措施和彻底的合约审计以防范此类漏洞的必要性。确保强大的验证流程对于防止未来的攻击至关重要。

来源
免责声明:以上内容仅为作者观点,不代表Followin的任何立场,不构成与Followin相关的任何投资建议。
喜欢
收藏
评论