北京时间2022年5月9日凌晨4:34:42,CertiK安全技术团队监测到Fortress Loans遭到预言机操纵攻击。
北京时间5月9日上午10:05,JetFuel Finance也正式确认了关于预言机操纵的消息,并发布了可疑地址和交易的链接:
目前该项目损失约1,048.1 ETH和400,000 DAI(总价值约298万美元)。攻击者通过DAO和预言机操纵来盗取ETH和DAI以完成本次攻击。当其获取所盗代币后,迅速将所有的代币换成ETH,并通过Tornado Cash将ETH转出。
漏洞交易
https://bscscan.com/tx/0x13d19809b19ac512da6d110764caee75e2157ea62cb70937c8d9471afcb061bf
https://bscscan.com/tx/0x851a65865ec89e64f0000ab973a92c3313ea09e80eb4b4660195a14d254cd425
相关地址
攻击地址:https://bscscan.com/address/0xA6AF2872176320015f8ddB2ba013B38Cb35d22Ad
攻击者合约(极有可能已自毁):
https://bscscan.com/address/0xcd337b920678cf35143322ab31ab8977c3463a45
Fortress Loans预言机:
https://bscscan.com/address/0x00fcf33bfa9e3ff791b2b819ab2446861a318285#code
链合约:https://bscscan.com/address/0xc11b687cd6061a6516e23769e4657b6efa25d
攻击步骤
攻击者创建并资助了一个EOA(0x0db3b68c482b04c49cd64728ad5d6d9a7b8e43e6),向Fortress Governor Alpha合约(0xe79ecdb7fedd413e697f083982bac29e93d86b2e)提出提案,提案ID为11。
Proposal11: https://bscscan.com/tx/0x12bea43496f35e7d92fb91bf2807b1c95fcc6fedb062d66678c0b5cfe07cc002#eventlog
另一个攻击者控制的EOA(0x0db3b68c482b04c49cd64728ad5d6d9a7b8e43e6)随后被投票给这个提案:https://bscscan.com/tx/0x83a4f8f52b8f9e6ff1dd76546a772475824d9aa5b953808dbc34d1f39250f29d#eventlog
提案11因此被执行,将FTS代币抵押品增加到70000000000000,这使得攻击者可以在以下步骤中利用它来获利。
随后,攻击者通过攻击合约https://bscscan.com/address/0xcd337b920678cf35143322ab31ab8977c3463a45,提供100个FTS作为抵押,并借入巨额的其他代币作为回报。https://bscscan.com/tx/0x13d19809b19ac512da6d110764caee75e2157ea62cb70937c8d9471afcb061bf
攻击者还通过调用链式智能合约中的 "submit() "函数来操纵预言机,其中 "requiredSignatures "可以被绕过,并且在部署中禁用power check。
最终部分利润被转移到攻击者的地址,其余的利润被转移到攻击合约之外。
合约漏洞分析
漏洞①
第一个漏洞是治理合约的一个设计缺陷。
治理合约可以执行成功提案,以修改借贷相关的配置(即增加一个抵押品和其相应的抵押品系数)。然而,要成功执行提案,投票所需的最低FTS代币是40万。由于FTS代币的价格很低,攻击者用大约11个ETH交换了超过40万个FTS代币。
有了这些FTS代币,攻击者可以随意创建一个恶意提案并成功执行。
漏洞②
第二个漏洞是链式合约的 "提交 "功能有一个缺陷——允许任何人更新价格。
L142中的必要语句被注释掉了。因此,没有验证以确保函数调用被正确触发。
资产去向
78万+228万USDT在两次攻击交易后被转移到攻击者地址。
230万USDT被发送到Ethereum to anySwap(Multichain)。
77万USDT通过cBridge(Celer Network)发送到以太坊。
所有的USDT通过Unswap兑换成ETH和DAI,并发送至Tornado Cash。
时间线
北京时间5月9日凌晨00:30左右,Fortress(FTS)的代币价格暴跌。很快项目团队即在telegram中说明:项目出了一些问题,目前正在调查中。
但这次攻击可能开始得比我们想象中更早。
攻击者第一次开始「试探」是在北京时间4月20日凌晨1:41:59,他们部署了一个未经验证的自定义合约。在 "踩点"之后接下来的几周里,攻击者持续通过一系列的交易与Fortress进行交互,并部署未经验证的合约,这一行为直到此次攻击事件的前几天才消停。
攻击者部署了合约后,他们又启动了一系列的交易——允许他们创建和资助一个外部拥有的地址,向Fortress Governor Alpha合约提出恶意提案并自己进行投票——因为攻击者之前操纵了价格,因此他们能够轻松地购买足够的FTS也就是40万的必要投票),随后将FTS代币的抵押品设置得极高,使得FTS价值增加,用其借取大量其他代币,然后换成ETH和DAI。
除此之外,攻击者部署的合约中还有一个 "自毁"功能,一旦恶意交易全部完成即会触发。
目前资金在通过cBridge(Celer Network)桥和Multichain交换桥后被转移到以太坊链,并在一系列后续交易中被发送到Tornado Cash。
写在最后
本次攻击事件本应通过安全审计来有效地避免。
针对漏洞①,由于治理代币的价格和有多少代币在流通是未知的,因此发现这个风险并不容易,但可以通过一定的风险发现来警告潜在的相关攻击行为。
针对漏洞②,审计可以发现关键验证的缺失,避免任何人都有可能通过提交功能来操纵价格。
预言机操纵造成的攻击并非仅此一例,日前CertiK发布的【只要操纵预言机就能空手套白狼?DEUS Finance DAO被盗1570万美元攻击事件分析】受盗资金更为庞大。
加密领域安全风险层出不穷,项目团队应尽可能提高相关警惕并时刻关注安全事件以自查,并及时完善和审计合约代码。