加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_宿迁站长网 (https://www.0527zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

LightCoin合约非一致性检查漏洞解析

发布时间:2022-06-28 10:34:11 所属栏目:安全 来源:互联网
导读:LIGHT (光链) 是世界上第一个双层区块链(父链与子链)。其中,LIGHT 父链与传统的公链类似,有且仅有一个,保证记录完整、透明、不可被篡改或销毁。LIGHT子链可以是多个且相互独立存在,基于PoM validation方式,结合In-Memory数据库缓存,有效提高缓存环
  LIGHT (光链) 是世界上第一个双层区块链(父链与子链)。其中,LIGHT 父链与传统的公链类似,有且仅有一个,保证记录完整、透明、不可被篡改或销毁。LIGHT子链可以是多个且相互独立存在,基于PoM validation方式,结合In-Memory数据库缓存,有效提高缓存环节吞吐量,QPS可达10万以上,实现性能大幅提高。LIGHT突破性地解决了当今数字货币在交易时处理速度严重滞后的问题,实现瞬时完成实时交易。
 
  代码55行在检查授权转账额度是没有问题的,但是在58行减掉已转出的授权额度时,错误的写成了allowed[_from][_to] -= _value。该行代码导致在授权转账完成后,限额依然不变,在下一次操作授权转账时,依然可以继续按照原本限额转出代币。该漏洞属于一个逻辑漏洞,由于校验的条件和操作的条件不一致,导致后续绕过校验。
 
  我们使用Remix调试代码,调试的时候我们修改24行为本地Javascript VM的钱包地址,点Deloy部署后,和合约为合约部署者分配2000000个Token。首先调用approve函数为Javascript VM的另外一个账户授权一点转账额度。调用参数如下。该调用为参数1地址授权10000额度的转账权限。
  
  调用完毕后,我们切换到授权过的这个账户(既第一个参数),调用transferFrom函数进行授权转账测试。调用参数如下,该调用正确情况下,应该由参数1账户转向参数2账户9999个Token。同时减除调用者授权额度9999。
 
  "0xca35b7d915458ef540ade6068dfe2f44e8fa733c","0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db",9999
 
  由于remix不支持查看二级字典的调试功能,为了调试方便我们在59行后加一行var test =allowed[_from][msg.sender]便于我们观察变量的更新情况。调试结果如下图。我们可以看到,转账成功了,但是allowed[_from][msg.sender]的值却并没有变,正确情况下该值应该等于10000-9999。
 
 

(编辑:云计算网_宿迁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!