一.背景
2021 年 8 月 10 日晚,有訊息稱 Poly Network 跨鏈專案被攻擊導致約 6 億美金的損失,知道創宇區塊鏈安全實驗室 對該事件展開分析。
二.攻擊地址及交易
事件一共使三條鏈:ETH、BSC、Polygon 上的資產收到了損失,由於攻擊過程類似,這裡挑選 BSC 鏈的攻擊作為分析樣本。
被攻擊合約:
EthCrossChainManager:https://bscscan.com/address/0x7cea671dabfba880af6723bddd6b9f4caa15c87bEthCrossChainData:https://bscscan.com/address/0x11e2a718d46ebe97645b87f2363afe1bf28c2672
攻擊交易:
https://bscscan.com/tx/0x3eba3f1fb50c4cbe76e7cc4dcc14ac7544762a0e785cf22034f175f67c8d3be9(改變 EthCrossChainData 的 Keeper )
https://bscscan.com/tx/0x534966864bda354628d4f1c66db45cbefcdda7433e9576e7664fea01bb05be9a (盜取合約下代幣)
三.漏洞原因
漏洞原因其實出在 EthCrossChainManager 合約的verifyHeaderAndExecuteTx 函式可以在其他鏈構造交易修改 BSC 鏈上的 keeper (可以理解為交易驗證者),從而駭客新增自身為驗證者後以合約的身份呼叫外部合約進行盜幣。
EthCrossChainManager 合約的 verifyHeaderAndExecuteTx 函式透過校驗其他鏈的區塊資訊來實現跨鏈驗證操作,攻擊者透過構造交易在其他鏈發起了一筆構造過用於修改 Keeper 的交易,BSC 鏈的 EthCrossChainManager 合約驗證交易時就執行 putCurEpochConPubKeyBytes 函式完成了修改 Keeper 的操作,導致 EthCrossChainData 合約中的驗證者公鑰加入了攻擊者的資訊,交易資訊如下。
https://bscscan.com/tx/0x3eba3f1fb50c4cbe76e7cc4dcc14ac7544762a0e785cf22034f175f67c8d3be9
交易結果顯示其呼叫 putCurEpochConPubKeyBytes 函式成功更改了 keeper ,那麼駭客直接就可以用合約的身份發起轉賬,轉走該合約下所有的代幣,因為其自身就是 Keeper ,所有的交易都能驗證透過,那麼駭客就模擬在其他鏈已經完成跨鏈充值轉賬,然後再呼叫 verifyHeaderAndExecuteTx 函式進行驗證提現操作,只需要構造一下轉賬代幣資訊即可完成盜幣,隨後攻擊者不停的更換代幣地址轉出 manager 許可權下所有代幣餘額。
四.漏洞總結與後續
此次攻擊事件的漏洞點在於 EthCrossChainData 下有修改keeper的函式 putCurEpochConPubKeyBytes ,攻擊者透過碰撞與之相同的函式選擇器,致其讓 BSC 端更改了 Keeper ,從而添加了攻擊者的資訊,導致了攻擊者能夠構造交易並驗證透過,引發了代幣資產的損失。目前專案方已暫停交易並呼籲各大專案方交易所凍結駭客攻擊地址,駭客也開始退回所盜資產,如有最近進展,我們將會繼續跟進。