Aurora输入处理不当导致费用窃取漏洞
langu_xyz

在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

  • Post title:Aurora输入处理不当导致费用窃取漏洞
  • Post author:langu_xyz
  • Create time:2022-11-08 21:00:00
  • Post link:https://uxss.net/2022/11/08/Aurora输入处理不当导致费用窃取漏洞/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.