時間:2023-07-17|瀏覽:276
攻擊解析:
一、黑客在OntologyChain上發起了一個本應是無效的惡意交易。 二、中繼器Ontology-Relayer在沒有充分檢查的情況下將該交易添加到PolyChain的Merkletree中并簽字,然后發布到PolyChain區塊中。這也可能是為什么黑客不得不冒險通過中心化交易所購買"ONG"(OntologyChain的Gas)的原因。 三、黑客利用步驟二中的有效Merkle證明,在以太坊上調用了PolyNetwork的ECCM合約,將keepers改為黑客控制的公鑰。 四、獲得keepers權限后,黑客就可以在多個公鏈上任意解鎖資產。 值得注意的是,PolyNetwork在一些鏈上的中繼器沒有執行此交易,因此這些鏈上的資產未受到影響。
細節分析:
一、黑客于北京時間2021年8月10日17:32:32對Ontology發起了一筆惡意交易。 二、此惡意交易調用了一個method"66313231333138303933",其對應的簽名為0x41973cd9(與后面調用的putCurEpochConPubKeyBytes函數簽名相同)。 這筆交易本應無效,但中繼器OntologyRelayer卻在未充分檢查的情況下將其納入PolyChain的Merkletree并簽字,然后發布到PolyChain區塊中。Merkletree用于證明交易的真實性。 產生的跨鏈交易鏈接如下:https://explorer.poly.network/tx/1a72a0cf65e4c08bb8aab2c20da0085d7aee3dc69369651e2e08eb798497cc80 三、此惡意交易利用了中繼器OntologyRelayer的漏洞,這可能就是為什么黑客不得不冒險通過中心化交易所購買"ONG"(OntologyChain的Gas)的原因。 黑客部分聲明的截圖如下: 四、跨鏈交易在以太坊上調用了PolyNetwork合約的EthCrossChainManager.verifyHeaderAndExecuteTx函數,其中第一個參數包含了Merkle證明,解析如下: 五、該函數解析Merkle證明后發現其有效,并確認該惡意交易確實存在于已被簽名的Merkletree中。 隨后調用了EthCrossChainManager._executeCrossChainTx函數來執行該交易,即調用指向合約(0xcf2afe102057ba5c16f899271045a0a37fcb10f2)中的method(0x6631313231333138303933),并傳入參數args(010000000000000014a87fb85a93ca072cd4e5f0d4f178bc831df8a00b)。由于該method的函數簽名與步驟二中提到的method簽名相同(均為0x41973cd9,可能是哈希碰撞),因此成功執行,并將keepers的公鑰更改為黑客的公鑰。以太坊上的交易鏈接如下:https://etherscan.io/tx/0xb1f70464bd95b774c6ce60fc706eb5f9e35cb5f06e6cfe7c17dcda46ffd59581 六、黑客更改公鑰后,即可隨意解鎖資產。
事件總結:
此次攻擊是由一系列交易構成的,其攻擊根源分析如下: 1. 中繼器OntologyRelayer會接收任意帶有"makeFromOntProof"事件的交易。 2. 中繼器OntologyRelayer在未充分檢查的情況下,將惡意交易發布到PolyChain上。 3. 在步驟二中,該惡意交易被納入PolyChain的Merkletree中,產生了有效的Merkle證明。 4. 以太坊上的ECCM合約只對步驟二產生的Merkle證明和原始數據進行了輕量級驗證。值得注意的是,Merkle證明的全面驗證應該在協議層面完成,而不是在智能合約層面。
本文來源:CertiK 文章作者:CertiK