歡迎回到 Sherlock 的漏洞聚焦,我們將突出在 Sherlock 審計中發現的一個影響深遠的漏洞。 本週,我們要介紹的是存款欺騙。 這是由 @0xalpharush 和 @bernd_eth 在 @zetablockchain 跨鏈比賽中發現的。 🧵
這是 @bernd_eth 對漏洞的總結: 1. ZetaChain 的觀察者監控外部鏈上的交易(例如,以太坊、索拉納),並將其添加到集中式的入站追蹤器中,以將其處理為存款和取款,假設交易成功。 2. 與 EVM 整合不同,索拉納的實現跳過了交易成功檢查,這使得惡意觀察者可以添加失敗的存款,鑄造無擔保的 ZRC20 SOL,並耗盡橋接資金。 3. 儘管觀察者已被 ZetaChain 明確列入白名單,但確保沒有單一方能夠妨礙鏈或 siphon 資產是至關重要的。
通常,觀察者不會處理失敗的交易,但這段代碼路徑未能執行與其 EVM 對應部分相同的驗證。雖然這需要一個 "特權" 角色,但每個驗證者都是觀察者,而 BFT 共識應該是拜占庭容錯的,即容忍 <1/3 的惡意方。因此,一個惡意的觀察者不應該能夠偽造存款,並誘使誠實的驗證者通過缺乏驗證的入站追蹤器投票鑄造失敗交易的 ZRC20 Sol,這是其 Solana 實現的缺陷。
此漏洞的根本原因: ProcessInboundEvents 函數不要求交易必須成功,這與 EVM 入站觀察者的行為不同,後者在這裡正確地執行此操作。由於指令被解碼為成功,惡意觀察者可以偽造整個 ZRC20-SOL 餘額的存款,然後提取鎖定在橋接的 Solana 端的 SOL,竊取橋接中的所有 lamports。此攻擊還可以用來提取 SPL 代幣或執行任意的存款和調用。例如,從存款指令中移除網關的 PDA 的可寫屬性會導致交易失敗(請參見 POC 中的錨約束錯誤),並且一旦通過 MsgAddInboundTracker 添加到入站追蹤器中,仍然可以處理。
內部前提條件: 一個惡意或疏忽的觀察者使用 MsgAddInboundTracker 將一個失敗的 Solana 交易添加到入站追蹤器,該交易包含 Gateway 指令,導致所有驗證者處理並投票鑄造 ZRC20 Sol 在 Zetachain 上。 CCTX 獲得足夠的投票,並在 Zetachain 上鑄造未擔保的 ZRC20 Sol。
外部前提條件: 任何一方向網關發送失敗的交易,並附上存款指令(或存款和呼叫)。 Zetachain 上的 ZRC20 Sol 的接收者提取它並在 Solana 上接收 lamports。
攻擊路徑: 1) 任何方都向網關發送一個失敗的交易,並附上存款指令(或存款和呼叫)。 2) 一個惡意或疏忽的觀察者使用 MsgAddInboundTracker 將包含網關指令的失敗 Solana 交易添加到入站追蹤器,導致所有驗證者處理並投票鑄造 ZRC20 Sol 在 Zetachain 上。 3) ProcessInboundTrackers 任務使得偽造的 CCTX 獲得足夠的投票,並在 Zetachain 上鑄造未擔保的 ZRC20 Sol。 4) 在 Zetachain 上收到 ZRC20 Sol 的接收者提取它並在 Solana 上獲得 lamports。
這會造成什麼影響? 所有存入 Solana 橋的 lamports 和 SPL 代幣都可能被盜,因為存款可以被偽造為任何金額(儘管 Gateway 程式導致交易回退,但仍然會被處理)。
緩解措施: 在 Solana Observer 的入站追蹤器處理中,請在對交易進行投票之前檢查該交易是否成功。
我們很自豪能夠通過這次發現來幫助保護 @zetablockchain。 當它絕對需要安全時,Sherlock 是正確的選擇。
查看原文
8,596
20
本頁面內容由第三方提供。除非另有說明,OKX 不是所引用文章的作者,也不對此類材料主張任何版權。該內容僅供參考,並不代表 OKX 觀點,不作為任何形式的認可,也不應被視為投資建議或購買或出售數字資產的招攬。在使用生成式人工智能提供摘要或其他信息的情況下,此類人工智能生成的內容可能不準確或不一致。請閱讀鏈接文章,瞭解更多詳情和信息。OKX 不對第三方網站上的內容負責。包含穩定幣、NFTs 等在內的數字資產涉及較高程度的風險,其價值可能會產生較大波動。請根據自身財務狀況,仔細考慮交易或持有數字資產是否適合您。