千里之堤毁于蚁穴 Fortress Protocol 惨遭攻击
前言
北京时间 2022 年 5 月 9 日,知道创宇区块链安全实验室监测到 BSC 链上借贷协议 Fortress Protocol 因预言机问题被攻击,这是最近实验室检测到的第三起预言机攻击事件,损失包括 1,048 枚 ETH 和 400,000 枚 DAI ,共计约300W 美元,目前已使用 AnySwap 和 Celer 跨链到 以太坊 利用 Tornado 进行混币。
知道创宇区块链安全实验室第一时间跟踪本次事件并分析。
基础信息
被攻击Comtroller:0x01bfa5c99326464b8a1e1d411bb4783bb91ea629
被攻击预言机地址:0xc11b687cd6061a6516e23769e4657b6efa25d78e
攻击者地址:0xA6AF2872176320015f8ddB2ba013B38Cb35d22Ad
攻击合约:0xcD337b920678cF35143322Ab31ab8977C3463a45
tx:0x13d19809b19ac512da6d110764caee75e2157ea62cb70937c8d9471afcb061bf
漏洞分析
该项目是依旧是 Compound 的仿盘,但由于项目方在预言机实现注释了原本存在的检查导致不需要足够的 power 便可以通过0xc11b687cd6061a6516e23769e4657b6efa25d78e#submit篡改价格;
攻击者通过改变 FTS 在协议中的价格借走了其他池子中的 资产,市场中的借贷池如下:
攻击流程
1、攻击者购买了 FTS 代币并通过提案投票支持添加 FTS 作为抵押物,提案 ID为 11;
2、通过调用预言机 submit 函数改变 FTS 的价格;
3、攻击者使用 100 个 FTS 作为抵押物调用 enterMarket 进入市场;
4、由于市场价格对于 FTS 的价值计算出现问题,攻击者使用该抵押品直接调用 borrow 进行借款;
借取的资产:
5、由于 100 个 FTS 没什么价值不需要取回,而攻击者后续仍将其他用于第一步的 FTS 还在 Pancake 兑换进行了彻底的套现。
总结
本次攻击原因是 Compound 仿盘在预言机使用时出现了问题。近期大量Compound 仿盘项目被攻击,我们敦促所有 Fork 了 Compound 的项目方主动自查,目前已知的攻击主要归结于如下几个问题:
千里之堤毁于蚁穴。从内部调用可见,本次攻击者使用 getAllMarkets 依次遍历拿取了全部市场的底层资产并将 FTS 彻底套现。建议项目方对于自己有不一样的实现上一定要建立在充分的理解和足够的第三方安全审计上。一点小的误差将可能导致项目的全盘损失。