慢霧安全團隊建議專案方在註冊市場時增加嚴格的白名單驗證機制。

作者:九九,慢霧安全團隊

背景

根據慢霧安全團隊情報,2024 年 9 月 4 日,去中心化流動性收益計畫 Penpie 遭攻擊,攻擊者獲利近 3 千萬美元。慢霧安全團隊對此事件展開分析並將結果分享如下:

圖片
(https://x.com/Penpiexyz_io/status/1831058385330118831)

前置知識

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-LPTLE。

圖片

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 的市場創建邏輯,導致攻擊者能夠透過惡意合約控制獎勵分配機制,從而獲得超額獎勵。慢霧安全團隊建議專案方在註冊市場時,增加嚴格的白名單驗證機制,確保只有經過驗證的市場才能被接受。此外,對於涉及外部合約調用的關鍵業務邏輯,應加強審計與安全測試,避免再次發生類似事件。

免責聲明:作為區塊鏈資訊平台,本站所發布文章僅代表作者及來賓個人觀點,與 Web3Caff 立場無關。文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。