当前位置: 代码网 > 科技>区块链>区块链技术 > Penpie被黑分析:被黑原因+攻击步骤分析

Penpie被黑分析:被黑原因+攻击步骤分析

2024年09月05日 区块链技术 我要评论
根据慢雾安全团队情报,2024 年 9 月 4 日,去中心化流动性收益项目Penpie 遭攻击,攻击者获利近 3 千万美元,慢雾安全团队对该事件展开分析并将结果分享,为什么Penpie被黑?Penpie被...

penpie被黑分析:被黑原因+攻击步骤分析!根据慢雾安全团队情报,2024 年 9 月 4 日,去中心化流动性收益项目 penpie 遭攻击,攻击者获利近 3 千万美元。慢雾安全团队对该事件展开分析并将结果分享。为什么penpie被黑?penpie被黑原因+攻击步骤分析,希望大家喜欢!

前置知识

pendle finance 是一种去中心化金融收益交易协议,总锁定价值超过 45 亿美元。该协议成功地与 magpie 整合,旨在优化收益机会并增强其 vetokenomics 模型。在此基础上,penpie 项目引入了流动性挖矿功能,使 pendle finance 的市场能够实现被动收益。

在 pendle finance 中包含以下几个重要概念:

  • pt (principal token):代表未来某个时间点的本金。持有 pt 代表握有本金的拥有权、并于到期后可兑换领回。例如你拥有一张 1 年后到期的 1 枚 pt-steth 期权,那么在 1 年后你将能兑换价值 1 eth 的 steth。
  • yt (yield token):代表未来的收益。持有 yt 代表你拥有底层资产产生的所有实时收益,并且可以随时在 pendle 上手动领取所累积的收益。如果你拥有 1 个 yt-steth,而 steth 的平均收益率为 5%,那么在一年结束时,你将累积 0.05 个steth。
  • sy (simple yield):用于包装任何生息代币的合约。其提供了标准化的接口,可以与任何生息代币的收益生成机制进行交互。
  • lpt (liquidity provider token):代表一个流动性市场,作为提供底层资产流动性的凭证。
  • prt (pool reward token):代表 penpie 池子中用户存入 lpt 代币的存款凭证。

根本原因

此次事件的核心在于 penpie 在注册新的 pendle 市场时,错误地假设所有由 pendle finance 创建的市场都是合法的。然而,pendle finance 的市场创建流程是开放式的,允许任何人创建市场,并且其中的关键参数如 sy 合约地址,可以由用户自定义。利用这一点,攻击者创建了一个含有恶意 sy 合约的市场合约,并利用 penpie 池子在获取奖励时需要对外部 sy 合约调用的机制,借助闪电贷为市场和池子添加了大量的流动性,人为放大了奖励数额,从而获利。

攻击步骤分析

攻击前置准备

交易哈希:0x7e7f9548f301d3dd863eac94e6190cb742ab6aa9d7730549ff743bf84cbd21d1

1. 首先,攻击者通过 pendleyieldcontractfactory 合约的 createyieldcontract 函数创建 pt 和 yt 收益合约,将 sy 设置为攻击合约地址,并以此调用 pendlemarketfactoryv3 合约的 createnewmarket 函数创建了对应的市场合约 0x5b6c_pendle-lpt。

2. 接着,攻击者使用 pendlemarketregisterhelper 合约的 registerpenpiepool 注册 penpie 池子,此过程中会创建存款凭证 prt 代币合约及相关的 rewarder 合约,并在 penpie 中登记池子信息。

3. 随后,攻击者调用 yt 合约的 mintpy 函数,铸造大量 yt 和 pt,数量取决于攻击合约(sy 合约)返回的汇率。

4. 紧跟着,攻击者将 pt 存入市场 0x5b6c_pendle-lpt 并铸造 lp 代币。

5. 最后,攻击者将 lp 代币存入 penpie 池子,换取存款凭证 prt 代币。

正式攻击

交易哈希:0x42b2ec27c732100dd9037c76da415e10329ea41598de453bb0c0c9ea7ce0d8e5

1. 攻击者先通过闪电贷借出大量 ageth 和 rsweth 代币。

2. 调用 penpie 池子的 batchharvestmarketrewards 函数,批量收集指定市场的奖励,此操作触发了市场合约 0x5b6c_pendle-lpt 的 redeemrewards 函数。

3. 在 redeemrewards 函数中,外部调用了 sy 合约(攻击合约)的 claimrewards 函数,期间攻击者使用闪电贷资金为奖励代币增加流动性(攻击合约中特意将奖励代币设置为两种市场代币 0x6010_pendle-lpt 和 0x038c_pendle-lpt),并将获得的市场代币存入 penpie 池子,从而获得相应的存款凭证代币。

4. 接着,这些新存入 penpie 池子的市场代币会被当作计算出来的奖励,随后通过 rewarder 合约的 queuenewrewards 函数将这些代币转移至该合约。

由于 0x5b6c_pendle-lpt 市场中仅攻击者一人存款,因此可以立即调用 masterpenpie 合约的 multiclaim 函数,提取 rewarder 合约中的这部分 lpt 代币。

5. 最后,攻击者通过 pendlemarketdeposithelper 合约的 withdrawmarket 函数燃烧在第三步获取的存款凭证 prt,赎回市场代币,并将这些市场代币连同上一步中提取的奖励一同移除流动性,最终获取基础资产代币(ageth 和 rsweth),实现获利。

总结

此次安全事件暴露了 penpie 在市场注册环节存在校验不足的问题,过度依赖 pendle finance 的市场创建逻辑,导致攻击者能够通过恶意合约控制奖励分配机制,从而获得超额奖励。慢雾安全团队建议项目方在注册市场时,增加严格的白名单验证机制,确保只有经过验证的市场才能被接受。此外,对于涉及外部合约调用的关键业务逻辑,应当加强审计与安全测试,避免再次发生类似事件。

以上就是代码网小编给大家分享的penpie被黑分析:被黑原因+攻击步骤分析了,希望大家喜欢!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com