BTCV繁华资讯 > 货币新闻 > certik:SODA项目智能合同安全漏洞分析_btcv-繁华资讯

certik:SODA项目智能合同安全漏洞分析_btcv-繁华资讯

作者:_btcv-繁华资讯来源:_btcv-繁华资讯 货币新闻 2020年09月23日

摘要:判断一个人属于什么资产阶级,只需要看他的负债率。简而言之,你借的钱越多,你就越富有。所以,借钱,从某个角度来说,是富人的游戏。通过借贷的方式合理配置资产,以实现收益,也是财务管理的本质。相信大家都好奇过。银行会拿走我们存的钱。

CertiK:Soda项目智能合约安全漏洞分析

判断一个人属于什么资产阶级,只需要看他的负债率。简而言之,你借的钱越多,你就越富有。

所以,借钱,从某个角度来说,是富人的游戏。通过借贷的方式合理配置资产,以实现收益,也是财务管理的本质。

相信大家一直很好奇,银行拿我们存的钱做了什么?

从这个角度来说,银行是最大的债务人。那么,如果有人突然突破银行系统,迫使银行“还款”,然后本该归还储户账户的钱被攻击者直接收回,那么储户和银行都将成为最大的受害者。

CertiK:Soda项目智能合约安全漏洞分析

北京时间9月21日,CertiK安全研究小组发现,苏打区块链项目存在智能合同安全漏洞,允许任何外部来电者通过调用智能合同功能强行结算受害用户的债务,忽略受害用户债务中的代币数量,将结算操作的收益转移到自己的支付地址。

soda项目官员已经提交了一个修复补丁来修复这个安全漏洞,但是由于soda项目使用TimeLock将所有操作延迟了48小时,修复补丁将在延迟事件后生效,因此截至发布时间该漏洞已经修复。

漏洞技术分析

CertiK:Soda项目智能合约安全漏洞分析

图1(参见链接1)

CertiK:Soda项目智能合约安全漏洞分析

CertiK:Soda项目智能合约安全漏洞分析

CertiK:Soda项目智能合约安全漏洞分析

soda项目中的WETHCalculator.sol智能契约存在逻辑实现错误导致的安全漏洞。在图1中的WETHCalculator.sol智能合同的第193行中,maximumLoad的计算公式错误地将金额用作基础值。

因此,第196行中满足require()判断的检测条件loanTotal=maximumLoan可转换为:

loanInfo[_loanId]。利息金额=loanInfo[_loanId]。金额*最大电视/LTV _基本

maximum TV/LTV _ BASE的值从0.15到0.95不等,利息=0。因此,图1的行196中的require()判断中的检测条件总是真的。

如果没有require()判断的保护,任何外部调用者都可以调用SodaBank.sol的第104行中的collectDebt()函数来清空任何loadId的贷款。在执行该功能的过程中,图1中的collectDebt()功能将在图2的第121行中执行,并且通过第123和125行,用户在soda中锁定的wet的一部分将被转移到地址msg。

CertiK:Soda项目智能合约安全漏洞分析

图2(参见链接2)

有了上面的漏洞,任何外部的调用者都可以通过调用SodaBank.sol中的collectDebt()并传入其他用户的loadId来清除soda中用户的令牌。

官方维修详情

为了修复上述漏洞,soda正式设计了一个新的智能合同WETHCalculatorFixed.sol来代替WETHCalculator.sol

从分析中可以看出,在图3中的WETHCalculatorFixed.sol智能合同第979行中,maximumLoan的计算公式正确计算为loaninfo [_ loanid]。锁定金额*最大LTV/LTV基数。因此,图3中的行982中的require()判断的检测条件被改变为:

loanInfo[_loanId]。利息金额=loanInfo[_loanId]。锁定数量*最大电视/LTV _基地

CertiK:Soda项目智能合约安全漏洞分析

图3(参见链接3)

这个方程的代码实现与soda项目中的逻辑设计是一致的,这个方程的真实性与用户的借款债务数和被锁定的本金数有关。该漏洞已被修复。

苏打项目中这个方程的逻辑设计细节可以从以下几个环节来理解:

https://medium.com/soda-finance/the-soda-revolution-9185 fdb 99 fc 1

事件分析摘要

该漏洞是由逻辑设计和代码实现之间的不一致引起的。目前常用的单元测试、自动化测试工具等测试方法并不能有效发现这种与逻辑相关的漏洞。

因此,CertiK安全团队有以下安全建议:

安全是区块链工程的基础。在任何区块链项目上线之前,有必要请专业的第三方安全审计团队对项目的整体代码进行安全审计。

目前的区块链检测工具无法检测到智能合同逻辑中的漏洞,其结果也没有可信的数学证明支持。形式验证是唯一能够产生可信数学证明的软件验证方法。在每个项目上线之前,使用基于正式验证方法的区块链检测工具来验证项目中的安全漏洞应该是必要的步骤。

参考链接:

图1:

https://github.com/soda-finance/soda-contracts/blob/master/contracts/calculator/WeSt calculator . sol # L189

图2:

https://github.com/soda-finance/soda-contracts/blob/master/contracts/components/SodaBaNK . sol # L104

图3:

https://github.com/soda-finance/soda-contracts/blob/master/contracts/calculatorfixed . sol # L275

标签: btcv交易