区块链整数溢出漏洞
渗透测试 24297
2018年4月22日,黑客对BEC智能合约发起攻击,凭空取出
57,896,044,618,658,100,000,000,000,000,000,000,000,000,000,000,000,000,000,000.792003956564819968
个BEC代币并在市场上进行抛售,BEC随即急剧贬值,价值几乎为0,该市场瞬间土崩瓦解。
2018年4月25日,SMT项目方发现其交易存在异常,黑客利用其函数漏洞创造了
65,133,050,195,990,400,000,000,000,000,000,000,000,000,000,000,000,000,000,000 + 50,659,039,041,325,800,000,000,000,000,000,000,000,000,000,000,000,000,000,000
的SMT币,火币Pro随即暂停了所有币种的充值提取业务。
2018年12月27日,以太坊智能合约Fountain(FNT)出现整数溢出漏洞,黑客利用其函数漏洞创造了
2 + 115792089237316195423570985008687907853269984665640564039457584007913129639935
的SMT币
0x02 漏洞简介
在编程语言里面,因为算术运算导致的整数溢出漏洞屡见不鲜
- C语言的整数溢出机制
- CVE-2020-16040: Chromium V8引擎整数溢出漏洞分析
- http.sys整数溢出漏洞(MS15-034)验证方法
在solidity语言中,变量支持的类型从uint8-uint256,int8-int256。每一个整型变量只能存储固定大小数值范围内的数。uint表示无符号数。比如uint8只能储存0->2^8-1范围内的数字。当一个uint8类型的变量值为255时,在进行加一,就会发生进位,导致整体翻转为零。