- 撰文:Cobo 安全團隊
日前 Stargate 跨鏈橋的底層協議 LayerZero 更新了默認的交易驗證合約,經 Cobo 區塊鏈安全團隊分析,此次更新修復了之前版本中存在的嚴重漏洞,該漏洞可能導致所有依托 LayerZero 構建的跨鏈項目的資產受到影響。
Stargate Finance 是近日最受人矚目的跨鏈橋項目,截至發文時 TVL 已超過 35 億美金。
Stargate 跨鏈橋底層基於 LayerZero 實現跨鏈消息傳遞。 LayerZero 完成跨鏈消息傳遞的基本原理是:
- Oracle 會將源鏈上的 blockhash 和 block receiptsRoot 提交到目標鏈上
- Relayer 會將源鏈上跨鏈消息所在交易的 receipt 以及該 receipt 與 block receiptsRoot 的路徑關係提交到目標鏈上,此時目標鏈上的交易驗證合約會基於 Ethereum MPT 的依賴關係,對 Relayer 所提交的 receipt 和 Oracle 所提交的 receiptsRoot 的對應關係進行驗證
- 如果驗證通過,該 receipt 被認為是合法的 receipt,並向上層協議轉發,觸發後續的跨鏈資產操作
LayerZero 3 月 28 日在未發表任何公告的情況下更新了跨鏈使用的驗證合約。 Cobo 安全團隊通過對比原始驗證合約
(MPTValidator)和新驗證合約(MPTValidatorV2)代碼,發現本次更新是對之前重大安全漏洞的修復。
補丁核心代碼如下:
原始漏洞代碼在進行 MPT 驗證時,通過外部傳入的 pointer 來獲取下一層計算所用到的 hashRoot。這裡使用 solidity 底層 add, mload 等彙編指令從 proofBytes 中獲取 hashRoot ,由於沒有限制 pointer 在 proofBytes 長度內,因此攻擊者可以通過傳入越界的 pointer,使合約讀取到 proofBytes 以外的數據作為下一層的 hashRoot。這樣就存在偽造 hashRoot 的可能,進一步導致偽造的交易 receipt 可以通過 MPT 驗證。最終可造成的後果是,在 Oracle 完全可信的前提下,Relayer 仍可以單方面通過偽造 receipt 數據的方式來實現對跨鏈協議的攻擊,打破了 LayerZero 之前的安全假設。
目前 LayerZero 協議的 Oracle 是一個類似多籤的合約,三位 admin 中的兩位提交相同的數據後,會被認為數據是有效的。但是 Relayer 是單簽 EOA 控制,任何一個 Relayer 都可以提交攻擊數據,完成所有的攻擊流程。
補丁後的代碼使用傳入的 path 並使用 safeGetItemByIndex 函數獲取 MPT 下一層的 hashRoot,保證了 hashRoot 存在於當前的 proofBytes 中,從而可以使 MPT 驗證正確的進行下去。
此次爆出漏洞的代碼是 LayerZero 協議中最核心的 MPT 交易驗證部分的代碼,是整個 LayerZero 及上層協議(例如 Stargate)正常運作的基石。雖然 LayerZero 項目方已經修復了目前明顯的漏洞,但是不排除還存在其他被攻擊漏洞的可能性。此外,LayerZero 項目的關鍵合約目前大都還被 EOA 控制,沒有採用多簽機製或者時間鎖機制。如果這些特權 EOA 的私鑰一旦洩漏,也可能會導致所有上層協議的資產受到影響。
在此,Cobo 區塊鏈安全團隊提醒投資者註意新項目的風險,同時呼籲 LayerZero 項目方在對合約代碼進行深度審計的同時,也盡快將目前 EOA 控制的特權轉移給多籤或者時間鎖合約,減少攻擊風險敞口。