日前Stargate 跨鏈橋的底層協議LayerZero更新了默認的交易驗證合約,經Cobo 區塊鏈安全團隊分析,此次更新修復了之前版本中存在的嚴重漏洞,該漏洞可能導致所有依托LayerZero 構建的跨鏈項目的資產受到影響。
Stargate Finance(https://stargate.finance/ )是近日最受人矚目的跨鏈橋項目,截至發文時TVL 已超過35 億美金。
Stargate 跨鏈橋底層基於LayerZero 實現跨鏈消息傳遞。 LayerZero 完成跨鏈消息傳遞的基本原理是:
Oracle會將源鏈上的blockhash 和block receiptsRoot 提交到目標鏈上
Relayer 會將源鏈上跨鏈消息所在交易的receipt 以及該receipt 與block receiptsRoot 的路徑關係提交到目標鏈上,此時目標鏈上的交易驗證合約會基於Ethereum MPT [1] 的依賴關係,對Relayer 所提交的receipt 和Oracle 所提交的receiptsRoot 的對應關係進行驗證
如果驗證通過,該receipt 被認為是合法的receipt,並向上層協議轉發,觸發後續的跨鏈資產操作。
LayerZero 3 月28 日在未發表任何公告的情況下更新了跨鏈使用的驗證合約[2]。 Cobo 安全團隊通過對比原始驗證合約(MPTValidator)和新驗證合約(MPTValidatorV2)代碼[3],發現本次更新是對之前重大安全漏洞的修復。
補丁核心代碼如下:
原始漏洞代碼在進行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 控制的特權轉移給多籤或者時間鎖合約,減少攻擊風險敞口。
Reference:
https://eth.wiki/fundamentals/patricia-tree
https://etherscan.io/tx/0xf4f0495bfed37d4d95b3342ead0962433c7973f240b9b0739faa91e6ccac9d40
https://www.diffchecker.com/RJdDTCx7
Cobo Labs 希望協助加密世界投資者規避風險、提高收益,為傳統金融機構、風險投資公司、通證基金、個人投資者、交易所、媒體等夥伴提供客觀、有深度的數據分析。
關於亞太最大的加密貨幣託管及資管平台Cobo:我們向機構提供領先的安全託管與企業資管業務;我們向全球高淨值合格投資人提供加密數字錢包業務和豐富靈活的定期與結構化產品,我們關注金融創新,並於2020 年第三季度成立了第一家面向全球機構的基金產品「DeFi Pro」。