跨链 DEX 聚合器 Transit Swap 攻击分析

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的无限授权权限保持谨慎。

Subscribe to HyperLab
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.