技术拆解 THORChain 跨链系统「假充值」漏洞

    由于错误定义,如果跨链充值的ERC20代币符号为ETH,那么将会出现逻辑错误;攻击者正是通过部署了假币合约,完成了跨链假充值。据慢雾区消息,2021年6月29日,去中心化跨链交易协议THORChain发推称发现一个针对THORChain的恶意攻击,THORChain节点已作出反应并进行隔离和防御。慢雾安全团队第一时间介入分析,经分析发现,这是一起针对跨链系统的「假充值」攻击,结果分享如下:什么是「假充值」?

    当我们在谈论「假充值」攻击时,我们通常谈的是攻击者利用公链的某些特性,绕过交易所的充值入账程序,进行虚假充值,并真实入账。慢雾在早期已经披露过多起「假充值」攻击事件:USDT假充值:EOS假充值:以太坊代币假充值:比特币RBF假充值风险:随着RenVM、THORChain等跨链服务的兴起,跨链节点充当起了交易所的角色,通过扫描另一条公链的资产转移情况,在本地公链上生成资产映射。THORChain正是通过这种机制,将以太坊上的代币转移到其它公链。

    漏洞分析我们从业务逻辑入口去追踪分析此漏洞的成因。首先看到在处理跨链充值事件时,调用了**getAssetFromTokenAddress**方法去获取代币信息,并传入了资产合约地址作为参数:bifrost/pkg/chainclients/ethereum/ethereumblockscanner.go在getAssetFromTokenAddress方法里,我们看到它调用了**getTokenMeta**去获取代币元数据,此时也传入了资产合约地址作为参数,但在此处有一个定义引起我们的警觉,在初始化代币时,默认赋予了代币符号为ETH,这就是漏洞的关键点之一:asset:=common.ETHAsset,如果传入合约地址对应的代币符号为ETH,那么此处关于symbol的验证将被绕过。bifrost/pkg/chainclients/ethereum/ethereumblockscanner.go继续验证我们的猜测,我们看到当代币地址在系统中不存在时,会从以太坊主链上去获取合约信息,并以获取到的symbol构建出新的代币,此时所有的漏洞成因都已经显现:bifrost/pkg/chainclients/ethereum/ethereumblockscanner.gobifrost/pkg/chainclients/ethereum/tokens_db.gobifrost/pkg/chainclients/ethereum/ethereumblockscanner.go总结一下,首先是由于错误的定义,如果跨链充值的ERC20代币符号为ETH,那么将会出现逻辑错误,导致充值的代币被识别为真正的以太币ETH。

    还原攻击真相我们来看一笔攻击交易的执行过程,可以提取出充值的代币合约地址:我们在Etherscan上查看这个代币合约地址:发现这个地址对应的合约的代币符号正是ETH,攻击者正是通过部署了假币合约,完成了这次跨链假充值。漏洞修复漏洞补丁:项目方在发现攻击后快速对代码进行了修复,删除了默认的代币类型,使用common.EmptyAsset进行空代币定义,并在后续逻辑中使用asset.IsEmpty()进行判断,过滤了没有进行赋值的假充值代币。总结幸运的是项目方及时发现了本次攻击,未造成巨额财产损失,但作为跨链系统,未来可能聚集巨额的多链资金,安全性不容忽视,因此慢雾安全团队建议在进行跨链系统设计时应充分考虑不同公链不同代币的特性,充分进行「假充值」测试,做好状态监控和预警,必要时可联系专业安全公司进行安全审计。

声明:文章内容不代表本站观点及立场,不构成本平台任何投资建议。本文内容仅供参考,风险自担!

Pixel Artist Pixel Artist
Happy Kittens Puzzle Happy Kittens Puzzle
Penguin Cafe Penguin Cafe
Animal Connection Animal Connection
Snakes N Ladders Snakes N Ladders
Pixel Skate Pixel Skate
BeeLine BeeLine
Draw Parking Draw Parking
Draw Racing Draw Racing
Soccer Balls Soccer Balls
Happy Fishing Happy Fishing
Crashy Cat Crashy Cat

FREE GAMES FOR KIDS ONLINE