# HPAY 攻击事件分析 

By [ACai](https://paragraph.com/@acai) · 2022-11-09

---

背景分析
====

文档目录：

    contract
    ├─autocompound
    │      AutocompundStaking.sol
    │
    ├─base
    │      BaseStaking.sol
    │      MintableSupplyStaking.sol
    │      TaxedStaking.sol
    │
    ├─lib
    │      StakingUtils.sol
    │
    ├─presets
    │      MintableAutoCompundRelockBonus.sol
    │
    └─timelock
            FixedTimeLockStaking.sol
            RelockBonusStaking.sol
            StaticFixedTimeLockStaking.sol
    

更多信息：

[https://wooded-meter-1d8.notion.site/0e85e02c5ed34df3855ea9f3ca40f53b?v=22e5e2c506ef4caeb40b4f78e23517ee&p=d4489312830a40819dbfc3ec1fb4246c&pm=s](https://wooded-meter-1d8.notion.site/0e85e02c5ed34df3855ea9f3ca40f53b?v=22e5e2c506ef4caeb40b4f78e23517ee&p=d4489312830a40819dbfc3ec1fb4246c&pm=s)

漏洞分析
----

![setToken](https://storage.googleapis.com/papyrus_images/e80f30f32ace342f4ed15ea288142bf18d706d6ecb408692b495d67b8e641a7f.png)

setToken

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

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

攻击过程
----

*   创建一个 `fakeToken`；
    
*   调用 `setToken` 函数将 `stakingToken` 与 `rewardsToken` 设为攻击者创建的 `fakeToken`；
    

![setToken ](https://storage.googleapis.com/papyrus_images/e80f30f32ace342f4ed15ea288142bf18d706d6ecb408692b495d67b8e641a7f.png)

setToken

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

![stake ](https://storage.googleapis.com/papyrus_images/b4c8d4cc0a469c4918e46832d5a565ad52faa10c2ba9f0fa7cb938520b6324c3.png)

stake

*   调用 `setToken` 函数将 `stakingToken` 与 `rewardsToken` 设为 `HPAY`；
    
*   调用 `withdraw` 函数，从 `MintableAutoCompundRelockBonus` 合约转出 `HPAY` 。此时合约根据先前步骤 `3` 中存入 `fakeToken` 所记录的 `_balances[msg.sender]` 进行提款操作，实际提出的是 `HPAY`。

---

*Originally published on [ACai](https://paragraph.com/@acai/hpay)*
