年初我们在分析Compound代码的时候,就发现两个可能影响它资金安全的漏洞。
2022年3月15日,Hundred Finance遭受攻击,黑客获利2363 ETH,总价值超过4000万人名币。
Hundred Finance项目的代码就源自Compound。
我们今天来简单分析下Compound的漏洞,以及为何去中心化借贷项目不能无脑复制Compound模式。
漏洞一
这个漏洞的主要原因是Compound采用的这种资金池净值的算法可以被攻击,攻击者可以在资金池份额很小时,恶意转入一定量资金导致净值达到一个极大的值,从而让后面存入资金时,份额=资金/份额,整除后结果为0,也就是说用户存入资金确得不到份额!然后攻击者就可以取回份额,盗走用户的资金。
这个漏洞的利用条件比较苛刻,基本上只有在创建资金池的时候才有攻击的可能,但是,对于合约这种极其关键的东西,应该严谨对待,不能因为难以利用就置之不理,特别是这个漏洞要堵上是非常简单的。
Compound,表示这个漏洞他们已经知道了,并说这个漏洞很难被利用,可以通过运营手段规避。想想确实是这样,这个漏洞虽然可能被利用,但是难以被利用。
漏洞二
这个漏洞则似曾相识,基本逻辑还是回调、重入,但是漏洞确比第一个更加严重,而且也容易被利用一些,只要有带钩子的代币,就可以攻击!
Compound回复依然是,这个漏洞他们已经发现了!
漏洞终于被利用
于是就发生了2022年3月份的这起黑客攻击事件,而利用的漏洞和上文中的第二个思路相同。事实上,黑客可以更狠一些,攻击的时候同时调用exitMarket()退出借贷市场,从而攻击者赎回、借款时,欠款会被全部忽略!
其实,堵上这个漏洞只需要调换一下两句代码的顺序就可以了。
扇贝提醒
作为一家多年钻研区块链技术开发的公司,扇贝科技提醒众多企业和创业者们,必须要严谨对待自己的项目和代码。
代码是别人的,但是复制过来后,漏洞却是需要自己承受的,因为出了问题后,Compound和审计公司都没有义务为你负责。
做项目,行大事,需要把握细节的地方,一定不能疏忽!有问题欢迎随时资讯我们。