在aurora-engine 2.6.1版本,修复了一个Near跨链桥上的漏洞。
在注释中有提到了大概的漏洞原理:Fixed the ability the steal funds from those by setting a fee when receiving NEP-141 as ERC-20。
定位到漏洞代码入口处:
根据之前注释中提到的原理,是在与ERC-20交互时产生的漏洞,跟踪receive_erc20_tokens这个方法
receive_erc20_tokens的入参除了&AccountId外,还有&NEP141FtOnTransferArgs,去看下这个参数的含义
实现很简单,发送账号、余额、字符串。回到receive_erc20_tokens方法中,看下这三个参数分别做了什么。
其中可以看到msg参数经过一系列的长度判断,判断recipient是否有效以及fee的判断。
在进行相关字段的验证后,进行ERC-20 token获取
之后进行fee的处理,如果fee不等于0,则将fee从recipient发送到relayer_address。
此刻,如果relayer_address可控,fee可控,则可通过向ETH链上地址发送near代币,设置fee不为0,根据上文逻辑,将会从receiver将fee转到relayer_address。
第一个条件:relayer_address可控
relayer_account_id是入参之一,天然可控,条件一达成。
第二个条件:fee可控
这里就需要NEP141FtOnTransferArgs了,从前文的逻辑中可以看到,amount也是入参,条件二达成。
这时攻击者便可以在near上创建一个合约,然后不断构建NEP-141 -> ERC20 的跨链请求,便可以不断的窃取ETH。
参考:https://medium.com/immunefi/aurora-improper-input-sanitization-bugfix-review-a9376dac046f
https://github.com/aurora-is-near/aurora-engine/commit/7109e30926ea33f67c6f702aa2b796b025cca96a
还没有评论,来说两句吧...