(复现)操纵预言机+提案攻击—Fortress Loans
黑客操作分析
黑客地址 https://bscscan.com/address/0xa6af2872176320015f8ddb2ba013b38cb35d22ad
攻击流程
创建提案(提案内容为设置fToken的抵押因子为700000000000000000)->给提案投票->使提案通过->创建exp合约->exp合约中执行提案->修改ftoken质押因子成功->exp调用了Chain合约的submit函数修改了其中的状态变量->修改了状态变量fcds最终修改了价格预言机中的价格。->套利离场提案操作
创建提案时间为5月3日
https://bscscan.com/tx/0x18dc1cafb1ca20989168f6b8a087f3cfe3356d9a1edd8f9d34b3809985203501
提案合约0x0db3b68c482b04c49cd64728ad5d6d9a7b8e43e6
对提案的操作根据的日志分析
https://bscscan.com/address/0xe79ecdb7fedd413e697f083982bac29e93d86b2e#events
1.ProposalCreated 提案(攻击者为11号提案)
https://bscscan.com/tx/0x12bea43496f35e7d92fb91bf2807b1c95fcc6fedb062d66678c0b5cfe07cc002#eventlog
2.调用了两次VoteCast
给提案投票(投了119774334170940063343039) 都是( 5月6日)
https://bscscan.com/tx/0x83a4f8f52b8f9e6ff1dd76546a772475824d9aa5b953808dbc34d1f39250f29d
给提案投票,投了296193548055351919633063
https://bscscan.com/tx/0xc368afb2afc499e7ebb575ba3e717497385ef962b1f1922561bcb13f85336252#eventlog
3.ProposalQueued 将提案插入队列中(5月6日)
https://bscscan.com/tx/0x647c6e89cd1239381dd49a43ca2f29a9fdeb6401d4e268aff1c18b86a7e932a0
调用queue函数
走到第一步,state函数中的quorumVotes中
quorumVotes返回400000个FTS
而这个proposal.forVotes是在前面Votecast中修改的
由于两次投票,可以满足这个条件
4.ProposalExecuted 执行提案(5月8日)
https://bscscan.com/tx/0x13d19809b19ac512da6d110764caee75e2157ea62cb70937c8d9471afcb061bf
恶意合约里面来执行的提案
恶意合约(5月8日)
创建exp tx
https://bscscan.com/tx/0x4800928c95db2fc877f8ba3e5a41e208231dc97812b0174e75e26cca38af5039
exp合约
https://bscscan.com/address/0xcd337b920678cf35143322ab31ab8977c3463a45
攻击前黑客给exp转了一些钱(100FTS 3.020309536199074866MAHA)
攻击交易
https://bscscan.com/tx/0x13d19809b19ac512da6d110764caee75e2157ea62cb70937c8d9471afcb061bf
首先是调用_setCollateralFactor修改了fToken的newCollateralFactorMantissa。
这里可以看到日志确实被修改了
重点是submit函数,之所以能够成功修改状态变量fcds,是因为submit函数中缺少了对signer本身的校验以及power的校验。
用一下SharkTeam的图
修改了预言机中的价格,导致后续获取价格的时候出错了(这里好像SharkTeam弄错了,这里调用的是getCurrentValue而不是getCurrentValues)
交易细节查看Exploit中的步骤。主要为套利
EXP:https://github.com/8olidity/DeFiVulhub/tree/main/Fortress
Last updated