撰文:Thinking@慢雾安全团队
事件背景
分析源自一笔转账金额10wUSDT,手续费却高达7,676枚ETH的天价手续费交易。https://etherscan
将int转成Hexhttps://github
判断是否可以被2整除,如果不行需要在字符开头添加一个0,这里主要是为了能够成功的将数据2个1组写入到buffer。https://github
if(a
returna;}
以出错的示例数据:33974229950.550003进行分析,经过intToBuffer函数中的intToHex和padToEven处理后得到7e9059bbe.8ccd,这部分浏览器js和nodejs的结果都是一致的。
慢雾:针对macOS系统恶意软件RustBucket窃取系统信息:金色财经报道,SlowMist发布安全警报,针对macOS 运行系统的 Rust 和 Objective-C 编写的恶意软件RustBucket,感染链由一个 macOS 安装程序组成,该安装程序安装了一个带后门但功能正常的 PDF 阅读器。然后伪造的 PDF 阅读器需要打开一个特定的 PDF 文件,该文件作为触发恶意活动的密钥。[2023/5/23 15:20:27]
不一致的地方是在newBuffer的操作:
newBuffer(padToEven(hex.slice(2)),'hex');
处理方式分析:浏览器js
通过webpack打包好js文件并对文件进行引用,然后在浏览器上进行调试分析。
慢雾:Quixotic黑客盗取约22万枚OP,跨链至BNB Chain后转入Tornado Cash:7月1日消息,据慢雾分析,Quixotic黑客盗取了大约22万枚OP(约11.9万美元),然后将其兑换成USDC并跨链到BNB Chain,之后将其兑换成BNB并转入Tornado Cash。[2022/7/1 1:44:55]
首先输入的示例字符33974229950.550003会进入到intToBuffer的函数中进行处理。
同步分析intToBuffer的处理过程,这部分和」关键代码分析「部分的代码逻辑是一样的,处理转换部分得到的结果是7e9059bbe.8ccd。
慢雾:nanotron安全审计报告是伪造的:慢雾科技发推表示:团队并没有对于nanotron进行审计,项目的安全审计报告是伪造的,请注意防范风险。[2020/10/8]
接下来分析如何将转换后的字符填充进入的buffer中,通过这步可以得到buffer的内容是126,144,89,187,14,140,205对应的是7e,90,59,bb,e,8c,cd。
>0x7e->126>0x90->144>0x59->89>0xbb->187>0xe->14>0x8c->140>0xcd->205
BitZ平台在慢雾科技的安全审计中评级为优:据官方消息,区块链安全公司-慢雾科技通过十大维度对BitZ平台进行安全审计,BitZ平台凭借优异的表现在本次安全审计中评级为:优。本次安全审计核心目标是为BitZ平台检测潜在的威胁点,协助 BitZ平台提升安全维度。协力BitZ团队一起为客户的资金安全做出有效的推进,更好的保护广大BitZ用户的安全。
BitZ平台创立于2016年,是联合区块链资深从业者和专业量化团队交易团队创立的一家专注于区块链数字资产交易和交流的平台。BitZ采用全球顶尖的安全技术,持续不断的为用户提供安全、快速、智能的区块链资产流通服务。[2020/8/6]
这里发现e.这部分的小数点消失了,于是开始解小数点消失之迷,追踪到hexWrite这个函数,这个函数会将得到的数据2个一组进行切分。然后用了parseInt对切分后的数据进行解析。
现场 | 慢雾科技郭阳:面对DApp安全问题开发人员需提升开发能力:金色财经现场报道,今日,2018可信区块链峰会在北京召开。在主题为“区块链安全焦点关注”的区块链安全论坛上,厦门慢雾科技有限公司慢雾安全负责人郭阳指出了以太坊溢出、权限控制、条件竞争、假充值和EOS恶意占用 RAM、假币等DApp 安全问题,他表示,开发人员要提升自己的开发能力以及专业技能,同时在合约开发完成后找职业的安全团队审计,也可以参考业界的经验分析总结。[2018/10/10]
然而parseInt('e.',16)->14===parseInt('e',16)->14消失的小数点被parseInt吃掉了,导致最终写入到buffer中的数据发生了错误,写入buffer的值是7e9059bbe8ccd。
处理方式分析:nodejs
由于浏览器上出问题的是7_**__**_e9059bbe.8ccd在写入buffer的时候小数点被parseInt吃掉了导致数据出错,但是经过分析,node的数据也是错误的,且产生错误的原因是和浏览器的不一样。
首先我们先看下如下的示例:
node三组不同的数据填充到buffer得到的结果居然是一样的,经过分析node的buffer有个小特性,就是2个一组切分后的数据,如果没法正常通过hex解析的,就会把那一组数据以及之后的数据都不处理了,直接返回前面可以被正常处理的那部分数据。可以理解为被截断了。这部分可以参考node底层的buffer中node_buffer.cc中的代码逻辑。
>newBuffer('7e9059bbe','hex')>newBuffer('7e9059bbe.8ccd','hex')>newBuffer('7e9059bb','hex')
执行结果的比较
node由于会将原始数据7e9059bbe.8ccd中的e.及之后的数据进行截断,所以最终错误的值是7e9059bb,相比正确的值07e9059bbe小。
node的执行结果:
浏览器由于会将原始数据7e9059bbe.8ccd中的.吃掉,所以最终错误的值是7e9059bbe8ccd,相比正确的值07e9059bbe大很多。
浏览器的执行结果:
问题的原因
ethjs-util的intToBuffer函数不支持浮点型的数据,且在这个函数中没有判断传入的变量类型,来确保变量类型是预期内的。由于ethereumjs的toBuffer引用了ethjs-util的intToBuffer进行处理,也没有对数据进行检查。导致了这次事件的发生,所幸最终善良的矿工归还了「天价手续费7626ETH」。
吸取的教训
从第三方的库的角度来看,在编码过程中应该要遵循可靠的安全的编码规范,在函数的开头要对传入的数据进行合法性的检查,确保数据和代码逻辑是按照预期内执行。
从库的使用者的角度来看,使用者应该要自行阅读第三方库的开发文档和对接文档,并且也要对代码中接入第三方库的逻辑进行测试,通过构造大量的数据进行测试,确保业务上能够正常按照期望执行,保证高标准的测试用例的覆盖率。
参考资料:https://github.com/ethereumjs/ethereumjs-monorepo/issues/1497https://blog.deversifi.com/23-7-million-dollar-ethereum-transaction-fee-post-mortem/https://www.chainnews.com/news/611706276133.htm
标签:FERUFFBUFFINTREEFER价格ruff币区块链最新消息BUFFDOGEExperience Points
巴比特讯,据天眼查App显示,腾讯科技有限公司日前申请“一种贷款资质确定方法、装置、设备及存储介质”发明专利,涉及区块链技术领域,申请号为CN202010238015.7.
据CoinDesk9月30日消息,a16z的普通合伙人KatieHaun在CNBC的投资者峰会上表示,加密货币行业并不反对监管,但确实需要监管机构的明确规定,监管机构需要评估一个事实.
巴比特讯,由二层扩容平台CelerNetwork推出的跨链支付网络cBridge计划推出cBridge2.0.
摘要 产业动态: 全球大学区块链能力排名:新加坡国立大学第一,清华第八韩国记者协会与与PUBLISH合作,采用区块链技术改善新闻媒体生态系统Ripple与卡塔尔国家银行达成合作.
9月15日,“第十二届中国西部国际资本论坛暨全球经济发展论坛?中东欧峰会--数字经济发展峰会”在成都世外桃源酒店顺利举办.
巴比特讯,10月15日,点存科技CEODavidLee在电报群AMA中分享称,虽然目前相关政策并没有完全对Filecoin行业进行明令禁止,但一叶知秋,相关企业需要领悟政策实施的背景,未雨绸缪.