慢霧安全團隊建議專案方在註冊市場時增加嚴格的白名單驗證機制。
作者:九九,慢霧安全團隊
背景
根據慢霧安全團隊情報,2024 年 9 月 4 日,去中心化流動性收益計畫 Penpie 遭攻擊,攻擊者獲利近 3 千萬美元。慢霧安全團隊對此事件展開分析並將結果分享如下:
前置知識
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 立場無關。文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。