首页 > 其他分享 >【漏洞分析】Penpie 攻击事件:重入攻击构造奖励金额

【漏洞分析】Penpie 攻击事件:重入攻击构造奖励金额

时间:2024-09-05 23:25:35浏览次数:10  
标签:Penpie MarketToken 攻击 代币 wstETH 漏洞 合约 1751

背景信息

2024 年 9月 3日,Penpie 合约遭受重入攻击,攻击者在重入阶段向合约添加流动性来冒充奖励金额,从而获取合约内原有的奖励代币。资产损失高达 2734 万美元。

2024 年 5月,Penpie 平台新增了推出了无需许可的资产池功能,即允许 Pendle 上的用户可以在该平台上自建任何 PT 或 YT 代币的 LP 资金池,用户在 Penpie 平台上存入 LP 后,可以额外多获得一份代币奖励。

Trace 分析

攻击者首先在前置交易中新建了一个 market,并将 SY 地址设置为攻击合约 0x4af4

image

随后在攻击交易中,攻击者闪电贷了四种资产(由于四种资产的操作类似,我们选择其中一种资产 wstETH 进行分析)

image

闪电贷内进行了这几类操作

image

batchHarvestMarketRewards 函数中进行了重入攻击

image

代币流向分析

  1. 0x6e79.batchHarvestMarketRewards:
    1. redeemRewards:
      1. [Reentrancy] addLiquiditySingleTokenKeepYt:deposit 16010 wstETH to [Pendle: RouterV4], get 8860 [MarketToken]
      2. [Reentrancy] depositMarket:deposite 1751 [MarketToken] to [0x6e79], received 1751 [StakingToken]
    2. queueNewRewards:Claim 1751 [MarketToken] to 0xd128
  2. multiclaim:Claim 1751 [MarketToken] from 0xd128
  3. withdrawMarket:burn 1715 [StakingToken], get 1715 [MarketToken]
  4. removeLiquiditySingleToken:burn 10611 [MarketToken], get 18733 wstETH
  5. transfer:Repay flashloan

漏洞分析

CreatePool

任何用户都可以在 Pendle 上注册 Pool(market)

https://etherscan.io/address/0x588f5e5d85c85cac5de4a1616352778ecd9110d3#code

image

其中的 onlyVerifiedMarket 检查,会检查 pool 地址是否在 allMarkets 中。而任何人都可以创建池子,绕过这个限制。

https://vscode.blockscan.com/ethereum/0x45cF29F501d218Ad045EB8d622B69968E2d4Ef5C

image

batchHarvestMarketRewards

batchHarvestMarketRewards 函数中,通过计算调用 market.redeemRewards 函数前后的 MarketToken 数量差值,来得到作为奖励代币的 wstETH 数量。

攻击者利用这个设计缺陷,调用 0x6e79.batchHarvestMarketRewards 函数触发重入攻击,使得 bounsTokens 的值增大。

https://vscode.blockscan.com/ethereum/0xff51c6b493c1e4df4e491865352353eadff0f9f8

batchHarvestMarketRewards(Part1)

image

redeemRewards

由于 market 合约为攻击者创建的合约,其 SY 在创建时被设为了攻击合约的地址。

https://vscode.blockscan.com/ethereum/0x40789E8536C668c6A249aF61c81b9dfaC3EB8F32

image

函数调用流程

redeemRewards -> _redeemRewards -> _updateAndDistributeRewards -> _updateAndDistributeRewardsForTwo -> _updateRewardIndex -> _redeemExternalReward -> StandardizedYield.claimRewards

SY 为攻击合约地址,在 claimRewards 函数中进行重入。

image

[Reentrancy] addLiquiditySingleTokenKeepYt & depositMarket

[Reentrancy] addLiquiditySingleTokenKeepYt:deposit 16010 wstETH to [Pendle: RouterV4], get 8860 [MarketToken]
[Reentrancy] depositMarket:deposite 1751 [MarketToken] to [0x6e79], received 1751 [StakingToken]

重入攻击 trace,通过 addLiquiditySingleTokenKeepYtdepositMarket 操作将 wstETH 转换为 MarketToken ,并质押到 0x6e79合约中。

image

batchHarvestMarketRewards(Part2)

通过重入攻击,使得合约在计算 originalBonusBalance 奖励数量时误以为获得了 1751 的奖励(实际上并没有获得任何奖励,余额多出来的部分是重入的时候添加流动性那部分)。

image

originalBonusBalanceleftBonusBalance 的值会按照 _harvestBatchMarketRewards -> _sendRewards -> _queueRewarder 的调用路径传递到 _queueRewarder 函数中。

此时合约会向 0xd128 地址发送 1751 _rewardToken

攻击者在通过重入添加流动性时,所添加的代币数量 1751 等于 0x6e79 合约中代币余额的数量 1751,其目的是构造“新增奖励”的数量等于“账户余额”,使得接下来的 queueRewarder 函数将 0x6e79 合约中的所有代币转移到 0xd128。

image

queueNewRewards

queueNewRewards:Claim 1751 [MarketToken] to 0xd128

0xd128 从 0x6e79 处转移奖励代币。其中0xd128是rewardPool合约。

image

multiclaim

multiclaim:get 1751 [MarketToken] from 0xd128

攻击者从 0xd128 合约中领取奖励(完成获利,这笔资金的来源是 0x6e79 合约的余额)

image

withdrawMarket

withdrawMarket:burn 1751 [StakingToken], get 1751 [MarketToken]

