文档目录:
contract
├─autocompound
│ AutocompundStaking.sol
│
├─base
│ BaseStaking.sol
│ MintableSupplyStaking.sol
│ TaxedStaking.sol
│
├─lib
│ StakingUtils.sol
│
├─presets
│ MintableAutoCompundRelockBonus.sol
│
└─timelock
FixedTimeLockStaking.sol
RelockBonusStaking.sol
StaticFixedTimeLockStaking.sol
更多信息:

MintableAutoCompundRelockBonus.setToken 函数功能权限设置不当,任意用户可以修改结构体 configuration 中的 stakingToken 与 rewardsToken 参数。
struct StakingConfiguration {
uint256 rewardRate;
uint256 startTime;
uint256 minStake;
uint256 maxStake;
ERC20 stakingToken;
ERC20 rewardsToken;
}
创建一个
fakeToken;调用
setToken函数将stakingToken与rewardsToken设为攻击者创建的fakeToken;

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

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

