大意失荆州-- Uranium Finance合约升级漏洞事件分析

北京时间2021年4月28日,币安智能链上区块链项目 Uranium Finance发推提醒用户称:Uranium在流动性迁移过程中被攻击,涉及资金为 5000万美元。提醒用户停止交易,目前团队正在与币安安全团队联系。

随后公开了攻击合约地址:0x2b528a28451e9853F51616f3B0f6D82Af8bEA6Ae

通付盾区块链安全团队(SharkTeam)第一时间对此事件进行了攻击分析和技术分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。

一、事件分析

通过分析,Uranium项目合约中的漏洞出现在 UraniumPair.sol合约中的 swap函数中,这个漏洞会导致任何人可以随意的转出合约中的数字资产,而只需要付出一点点的代价。

合约地址在推文中没有公开,我们是从攻击合约中找到的项目合约地址,具体流程如下:

首先查看攻击合约的代码发现,这个合约的源码没有公开,通过反编译查看其源码。

通过币安智能链浏览器查看最早的攻击交易:

0x5a504fe72ef7fc76dfeb4d979e533af4e23fe37e90b5516186d5787893c37991

可得到攻击者调用的合约方法为52f18fc3。这是合约方法编码后的值,从反编译代码中寻找这个编码后的合约方法,可以找到这个合约攻击的项目方合约地址,也就是 Uranium项目所在的地址:0xa943ea143cd7e79806d670f4a7cf08f8922a454f。

首先看一下出问题UraniumPair.sol合约中swap的代码:

可以看到 swap中,最后是一个10的8次方数和一个10的6次方数的比较,这是一个几乎是恒等的判断,这就意味着只要按照一定的套路不断的执行 swap函数,就可以清空这个合约中所有的数字资产。深究原因,我们看到UniswapV2Pair.sol的合约中的写法是相同的,但是它是两个10的6次方数字的比较。

所以可以知道造成这次事件的原因应该是项目方更新升级这个合约的时候,忘记了将后面的1000的2次方改为10000的二次方。

二、通付盾区块链安全知识课堂

本次攻击事件中,主要原因在于项目方更新升级合约时,改写不够全面,遗漏了重要的修改点。通付盾区块链安全团队建议您,可以将1000这类在多处使用而且意义一致的常数,可以声明一个常量来使用,这样调整起来就不会有疏漏。调整后应该为:

这样未来若有升级的需求,直接调整 Num的值即可,就不会再出现遗漏修改,导致安全事故。同时,在项目上线之前请专业的智能合约审计机构进行严格的审计,保障智能合约和数字资产安全。

三、通付盾智能合约审计服务

区块链智能合约安全关系用户的财产安全,至关重要!在区块链项目开发和运营的各个阶段适时引入合适的安全工具和服务,为用户的数字资产和项目安全发展提供保障已成为行业共识。通付盾作为国内领先的区块链安全服务提供商,为开发者提供智能合约审计服务。

智能合约自动化审计在通付盾云平台上为用户提供智能合约进行自动化审计服务。运用符号执行、形式化验证等智能合约分析技术,覆盖高级语言、虚拟机、区块链、业务逻辑四个层面一百多项安全风险检测项,保障智能合约安全运行。

通付盾也为客户提供高级别的区块链安全服务,区块链安全专家团队7*24小时为智能合约提供全生命周期的安全保障,服务包括:VIP安全审计服务、VIP合规审计服务、安全事故应急响应等。