LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > 区块链代码审计 一行代码如何锁定上亿资产

区块链代码审计 一行代码如何锁定上亿资产

2020-09-08 s13071860853 来源:火星财经
区块链代码审计

据链闻消息,DeFi 项目 YFValue (YFV)发布公告称,团队于昨日在 YFV 质押池中发现一个漏洞,恶意参与者借此漏洞对质押中的 YFV 计时器单独重置。目前已有一个恶意参与者正试图借此勒索团队。慢雾安全团队对此进行了深入分析,以下是相关技术细节。

从声明中我们可以得知是 YFV 抵押池出现了问题,恶意的用户可重置 YFV 抵押者的计时器,对 YFV 的抵押者造成不便,但这并不会导致资金损失。

通过登陆 YFValue 的官方网站 ,(https://yfv.finance/staking),可以发现在 YFValue 的体系中,用户可通过质押相关的代币获取对应的奖励,目前 YFValue 支持的质押代币池可以看到,目前由于漏洞的原因,YFV 的抵押池已经在 UI 界面关闭了抵押功能,但是合约上目前还没关闭代币抵押的功能,我们需要跟踪代码来分析具体的细节点。

根据官网提供的 Github 地址,我们溯源到了相关的代码仓库(https://github.com/yfv-finance/audit),关于 YFV 抵押的相关逻辑在YFV_Stake.sol 合约中,合约中关于抵押的函数有 2 个,分别是 stake 函数和 stakeOnBehalf 函数,恶意的用户是怎么锁定其他用户的资产的呢?

回到用户抵押的逻辑,可以发现抵押逻辑中的 stakeOnBehalf 函数本意是帮助进行抵押,但是这里有个问题,如果这个用户先前已经有抵押了呢?那通过对已经抵押的用户再次进行抵押,比方说抵押 1 个 YFV,是不是就能以极低的成本重置已抵押的用户的计时器,导致用户在 withdraw 时无法成功调用。更进一步,假设 YFV 抵押用户已经成功调用了 stakeReward 函数,在快要达到 unfrozenStakeTime 所规定的时间时,恶意的用户可以通过 stakeOnBehalf 函数给这个用户抵押少量资产,即可再次对抵押奖励进行锁定,理论上这样往复循环,即可使用户无法取出自己的资产,但这个问题并不会导致资金损失。

前车之鉴

这是本月出现的第二个没有经过审计的 DeFi 项目所暴露出的风险,根据 YFValue 的官方声明(https://medium.com/@yfv.finance/yfv-bringing-true-value-to-yield-farming-bddc4edf889a),项目代码是由富有经验的开发者进行开发的,同时借鉴了其他成功的项目的代码,但是仍无可避免的出现了风险。术业有专攻,安全审计一方面需要项目方的正向思维,另一方面,还是需要专业的安全团队的逆向思维,从专业的黑客角度进行模拟对抗,发现问题。

修复方案

通过分析代码和漏洞细节,针对本次漏洞,修复方案也很简单,只要在抵押的时候检查用户的抵押状态是否为已经抵押,如果已经抵押,则不允许再次抵押。或者对每次的抵押进行单独的处理,不能对先前的抵押状态产生影响。

安全解决方案

1,交易所安全审计

2,钱包安全审计

3,链安全审计

4,智能合约安全审计

5,链盟安全解决方案

6,红队测试,安全检测,区块链威胁情报,漏洞赏金,防御部署,安全顾问等等有效的安全服务,一体化安全解决方案

本文来源:s13071860853
原文标题:区块链代码审计 一行代码如何锁定上亿资产

—-

编译者/作者:s13071860853

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...