跨鏈互操作協議Poly Network 遭受黑客攻擊引發關注,官方轉載了慢霧安全團隊的分析,慢霧安全團隊認為,攻擊者通過此函數傳入精心構造的數據修改了EthCrossChainData 合約的keeper 為攻擊者指定的地址,並非網傳的是由於keeper 私鑰洩漏導致這一事件的發生。
攻擊細節
1. 本次攻擊的核心在於EthCrossChainManager 合約的verifyHeaderAndExecuteTx 函數可以通過_executeCrossChainTx 函數執行具體的跨鏈交易。
2. 由於EthCrossChainData 合約的owner 為EthCrossChainManager 合約,因此EthCrossChainManager 合約可以通過調用EthCrossChainData 合約的putCurEpochConPubKeyBytes 函數修改合約的keeper。
3. 其中EthCrossChainManager 合約的verifyHeaderAndExecuteTx 函數是可以通過內部調用_executeCrossChainTx 函數執行用戶指定的跨鏈交易,所以攻擊者只需要通過verifyHeaderAndExecuteTx 函數傳入精心構造的數據來使_executeCrossChainTx 函數執行調用EthCrossChainData 合約的putCurEpochConPubKeyBytes 函數以改變keeper 角色為攻擊者指定的地址。
4. 替換完成keeper 角色地址後,攻擊者即可隨意構造交易從合約中取出任意數量的資金了。
攻擊流程
1. 被攻擊合約: https://bscscan.com/address/0x7cea671dabfba880af6723bddd6b9f4caa15c87b
2. 攻擊者通過EthCrossChainManager 合約的verifyHeaderAndExecuteTx 函數調用putCurEpochConPubKeyBytes 函數更改keeper 操作: https://bscscan.com/tx/0x3eba3f1fb50c4cbe76e7cc4dcc14ac7544762a0e785cf22034f175f67c8d3be9
3. 攻擊者實施攻擊: https://bscscan.com/tx/0x534966864bda354628d4f1c66db45cbefcdda7433e9576e7664fea01bb05be9a https://bscscan.com/tx/0xd59223a8cd2406cfd0563b16e06482b9a3efecfd896d590a3dba1042697de11a https://bscscan.com/tx/0x4e57f59395aca4847c4d001db4a980b92aab7676bc0e2d57ee39e83502527d6c https://bscscan.com/tx/ 0x50105b6d07b4d738cd11b4b8ae16943bed09c7ce724dc8b171c74155dd496c25 https://bscscan.com/tx/0xd65025a2dd953f529815bd3c669ada635c6001b3cc50e042f9477c7db077b4c9 https://bscscan.com/tx/0xea37b320843f75a8a849fdf13cd357cb64761a848d48a516c3cac5bbd6caaad5
4. 攻擊完成後,由於keeper 被修改,導致其他用的正常交易被revert。
5. 同理以太坊上也是類似的操作:
被攻擊合約: https://etherscan.io/address/0x838bf9e95cb12dd76a54c9f9d2e3082eaf928270
攻擊者更改keeper 操作: https://etherscan.io/tx/0xb1f70464bd95b774c6ce60fc706eb5f9e35cb5f06e6cfe7c17dcda46ffd59581
攻擊者實施攻擊交易: https://etherscan.io/tx/0xad7a2c70c958fcd3effbf374d0acf3774a9257577625ae4c838e24b0de17602a
總結
本次攻擊主要在於EthCrossChainData 合約的keeper 可由EthCrossChainManager 合約進行修改,而EthCrossChainManager 合約的verifyHeaderAndExecuteTx 函數又可以通過_executeCrossChainTx 函數執行用戶傳入的數據。因此攻擊者通過此函數傳入精心構造的數據修改了EthCrossChainData 合約的keeper 為攻擊者指定的地址,並非網傳的是由於keeper 私鑰洩漏導致這一事件的發生。