9月27日,Bitfinex的一个主要钱包以7676
将int转成Hexhttps://github
判断是否可以被2整除,如果不行需要在字符开头添加一个0,这里主要是为了能够成功的将数据2个1组写入到buffer。https://github
if(a
returna;}
以出错的示例数据:33974229950.550003进行分析,经过intToBuffer函数中的intToHex和padToEven处理后得到7e9059bbe.8ccd,这部分浏览器js和nodejs的结果都是一致的。
不一致的地方是在newBuffer的操作:
newBuffer(padToEven(hex.slice(2)),'hex');
非托管流动性市场Hover宣布与Ledger Works达成合作:据官方消息,非托管流动性市场Hover宣布与Ledger Works达成合作,并即将在2023年夏季在Kava EVM上推出其协议。通过与Ledger Works合作,Hover将获得其平台上每个上市市场的24/7风险管理覆盖。目前包括KAVA、ATOM和本地USDT。Ledger Works将通过定量定义参数建议,如抵押系数、借贷限额等,支持其运营。[2023/7/17 10:59:28]
处理方式分析:浏览器js
通过webpack打包好js文件并对文件进行引用,然后在浏览器上进行调试分析。
首先输入的示例字符33974229950.550003会进入到intToBuffer的函数中进行处理。同步分析intToBuffer的处理过程,这部分和」关键代码分析「部分的代码逻辑是一样的,处理转换部分得到的结果是7e9059bbe.8ccd。接下来分析如何将转换后的字符填充进入的buffer中,通过这步可以得到buffer的内容是126,144,89,187,14,140,205对应的是7e,90,59,bb,e,8c,cd。
美国总统候选人Ron DeSantis:如果当选,将禁止央行数字货币:金色财经报道,美国总统候选人Ron DeSantis宣布,如果2024年当选,打算在上任第一天禁止美国央行数字货币(CBDC)。Ron DeSantis在最近接受采访时表达了这一观点。DeSantis指出了对美联储在经济混乱后可能发行数字货币的担忧。DeSantis批评美联储关于无需咨询立法和行政部门即可实施CBDC的建议,并强调此举需要通过一项法律。为了阻止CBDC的实施,DeSantis强调了佛罗里达州采取的行动,该州通过了一项法律,使该州对CBDC的认可无效。DeSantis还预测其他州也会效仿,从而阻碍美联储通过行政行动引入 CBDC 的能力。
DeSantis警告说,达沃斯世界经济论坛等组织倡导的CBDC旨在取代现金和加密货币,成为法定货币的唯一形式。此外,DeSantis还对CBDC权力可能被滥用的担忧,允许当局禁止某些购买并可能实施社会信用体系。[2023/7/15 10:57:02]
>0x7e->126>0x90->144>0x59->89>0xbb->187>0xe->14>0x8c->140>0xcd->205
Voyager债权人:反对任何针对法院批准Binance.US收购的上诉:3月10日消息,Voyager无担保债权人官方委员会在推特称,美国法院已确认批准Binance.US收购Voyager,还允许债务人可以在出售未完成或债务人与无担保债权人官方委员会协商后决定不继续出售的情况下切换到自我清算。
Voyager无担保债权人官方委员会表示,法院为Voyager客户提供了最佳途径,但未来可能会有一些反对者提出上诉,可能会大大延迟债权人的追偿,Voyager无担保债权人官方委员会将与债务人合作反对任何上诉。[2023/3/10 12:54:04]
这里发现e.这部分的小数点消失了,于是开始解小数点消失之迷,追踪到hexWrite这个函数,这个函数会将得到的数据2个一组进行切分。然后用了parseInt对切分后的数据进行解析。
周鸿祎谈 ChatGPT:搭不上这班车的企业很可能会被淘汰:2月9日消息,360 创始人周鸿祎在与搜狐创始人张朝阳对话时,首次谈到 ChatGPT。他直言,如果企业搭不上 ChatGPT 这班车,很可能会被淘汰。在谈及 360 布局 ChatGPT 进展,周鸿祎称,不能多说,只能说 360 不会放弃对该技术的跟踪。[2023/2/9 11:57:20]
然而parseInt('e.',16)->14===parseInt('e',16)->14消失的小数点被parseInt吃掉了,导致最终写入到buffer中的数据发生了错误,写入buffer的值是7e9059bbe8ccd。
处理方式分析:nodejs
由于浏览器上出问题的是7_**__**_e9059bbe.8ccd在写入buffer的时候小数点被parseInt吃掉了导致数据出错,但是经过分析,node的数据也是错误的,且产生错误的原因是和浏览器的不一样。
Alchemy推出2500万美元开发者赠款计划以支持Web3项目:6月17日消息,加密基础设施服务商Alchemy宣布推出一项2500万美元的赠款计划,以支持Web3开发者和初创公司。其中单个项目申请资助金额最高达5万美元,申请将于周一开放,资金将于7月中旬发放。Alchemy计划自行提供支持,以控制资金的分配。
Alchemy生态系统发展负责人Paul Almasi表示,Alchemy希望资助一些致力于提高NFT效用,以及使机构和国内交易员都能访问DeFi的项目。
此前2月8日消息,Alchemy以102亿美元估值完成2亿美元融资,Lightspeed和Silver Lake领投。(CoinDesk)[2022/6/17 4:35:20]
首先我们先看下如下的示例:
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/1497
https://blog.deversifi.com/23-7-million-dollar-ethereum-transaction-fee-post-mortem/
https://www.chainnews.com/news/611706276133.htm
来源链接:mp.weixin.qq.com
免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。
慢雾
慢雾
慢雾科技是一家专注区块链生态安全的国家高新技术企业,通过「威胁发现到威胁防御一体化因地制宜的安全解决方案」服务了全球许多头部或知名的项目。慢雾科技的安全解决方案包括:安全审计、威胁情报、漏洞赏金、防御部署、安全顾问等服务并配套有加密货币反、假充值漏洞扫描、漏洞监测、被黑档案库、智能合约防火墙、SafeStaking等SAAS型安全产品,已有商业客户上千家。慢雾慢雾科技慢雾AML慢雾安全Slowmist查看更多以太坊
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。