05.OlympusDao@validation
2023-09-18 11:08:32
# 08.PoC
OlympusDao@validation
事件背景
BondFixedExpiryTeller合约拥有的OHM代币被偷走
- 时间:2022.10.21
- 损失金额:$292k
交易
- 漏洞合约:0x007FE7c498A2Cf30971ad8f2cbC36bd14Ac51156
- 攻击事件hash:0x3ed75df83d907412af874b7998d911fdf990704da87c2b1a8cf95ca5d21504cf
- 攻击合约:0xa29E4fe451CCFa5e7DEF35188919ad7077A4DE8f
- 黑客EOA地址:0x443cf223e209E5A2c08114A2501D8F0f9Ec7d9Be
资金流向
攻击过程
攻击合约获利之后,转回到EOA地址,然后去到OlympusDAO中调用transfer()
攻击详细分析
根据攻击过程可以知道,黑客利用合约,调用BondFixedExpiryTeller合约的redeem()
就直接获利,因此,此方法肯定有明显的漏洞:此方法用于取款,烧掉用户在token_
的资产,然后此合约转给用户token_
的标的资产。但是,token_
是可控的,并且没有做任何检验,这就意味着很容易就达到转账,仅仅只是实现burn()
、expiry()
和underlying()
1 | function redeem(ERC20BondToken token_, uint256 amount_) external override nonReentrant { |
复现
1 | pragma solidity ^0.8.10; |
建议
如果参数是外部可控的,一定要进行检验