freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

零时科技 || Victor the Fortune攻击事件分析
2022-11-02 20:26:58
所属地 陕西省

事件背景

零时科技区块链安全情报平台监控到消息,北京时间2022年10月27日,BSC链上Victor the Fortune 合约受到黑客闪电贷攻击,攻击者已获利约5.8万美元,耗尽了流动资金池,攻击者地址为0x57c112cf4f1e4e381158735b12aaf8384b60e1ce,零时科技安全团队及时对此安全事件进行分析。

攻击步骤

1.攻击者通过闪电贷借出约100,000 USDT

2.将借出的USDT兑换为77,853 VTF

3.调用updateUserBalance()函数计算获得奖励

4.调用transfer函数将资金全部转移至 地址 0x1dd557415a0ddea7d3e56f49c78d54ebbf31f569

5.调用updateUserBalance()函数获得奖励

6.重复执行第四步和第五步,最后共获得 499,803,157 VTF


7.将获得的VTF兑换获得 158,450 USDT

8. 归还闪电贷后共获利 58,450 USDT

漏洞核心

攻击者通过调用transfer函数进行转账,在转账函数中调用了updateUserBalance()函数,由于此时userBalanceTime[user]为0会将当前时间赋值给userBalanceTime[user]。

之后调用updateUserBalance(),当userBalanceTime大于0时会调用 getUserCanMint函数计算奖励值

在getUserCanMint函数中计算返回值是用户的余额除以常数乘当前时间与用户开始时间的时间差,由于没有设置最小时间差,因此在很短时间调用函数也可以获得奖励。

由于调用一次updateUserBalance()函数后会更新时间,攻击者通过调用transfer函数将资金转移至一个新的地址,再次调用updateUserBalance()函数可以继续获利,并且当攻击者地址资金增加时获得的奖励也随着增加,攻击者通过重复以上步骤获得奖励逐渐增加直到将池子掏空。

总结及建议

此次攻击是由于合约中的计算奖励函数的算法只与用户地址余额和时间差有关,攻击者通过先调用转账获得用户初始时间,之后调用获得奖励的函数,通过这两个函数调用过程中的时间差计算获得奖励。通过多次转账计算获得奖励使得资金累加,最后将池子中代币几乎掏空。

安全建议

建议对于计算获得奖励时设置最小时间差,避免攻击者通过短时间多次调用函数获利。

建议项目方上线前进行多次审计,避免出现审计步骤缺失

# 攻击事件 # 安全审计 # 零时科技 # 智能合约审计
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者