10月2日,跨鏈DEX 聚合器Transit Swap 遭受攻擊,導致大量用戶的資金從錢包中被取出,預計損失超2100 萬美元。 Transit Finance稱,各方安全公司和項目組仍在繼續追踪黑客事件,並通過郵件、鏈上等方式與黑客進行溝通。項目組正在抓緊收集被盜用戶的具體數據,制定具體的返還方案。同時團隊將繼續追回黑客被盜資產的剩餘資產,並將其歸還給丟失的用戶。截止發稿前,黑客已經歸還約70%的資產。
黑客地址:0x75F2abA6a44580D7be2C4e42885D4a1917bFFD46
Hyperlab 安全實驗室根據鏈上交易進行分析,此次攻擊發生的要原因在於Transit Swap 協議在進行代幣兌換時並未對用戶傳入的數據進行嚴格檢查,導致了任意外部調用的問題。
具體來說,用戶在用Transit Swap進行兌換時,會調用一個代理合約(0x8785bb8deae13783b24d7afe250d42ea7d7e9d72)。這個代理合約會根據代幣的種類選擇路徑。緊接著路由橋合約(0x0B47275E0Fe7D5054373778960c99FD24F59ff52)會調用權限管理合約(0xed1afc8c4604958c2f38a3408fa63b32e737c428)的claimtokens進行轉賬。而claimTokens 函數是通過調用指定代幣合約的transferFrom 函數進行轉賬的。其接收的參數都由上層路由橋合約傳入,本身沒有對這些參數進行任何限制,只檢查了調用者必須為路由代理合約或路由橋合約。
攻擊者利用路由代理合約、路由橋合約與權限管理合約未對傳入的數據進行檢查的缺陷,通過路由代理合約傳入構造後的數據調用路由橋合約的callBytes 函數。 callBytes 函數解析出攻擊者指定的兌換合約與兌換數據。此時兌換合約被指定為權限管理合約地址,兌換數據被指定為調用claimTokens 函數將指定用戶的代幣轉入攻擊者指定的地址中。由此攻擊者實現了竊取所有對權限管理合約進行授權的用戶的代幣。
Hyperlab 安全實驗室提醒,在跨合約的函數調用時,合約開發者需要對用戶傳入的數據進行嚴格檢查,並對下層對上層給的返回值進行正確校驗。對Transit Swap用戶而言,需停止使用Transit Swap,並提高自身對區塊鏈錢包的安全意識,尤其是對DEX 的router的無限授權權限保持謹慎。