Erc20协议中,approve授权一直是个问题,已经发生了多起安全事件。
原文作者:Numen Cyber Labs
原文来源:微信公众号
事件回顾
10月2日,NUMEN实验室根据链上数据监测,发现TokenPocket支持的跨链交易平台聚合器Transit Swap遭到黑客攻击,损失金额巨大。目前黑客地址0x75F2abA6a44580D7be2C4e42885D4a1917bFFD46在以太坊链上有3180个ETH价值4161559美元,在BSC Chain链上有49612个BNB,价值14011105美金和一些其他代币。攻击损失接近2100W。
攻击分析
攻击发生在bsc。用户在用Transit Swap进行兑换时,会有一个入口合约(0x8785bb8deae13783b24d7afe250d42ea7d7e9d72),这个入口合约会根据代币的种类选择路径,最后0x0B47275E0Fe7D5054373778960c99FD24F59ff52这个合约会调用0xed1afc8c4604958c2f38a3408fa63b32e737c428这个合约的claimtokens进行转账。
看上图,前面几次调用都是在查余额和查指定的合约有没有调用transferfrom的权限。
从调用0x8785bb8deae13783b24d7afe250d42ea7d7e9d72这个合约开始,这个合约相当于闪兑的入口,接下来调用0x0b47275e0fe7d5054373778960c99fd24f59ff52的callBytes(bytes)函数,这个地方的数据已经是恶意数据了。然后调用0x75fa557bb38daa465f06f5e605e46abe0d5ce9ec这个合约的getFeeRate(address,uint256,uint256,string),查费率。最后调用0xed1afc8c4604958c2f38a3408fa63b32e737c428合约的claimTokens(address,address,address,uint256),这个函数先授权0xed1afc8c4604958c2f38a3408fa63b32e737c428,然后再调用进行转账(应该是函数内部有不同的分支)。授权calldata看下图:
看调用栈,此时transferfrom已经是0xed1afc8c4604958c2f38a3408fa63b32e737c428,有权限调用transferfrom给黑客地址转钱。
参考tx:
0x181a7882aac0eab1036eedba25bc95a16e10f61b5df2e99d240a16c334b9b189
最后
Erc20协议中,approve授权一直是个问题,已经发生了多起安全事件,同时在跨合约的函数调用时,通过上层调用透传到下层的数据需要谨慎,首先下层对上层给的返回值一定要是不信任的,需要经过正确的校验。熊市,黑客事件频发,各位用户多注意。
目前Transit Swap已经暂停了所有合约交易功能并在努力追踪黑客信息,希望能挽回本次攻击的损失。NUMEN实验室建议使用过Transit Swap去revoke.cash取消合约授权并且将自己的资金提走。
责任编辑:Felix