{"author":{"address":"0x9cADD876165BF0BbDaCA076dDAf5A8A6925F0097","user":"https://learnblockchain.cn/people/669"},"content":{"body":"一个基于 Pendle 协议构建的农业协议，遭受了重入攻击，导致损失约 2700 万美元。由于 Penpie 已暂停，我们现在提供详细的根本原因分析。这是一个典型的由于缺乏重入保护而导致的问题。具体来说，易受攻击的合约（0xff51c6，PendleStaking 的实现合约）未能考虑到所提供的参数（即市场）可能是不受信任的，这可能会被滥用来重新进入该合约。攻击准备 TX：[https://app.blocksec.com/explorer/tx/et h /0x7e7f9548f301d3dd863eac94e6190cb742ab6aa9d7730549ff743bf84cbd21d1 ...](https://t.co/GfqcLFioiO) 攻击者最初创建了一个伪造的 SY（标准化收益代币，即 0x4476b）。虽然SY代币本身毫无价值，但合约设置了两个高价值的PENDLE-LPT市场代币（即0x6010\\_PENDLE-LPT，0x038c_PENDLE-LPT）作为奖励代币。通过这样做，攻击者随后在Pendle上创建了一个市场，并将其注册到Penpie上。攻击TX：[https://app.blocksec.com/explorer/tx/et h /0x42b2ec27c732100dd9037c76da415e10329ea41598de453bb0c0c9ea7ce0d8e5 …](https://t.co/tyI6SmL5Ao) 在攻击过程中，攻击者执行了batchHarvestMarketRewards()函数来收获奖励，这些奖励是根据调用redeemRewards()函数前后balanceOf()的差额计算出来的。而redeemRewards()函数又触发了特定市场的claimRewards()函数。由于协议没有预料到市场被恶意控制的可能性，攻击者能够通过 depositMarket() 函数重新进入受害者合约。之后，攻击者存入两枚高价值的 LPT 市场代币，这些代币被错误地视为奖励。同时，攻击者获得了与这些存款相对应的铸造股份。因此，攻击者可以提取同样有价值的 LPT 市场代币以及在 depositMarket() 中铸造的相应股份，并领取奖励以实现获利。\r\n\r\n\r\n\r\n\r\n许多人可能不知道在 Pendle 上创建新池是无需许可的。Penpie 通过将一个假池传递给其“batchHarvestMarketRewards”函数而遭到黑客攻击。\r\n\r\n\u003c!--StartFragment--\u003e\r\n\r\n如果你检查该函数，你会看到对池地址进行了有效性检查。因此，该假池必须在 Penpie 的“PendleStaking”合约中注册。但“registerPool”是一个权限函数，仅允许由“resgisterHelper”调用。\r\n\u003c!--StartFragment--\u003e\r\n\r\n![图像](https://pbs.twimg.com/media/GWmdyz3a4AAYZVa?format=jpg\\\u0026name=large)\r\n\r\n\u003c!--StartFragment--\u003e\r\n\r\n\\`registerHelper\\` 是另一个合约，用于验证矿池地址并将其注册到 \\`PendleStake\\`。但您可以看到它是一个无需权限的函数，检查正在调用 \\`pendleMarketFactoryV3.isvalidMarket ()\\`以确保矿池是合法的。\r\n\r\n\u003c!--StartFragment--\u003e\r\n\r\n![](https://pbs.twimg.com/media/GWmfNExXwAAVY3C?format=jpg\\\u0026name=small)\r\n\r\n\u003c!--EndFragment--\u003e\r\n\r\n\r\n\u003c!--EndFragment--\u003e\r\n\u003c!--StartFragment--\u003e\r\n\r\n但这种检查毫无意义，因为任何人都可以使用“PendleMarketFactoryV3”来创建一个新的市场，并通过penpie的“registerHelper”合约中的“isValidMarket”检查。\r\n\r\n\u003c!--EndFragment--\u003e\r\n\u003c!--StartFragment--\u003e\r\n\r\n![](https://pbs.twimg.com/media/GWmfvEKaoAA_bVg?format=jpg\\\u0026name=small)\r\n\r\n\u003c!--EndFragment--\u003e\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2024/09/8YozYZMw66d83e85dbad5.png)\r\n\u003c!--StartFragment--\u003e\r\n\r\n因此黑客通过\\`PendleMarketFactory\\`创建了自己的 SY 代币合约和新池，并利用它来欺骗 Penpie 的\\`harvestBatchMarketRewards\\`功能并耗尽 Penpie 中的 LP 代币。\r\n\r\n\u003c!--EndFragment--\u003e\r\n\u003c!--StartFragment--\u003e\r\n\r\n具体步骤是在 getRewardTokens 中返回 Pendle LP 代币的地址，然后在领取过程中通过 Penpie 存入到对应的 Pendle 池中，从而增加 Penpie 质押合约中的 Pendle LP 代币。\r\n\r\n\u003c!--EndFragment--\u003e","title":"Penpie 被黑客攻击事件分析"},"history":null,"timestamp":1725447973,"version":1}