外部調用

慢霧:Transit Swap 因任意外部調用被黑,2500 BNB 已轉移到 Tornado Cash

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