【漏洞分析】HPAY 攻击事件分析

背景

造成本次攻击的原因是关键函数的鉴权不当,使得任意用户可以设置关键的变量值,从而导致攻击的发生。

被攻击合约:https://www.bscscan.com/address/0xe9bc03ef08e991a99f1bd095a8590499931dcc30

合约目录:

contract
├─autocompound
│      AutocompundStaking.sol
│
├─base
│      BaseStaking.sol				// stake 和 withdraw
│      MintableSupplyStaking.sol
│      TaxedStaking.sol
│
├─lib
│      StakingUtils.sol
│
├─presets
│      MintableAutoCompundRelockBonus.sol	// 被攻击合约
│
└─timelock
        FixedTimeLockStaking.sol
        RelockBonusStaking.sol
        StaticFixedTimeLockStaking.sol

更多信息: DeFi Hacks Analysis@Sun @XREX security team

漏洞分析

image

MintableAutoCompundRelockBonus.setToken 函数功能权限设置不当,任意用户可以修改结构体 configuration 中的 stakingTokenrewardsToken 参数。

struct StakingConfiguration {
    uint256 rewardRate;
    uint256 startTime;
    uint256 minStake;
    uint256 maxStake;
    ERC20 stakingToken;
    ERC20 rewardsToken;
}

攻击过程

  1. 创建一个 fakeToken

  2. 调用 setToken 函数将 stakingTokenrewardsToken 设为攻击者创建的 fakeToken

    image

  3. 调用 stake 函数,向 MintableAutoCompundRelockBonus 合约转入 fakeToken;。此时 _balances[msg.sender] 将会记录攻击者存入的 fakeToken 数量;

    image

  4. 调用 setToken 函数将 stakingTokenrewardsToken 设为 HPAY

  5. 调用 withdraw 函数,从 MintableAutoCompundRelockBonus 合约转出 HPAY 。此时合约根据先前步骤 3 中存入 fakeToken 所记录的 _balances[msg.sender] 进行提款操作,实际提出的是 HPAY

    image

后记

好了,漏洞很简单是吧。那不重要,随它吧。最近这段时间没什么干劲,十一月中旬了,还没拿到 offer,还没拿到 offer,还没拿到 offer。什么都没确定,什么都说不准。寒气元年的应届毕业生,躺在砧板上。

posted @ 2022-11-09 11:05  ACai_sec  阅读(101)  评论(0编辑  收藏  举报