取回在重入中通过 depositMarket 存入的 1751 [MarketToken]

image

removeLiquiditySingleToken

removeLiquiditySingleToken:burn 10611 [MarketToken], get 18733 wstETH

此时攻击者手里持有原来的 8860 ,加上攻击所得 1751,一共持有 10611 [MarketToken]

最终攻击者移除 10611 流动性,获得 18733 的 wstETH。

image

Repay flashloan

向闪电贷归还 16010 wstETH,获利 2723 wstETH。

后记

这次的攻击事件影响挺大的,涉及的金额也是巨大。在事件发生以后,许多安全从业人员都对这件事情进行了分析,我也第一时间尝试着从 trace 去分析这个攻击事件。由于当时事发不久,还没有厂商公布详细的漏洞分析结果,再加上个人叛逆的心态想着难道不参考别人的分析报告我就分析不出来了吗,这次的攻击事件分析是在一天的时间内硬啃 trace 分析得来的。这样的分析对我来说进行得并不容易,且最终输出的分析文档,也会缺乏了一些对项目架构与设计的理解,有骨没肉,读起来很干巴。我反思了一下我为何会落入如此窘境,归根究底还是对项目的不熟悉。在不熟悉项目的前提下做的攻击分析,有形无意,味如嚼蜡。这是一个不可忽视的问题,我需要想想办法。

标签:Penpie,MarketToken,攻击,代币,wstETH,漏洞,合约,1751
From: https://www.cnblogs.com/ACaiGarden/p/18399387

相关文章

  • OWASP TOP10 漏洞解析:访问控制崩溃
    一、定义访问控制崩溃,指的是访问控制策略没有被正确地执行,导致用户可以在他们的预期权限之外进行操作。这种缺陷通常会导致未授权的信息被泄露、修改、销毁,或者让用户执行了超出其权限限制的业务功能。表现形式,也就是我们常说的越权漏洞。越权分为:水平越权:A、B两个用户......
  • 中间件解析漏洞(附环境搭建教程)
    ⼀:IIS解析漏洞环境资源:https://download.csdn.net/download/Nai_zui_jiang/89717504环境安装windows2003+iis61.创建新的虚拟机2.在下⼀步中选择我们的iso⽂件镜像vm已主动识别到windows20033.产品密钥⽹上搜⼀个密码自己设置一个简单的,这里我用的......
  • 中间件解析漏洞
    ⼀:IIS解析漏洞1.1:IIS6.X在iis6.x中,.asp⽂件夹中的任意⽂件都会被当做asp⽂件去执⾏。1.在iis的⽹站根⽬录新建⼀个名为x.asp的⽂件,在x.asp中新建⼀个jpg⽂件。内容为<%=now()%>asp代码2.在外部浏览器中访问windows2003的iis⽹站中的2.jpg发现asp代码被执行......
  • 中间件解析漏洞
    1、IIS1.iis6.x(1)在iis的网站根目录新建一个x.asp文件(2)在x.asp中新建⼀个jpg⽂件。内容为asp代码。(3)在外部浏览器中访问windows2003的iis⽹站中的2.jpg发现asp代码被执⾏(4)将2.jpg⽂件放到⽹站根⽬录下访问,发现其中的asp代码没有被解析。由此可⻅.asp⽂件夹中的任意......
  • 【工具推荐】TomcatWeakPassChecker v2.2(最新版本) - Tomcat 漏洞一键漏洞利用getshe
    工具介绍:一键tomcat漏洞批量弱口令检测、后台部署war包getshell,该脚本用于检查ApacheTomcat管理页面的弱密码,并尝试通过上传自定义WAR包部署GodzillaWebshell。如果成功,将记录成功登录的信息以及获取到的Webshell地址。下载地址链接:https://pan.quark.cn/s/2062b75c4312环......
  • 本文深入探讨了账号信息安全的重要性、面临的主要威胁以及防御策略。在数字化时代,账号
    本文深入探讨了账号信息安全的重要性、面临的主要威胁以及防御策略。在数字化时代,账号信息安全对个人隐私与权益、企业稳定与发展至关重要。面临的威胁包括黑客攻击手段不断升级、软件漏洞、内部威胁和社会工程学利用等。防御策略涵盖用户、企业和技术层面,如用户增强安全意识、......
  • 【春秋云境】CVE-2020-26048(文件上传漏洞)
    点击路径,进入页面,尝试攻克。admin/admin弱口令成功登录寻找能进行文件上传的地方,点击“文件管理”尝试上传php后缀的一句话木马文件,发现失败上传png后缀的一句话木马文件,发现成功对文件重命名前打开bp,进行抓包,修改后缀名删除.htaccess文件(该文件具有重定向URL、......
  • 如何判断网站流量暴增是否是恶意攻击导致的
    当网站流量暴增时,判断是否是恶意攻击导致的至关重要,因为这直接影响到采取的应对措施。以下是一些方法和步骤来判定流量暴增是否由恶意攻击引起:1.流量分析流量模式:检查流量是否呈异常模式,例如流量在非常短的时间内急剧上升。访问来源:分析访问IP地址的来源地,如果大量流量来自同一地......
  • 【漏洞复现】通达OA v11.7 moare 反序列化漏洞
    免责声明:        本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测试时,可能会违反某些法律法规......
  • 【漏洞复现】致远OA fileUpload.do 任意文件上传漏洞
    免责声明:        本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测试时,可能会违反某些法律法规......