2020年6月30日下午5:46,Beosin-OSINT威胁情报系统发现
VETH智能合约
遭受攻击,被盗919299个VETH。成都链安·安全实验室第一时间对本次事件进行跟踪分析。
?
根据链上交易显示:
攻击者利用自建合约
通过Uniswap将0.9ETH兑换为138VETH,之后对VETH智能合约
发起攻击,在攻击完成后自建合约进行自我销毁。
本次攻击成本仅0.9ETH,约合200美元。交易
详情如下:
△图1
在盗币成功之后,攻击者将盗取的VETH通过Uniswap换成了16ETH。如下图所示:
△图2
?具体攻击流程如下:
1.攻击者创建攻击合约,通过Uniswap将0.9ETH兑换成138VETH;
2.调用VETH合约changeExcluded函数,支付128VETH手续费,使mapAddress_Excluded的值为true;
3.调用transferFrom函数,因mapAddress_Excluded的值为true,可以直接进行转账;
4.攻击完成后,攻击者通过Uniswap将盗取的VETH兑换成16ETH。
漏洞原理分析
此漏洞产生的主要原因是changeExcluded函数修饰符为external,使得任何人都可以调用该函数来绕过transferFrom函数内部的授权转账额度检查,将合约的VETH代币盗走。
首先分析transferFrom函数,在函数内部先进行!mapAddress_Excluded的判断,按照正常逻辑,该结果为true后,将进行授权转账额度的检查。但是转账函数_transfer的调用放在if语句体外,这就导致攻击者可以通过将mapAddress_Excluded的值设置为true而绕过授权转账额度的检查,直接进行VETH代币转移。transferFrom函数源码如下图所示:
△图3
通过分析修改mapAddress_Excluded值的代码发现,在changeExcluded函数内实现了对其值的修改,且该函数修饰符为external,可供外部调用。changeExcluded函数源码如下图所示:
△图4
在未对该值进行设置时,mapAddress_Excluded的初始值为false,最后if判断结果为true,进入if语句体,调用_transfer进行转账,要求支付转账金额为:mapEra_Emission/16即128VETH,然后mapAddress_Excluded的值被设置为true。emission的值如下如所示:
△图5
总结
此次VETH被盗事件,漏洞出自VETH合约而非Uniswap,VETH合约代码的函数访问修饰符的错误使用导致任何人都能绕过授权转账额度的检查,以极低的成本发起攻击。
成都链安·安全实验室在此提醒:各大智能合约运营商,在合约正式部署上线前应做好充分的代码审计工作,即使是一些简单的代码错误也会财产损失。
7月5日,杭州区块链国际周分论坛顺利开幕。此次论坛由算力智库联合巴比特、海南省大数据管理局、上海人工智能发展联盟、长三角大数据产业合作联席会议、新财富等共同举办,论坛汇聚了国内外近几年来在隐私数.
7月5日上午9点,由杭州市余杭区政府指导,杭州未来科技城管委会、巴比特主办的“2020杭州区块链国际周”正式开幕.
本文来源:天府财经,作者:四川省金融科技学会,巴比特资讯经授权转载2020年伊始,我们见证了很多历史,全球疫情爆发,国内停工停产,西方股市接连熔断,似乎我们的生活像被乌云笼罩着.
7月5日,由杭州市余杭区政府指导,杭州未来科技城管委会、巴比特主办的“2020杭州区块链国际周”在杭州开幕。QKL123负责人王天奇做了题为《区块链数据之道与术》的分享.
7月5日,由杭州市余杭区政府指导,杭州未来科技城管委会、巴比特主办的“2020杭州区块链国际周”正式开幕.
Filecoin火起来了。“往年和今年的热度相比,真的不可同日而语。”星际视界Nancy在接受DeepChain采访时,正处在一场会议的间隙.