Penpie 사고 분석

이 기사는 기계로 번역되었습니다
원문 표시

2024년 9월 3일, 펜들(Pendle) Finance에 수익률과 veTokenomics 부스팅 서비스를 제공하는 Penpie 프로젝트가 악용되어 약 2,700만 달러의 손실이 발생했습니다. 이 공격이 어떻게 발생했는지 자세히 살펴보겠습니다.

개요

공격자 주소:

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(Standardized Yield) 는 펜들(Pendle) 팀이 만든 토큰 표준( 이더리움 개선 제안(EIP) -5115)입니다. 이는 모든 수익 창출 토큰을 래핑하고 해당 토큰의 수익 생성 메커니즘과 상호 작용하기 위한 표준화된 인터페이스를 제공합니다.

사용자가 펜들(Pendle) 프로토콜에 토큰을 입금하고 싶다면, 예를 들어 stETH를 사용하면, stETH를 펜들(Pendle) 에 입금하고 SY-stETH(stETH의 Standardized Yield 버전)를 받습니다. 그런 다음 펜들(Pendle) 이 SY-stETH를 PT-stETH와 YT-stETH로 나눕니다.

PT와 SY 토큰 간의 거래를 가능하게 하기 위해, PT와 해당 SY 토큰 간에 펜들(Pendle) 시장( PendleMarketV3 )이 생성됩니다. 유동성 공급자에게 지급되는 인센티브 토큰은 펜들(Pendle) 토큰입니다. 펜들(Pendle) 잠그면 사용자는 vePENDLE 거버넌스 토큰을 받을 수 있으며, 그 가치는 예치(stake) 의 양과 기간(최대 2년)에 비례합니다.

Penpie 는 펜들(Pendle) Finance 위에 구축된 프로토콜로, 사용자에게 수익률과 veTokenomics 부스팅 서비스를 제공하도록 설계되었습니다. 펜들(Pendle) Finance와 통합된 Penpie 펜들(Pendle) Finance 내에서 거버넌스 권한과 향상된 수익률 혜택을 얻기 위해 펜들(Pendle) 토큰을 잠그는 데 중점을 둡니다.

Penpie 이용하면 펜들(Pendle) 이 만든 시장 계약을 PendleStaking 계약에 등록할 수 있습니다. PendleStaking 계약은 사용자를 대신하여 vePENDLE 포지션을 유지하여 수익률과 투표권을 높이는 주요 계약입니다.

익스플로잇 분석

공격은 두 단계로 나눌 수 있으며, 아래 두 거래를 통해 분석할 수 있습니다.

첫 번째 거래

첫 번째 거래에서 공격자는 PendleYieldContractFactory.createYieldContract() 호출을 사용하여 악의적인 SY 계약을 주입하여 새로운 (PT, YT) 쌍을 만든 다음 PendleMarketFactoryV3.createNewMarket() 사용하여 가짜 시장을 만들려고 시도했습니다. 이 악의적인 SY 계약은 나중에 Penpie 계약에서 보상을 청구하기 위해 호출됩니다.

새로 만든 펜들(Pendle) 마켓에서 공격자는 Penpie 의 PendleMarketRegisterHelper 계약의 registerPenpiePool 함수를 호출하여 해당 Penpie 보상 풀에 이 마켓을 등록했습니다. PendleMarketFactoryV3 에서 만든 모든 마켓은 Penpie 에서 신뢰합니다.

등록 후, 펜들(Pendle) 시장 유동성 공급자(LP) 토큰에 해당하는 새로운 토큰 PRT( PenpieReceiptToken )가 생성됩니다. 또한, 이 펜들(Pendle) 시장 유동성 공급자(LP) 에 대한 보상( 펜들(Pendle) 토큰)을 관리하기 위한 새로운 보상자 계약( BaseRewardPoolV2 )이 생성됩니다. 그런 다음 stakingToken, receiptToken 및 rewarder에 대한 정보가 MasterPenpie 계약에 추가됩니다.

다음으로, 공격자는 PendleYieldToken 계약의 mintPY 함수를 호출했습니다. 이 함수는 SY를 PT와 YT로 토큰화하는 데 사용됩니다. SY 계약은 공격자가 제어하므로 대량의 PT와 YT 토큰을 민트(Mint) 할 수 있습니다.

이후 공격자는 PT 및 SY 토큰(SY 토큰은 공격자가 임의로 생성)을 펜들(Pendle) 시장에 제공하여 유동성 공급 토큰(LP) ( fake_0x5b6c_PENDLE-LPT )을 민트(Mint) .

그런 다음 공격자는 Penpie 의 PendleMarketDepositHelperdepositMarket 함수를 호출하여 펜들(Pendle) 마켓 유동성 공급 토큰(LP) 입금하고 해당 PRT( PenpieReceiptToken )를 민트(Mint) .

두 번째 거래

펜들(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-agETH , 0x038c_PENDLE-LPT-rswETH )이 bonusTokens 목록에 추가되므로 queueNewRewards 함수의 rewarder 계약을 통해 사용자에게 보상으로 전송됩니다.

마지막으로 공격자는 MasterPenpie 계약의 multiclaim 함수를 호출하여 rewarder 계약에서 모든 보상을 인출했습니다. PRT 토큰( claimRewards 콜백에서 Penpie 에 유동성을 추가하는 동안 획득)을 사용하여 공격자는 Penpie 계약에서 withdrawMarket 호출하여 다시 시장 토큰으로 변환하고 대출을 상환할 수 있습니다.

결론

Ethereum과 아비트럼(Arbitrum) 에서 수행된 공격은 여러 Penpie 풀을 대상으로 했으며, 그 결과 약 2,700만 달러의 손실이 발생했습니다. 공격의 근본 원인은 펜들(Pendle) Factory 계약에 의해 생성된 모든 시장이 합법적이라는 가정이었습니다. 이 사건은 이러한 취약성으로부터 보호하기 위해 엄격한 보안 조치와 철저한 계약 감사가 필요함을 강조합니다. 향후 공격을 방지하려면 강력한 검증 프로세스를 보장하는 것이 중요합니다.

출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트