【漏洞分析】Vestra DAO 攻击事件:这个质押项目它取款不核销呀

背景信息

攻击交易:https://app.blocksec.com/explorer/tx/eth/0x9a1d02a7cb9fef11fcec2727b1f9e0b01bc6bcf5542f5b656c84d6400a1b4604

漏洞合约:https://etherscan.io/address/0x8a30d684b1d3f8f36b36887a3deca0ef2a36a8e3#code

LockedStaking 合约提供质押功能,用户调用 stake 函数质押时会根据质押时长立即计算收益 yield,并且记录在用户的收益 user.yield 上。等到该笔质押的时间过后,用户可以调用 unStake 函数取回本金和收益。

Trace 分析

攻击者不断用同一笔资金进行 startunStake 操作,攻击者创建新合约 strat 存入 500000 VSTR,然后通过 0x1f2c 合约 调用 unStake 取回 520000 VSTR。

start 操作就是通过新创建的合约进行 stake

漏洞分析

问题出在 LockedStaking 合约的 unStake 函数,unStake 函数对质押的状态检查与更新存在问题,导致在用户的质押到期后,可以无限次进行取款。

  1. require 检查的 user.stakeAmount 参数,在 unstake 操作后不更新
  2. unstake 操作后更新的 user.isActive 参数,却不检查。

那么攻击者可以无限次 unstake 来获取 VSTR,为什么还需要创建新合约进行 stake 操作呢?

因为在 unstake 的时候会更新 data.totalStaked -= stakeAmount; ,如果不创建新合约进行 stake 操作增加 data.totalStaked 的值,就会发生下溢出。

相关推荐
阿菜ACai3 天前
20250110-FortuneWheel 攻击事件:竟然不设滑点,那就体验一下 Force Investment 吧
漏洞分析·defi
阿菜ACai7 天前
【漏洞分析】20250105-SorraStaking:奖励金额计算错误,每次取款都有大收益
漏洞分析·defi
xzajyjs2 个月前
CodeQL学习笔记(3)-QL语法(模块、变量、表达式、公式和注解)
web安全·渗透测试·漏洞分析·代码审计·codeql
阿菜ACai4 个月前
【漏洞分析】20240507-SATURN:当闪电贷遇上有缺陷的通缩机制
智能合约·漏洞分析
阿菜ACai4 个月前
【漏洞分析】Penpie 攻击事件:重入攻击构造奖励金额
漏洞分析·defi
阿菜ACai4 个月前
【漏洞分析】OSN 代币攻击事件:一笔资金伪造多个分红大户
智能合约·漏洞分析·solidity
Soujer5 个月前
记一次CSDN认证模块后端未校验漏洞
安全威胁分析·漏洞分析·csdn
阿菜ACai6 个月前
【漏洞分析】Li.Fi攻击事件分析:缺乏关键参数检查的钻石协议
漏洞分析
阿菜ACai6 个月前
【漏洞分析】DoughFina 攻击事件分析:不做任何参数检查的去杠杆合约
区块链·智能合约·漏洞分析·solidity·defi