鏈捕手消息,據慢霧安全團隊情報,跨鏈DEX 聚合器Transit Swap 項目遭到攻擊導致用戶資產被非預期的轉出。慢霧安全團隊分析評估此次被盜資金規模超過2300 萬美元,黑客地址為0x75F2…FD46 和0xfa71…90fb。接著對此次攻擊過程進行了分析: 1. 當用戶在Transit Swap 進行swap 時,會先通過路由代理合約(0x8785bb…)根據不同的兌換類型選擇不同的路由橋合約。隨後路由橋合約(0x0B4727…)會通過權限管理合約(0xeD1afC…)的claimTokens 函數將用戶待兌換的代幣轉入路由橋合約中。因此在代幣兌換前用戶需要先對權限管理合約(0xeD1afC…)進行授權。 2. 而claimTokens 函數是通過調用指定代幣合約的transferFrom 函數進行轉賬的。其接收的參數都由上層路由橋合約(0x0B4727…)傳入,本身沒有對這些參數進行任何限制只檢查了調用者必須為路由代理合約或路由橋合約。 3. 路由橋合約(0x0B4727…)在接收到用戶待兌換的代幣後會調用兌換合約進行具體的兌換操作,但兌換合約的地址與具體的函數調用數據都由上層路由代理合約(0x8785bb…)傳入,路由橋合約並未對解析後的兌換合約地址與調用數據進行檢查。 4. 而代理合約(0x8785bb…)對路由橋合約(0x0B4727…)傳入的參數也都來自於用戶傳入的參數。且代理合約(0x8785bb…)僅是確保了用戶傳入的calldata 內各數據長度是否符合預期與所調用的路由橋合約是在白名單映射中的地址,未對calldata 數據進行具體檢查。 5. 因此攻擊者利用路由代理合約、路由橋合約與權限管理合約均未對傳入的數據進行檢查的缺陷。通過路由代理合約傳入構造後的數據調用路由橋合約的callBytes 函數。 callBytes 函數解析出攻擊者指定的兌換合約與兌換數據,此時兌換合約被指定為權限管理合約地址,兌換數據被指定為調用claimTokens 函數將指定用戶的代幣轉入攻擊者指定的地址中。實現了竊取所有對權限管理合約進行授權的用戶的代幣。此次攻擊的主要原因在於Transit Swap 協議在進行代幣兌換時並未對用戶傳入的數據進行嚴格檢查,導致了任意外部調