Web3 DAPP里的频率限制安全问题

前言

Defi(去中心金融)是区块链的应用产物之一,主要区别于TradFi。正如金融产品的多样化,Defi也有多种多样的理财形式,除去最常见的交易所,Defi还有种模式是连接真实世界的,名为RWA。用户使用稳定币从RWA公司购买虚拟的Token,RWA则在现实世界里购买对应的股票,债券等。

网站的功能点如下所示:首先网站是一个支持使用USDC/USDT等稳定币来进行操作的RWA交易网站,用户可以通过连接自己的钱包地址来进行交易(手续费自理),也可以通过magic钱包来进行操作(项目方支付)。
magic钱包(https://magic.link/)是一款托管式的钱包,实现一键式 web3 入门体验,主要是为了方便Web2普通用户来进行投资。

攻击流程:

1、连接钱包

用户点击连接magic钱包后,输入个人邮件验证码,钱包即连接成功,然后就可以开始进行申购操作。
Web3 DAPP里的频率限制安全问题
并且由于链上的交易都是公开的,因此我们能够经过一次交易后知道其进行交易的地址,地址如下:
申购时使用的地址A:0xeeb7b5b720d4740cb01931a0eade3a67dd7fe44d    Web3 DAPP里的频率限制安全问题取消申购时使用的地址B:0x8bdb0bf670cacd83818f8a1b2d99cd667ed90a8b  Web3 DAPP里的频率限制安全问题申购前的A地址余额:0.804476818717812867 ETH
取消申购前的B地址余额:0.97167697407444942 ETH
以上地址为sepolia测试链

2、申购

开始进行申购操作:申购的交易hash如下,申购了价值为100元的USDC的Token,手续费花了5U
https://sepolia.etherscan.io/tx/0x4b340fb29b3aa2b4b6559a10bb356ebe44a8026343ff48a0c998df0e4b2557b7
Web3 DAPP里的频率限制安全问题
此时A地址发起交易,需要扣除GAS费余额,耗费:0.002220065072461236 ETH  
按照ETH 3000美元计算,大概6.66美元
Web3 DAPP里的频率限制安全问题
此时A地址余额剩余0.802256753645351631
Web3 DAPP里的频率限制安全问题

3、取消申购

点击申购后,大概在经过几十秒内就会上链成功,但是由于该系统是属于RWA系统,需要和现实世界挂钩,因此现实世界是需要一定的操作时间的。而比如基金在下午3点后买入,就需要等待第二天才能实际买入,因此该系统给予用户一定时间的”反悔”机会。
用户可以点击取消申购
Web3 DAPP里的频率限制安全问题
取消申购的交易hash地址
https://sepolia.etherscan.io/tx/0xc38a3c5ac63116b60c841be589278c1b570497ea1e6b9a7fe9f9586c7a8327fa
在点击取消申购后,B地址则会在链上发起对合约的调用,将刚刚的USDC转账回之前的MAGIC账户中
此时消耗的gas:0.001763905872775246    大概5美元
Web3 DAPP里的频率限制安全问题
余额剩余:0.969913068201674174
Web3 DAPP里的频率限制安全问题

4、总结

这样下来攻击者每进行一次申购/取消申购,就可以无成本消耗项目方10美元左右的ETH钱,并且上述过程并未做任何的限制,所以攻击者可以无限次的调用该操作,最终恶意消耗gas费,攻击者没有任何损失。
最后,我们顺便梳理下上面的地址
用户经过KYC认证后的magic钱包地址:0xb891626e1b89c572d2a9d3324473d0b280f45cad
申购时发起的地址A:
0xeeb7b5b720d4740cb01931a0eade3a67dd7fe44d
取消申购发起的地址B:
0x8bdb0bf670cacd83818f8a1b2d99cd667ed90a8b
企业取消申购合约地址:(企业的合约地址可能有多个,例如issue一个合约,Redemption是另外一个合约)
0x9744c11004a16cfee68a45a69dde7913e098f4f5

1、申购:A地址调用钱包地址上合约(SAFE钱包,本质是个合约,通过合约代码来实现钱包的功能)的Exec Transaction方法,最终转移了105个USDC代币给0x9744c11004a16cfee68a45a69dde7913e098f4f5地址
(把钱转给项目方了)
https://sepolia.etherscan.io/tx/0x4b340fb29b3aa2b4b6559a10bb356ebe44a8026343ff48a0c998df0e4b2557b7
Web3 DAPP里的频率限制安全问题
2、取消申购:用户的钱包地址调用项目方0x9744C11004a16cfeE68a45a69DdE7913E098f4F5的合约方法0x49e664ff   ,这个方法名字没法得知,然后直接转了105个USDC到用户钱包里了。
(项目方把钱退回来了)
https://sepolia.etherscan.io/tx/0xc38a3c5ac63116b60c841be589278c1b570497ea1e6b9a7fe9f9586c7a8327fa
Web3 DAPP里的频率限制安全问题

那么可能有些人会问了,为什么项目方支付的GAS这么高,甚至大于收取用户的手续费?
实际上以太坊手续费高是众所周知的事,项目方也会寻找其他的链来降低GAS,例如ARB链等,但是ETH还是需要的,这是为了保证用户交易的多样性,而且很多用户是非常有钱的,一些大的单子可能支付的手续费就有好几百USDC了(例如用户购买国债这类超低风险的理财)。

5、、修复方式:

最简单的是限制一个用户每天的交易次数(取消赎回次数限制,例如一天内只能取消3次或者5次),并且在后台建立风控机制,观察频繁发起审核取消的用户进行提醒,严重者封号处理。



原文始发于微信公众号(Ice ThirdSpace):Web3 DAPP里的频率限制安全问题

版权声明:admin 发表于 2024年9月20日 下午3:31。
转载请注明:Web3 DAPP里的频率限制安全问题 | CTF导航

相关文章