時間:2023-06-13|瀏覽:267
簡單概括就是,兩周前,Optimism Foundation聘請Wintermute為其在中心化交易所上市的OP代幣提供流動性。Wintermute獲得了2000萬枚OP貸款。
這2000萬枚OP將被部署在Wintermute的Optimism錢包。當Wintermute將錢包地址發(fā)給Optimism團隊時,發(fā)送的是Wintermute在主網上部署了一段時間的GnosisSafe多簽錢包地址。這里Wintermute犯了一個嚴重錯誤,因為控制GnosisSafe多簽錢包并不能保證控制EVM兼容鏈同一地址。
以太坊開發(fā)者KelvinFichter解釋Wintermute被攻擊原因,用戶通常假設他們可以在以太坊上訪問的任何帳戶也可以在其他基于EVM的鏈上訪問。對于外部擁有的賬戶(也稱為非合約賬戶),這通常是正確的。這不一定適用于智能合約賬戶。可以使用完全不同的代碼在不同鏈上的相同地址創(chuàng)建合約,從而產生完全不同的所有者。
EVM地址分為EOA(外部擁有的賬戶)和CA(合約賬戶)。合約地址又有兩種方式獲得:
CREATE new_address=hash(sender,nonce)
CREATE2 new_address=hash(0xFF,sender,salt,bytecode)
與CREATE2不同,通過CREATE創(chuàng)建的合約地址不是基于用于創(chuàng)建合約的代碼,而僅基于創(chuàng)建者地址和nonce,只要用不同nonce不停碰撞就可以創(chuàng)建和L1層Wintermute錢包地址相同的地址。
看一下鏈上細節(jié):
1、13天前,Optimism團隊從0x25地址測試發(fā)送1個OP給Wintermute發(fā)送給Optimism團隊的地址0x4f
https://optimistic.etherscan.io/tokentxns?a=0x4f3a120e72c76c22ae802d129f599bfdbc31cb81&p=2
2、12天前,Optimism團隊分兩筆將1900萬枚和100萬枚OP發(fā)送給Wintermute。
直至此時,Wintermute還沒有意識到他們沒有這個地址的控制權。
3、Wintermute GnosisSafe多簽錢包創(chuàng)建于561天前,
https://etherscan.io/tx/0xd705178d68551a6a6f65ca74363264b32150857a26dd62c27f3f96b8ec69ca01
多簽合約地址為0x76e2cfc1f5fa8f6a5b3fc4c8f4788f0116861f9b。
從合約代碼(https://etherscan.io/address/0x76e2cfc1f5fa8f6a5b3fc4c8f4788f0116861f9b#code)可知是通過CREATE而不是CREATE2創(chuàng)建的多重簽名。
多簽錢包地址即為0x4f。
4、4天前,攻擊者將舊的Safefactory部署到Optimism。
然后不同nonce碰撞重復324次觸發(fā)create函數創(chuàng)建Optimism地址。
https://optimistic.etherscan.io/tx/0x00a3da68f0f6a69cb067f09c3f7e741a01636cbc27a84c603b468f65271d415b#internal
第135次在Optimism上產生L1層Wintermute多簽錢包相同的地址,進而控制了Optimism上的0x4f地址。
正如KelvinFichter所說,此事件不是Optimism或GnosisSafe中任何漏洞的結果,而是源于在多鏈之前舊版本的GnosisSafe中做出的(合理的)安全假設。