【漏洞分析】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
漏洞分析

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。
后記
好了,漏洞很簡單是吧。那不重要,隨它吧。最近這段時間沒什么干勁,十一月中旬了,還沒拿到 offer,還沒拿到 offer,還沒拿到 offer。什么都沒確定,什么都說不準。寒氣元年的應屆畢業生,躺在砧板上。

浙公網安備 33010602011771號