撰文: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的結果都是一致的。
慢霧:6月24日至28日Web3生態因安全問題損失近1.5億美元:7月3日消息,慢霧發推稱,自6月24日至6月28日,Web3生態因安全問題遭遇攻擊損失149,658,500美元,包括Shido、Ichioka Ventures、Blockchain for dog nose wrinkles、Chibi Finance、Biswap、Themis等。[2023/7/3 22:14:33]
不一致的地方是在newBuffer的操作:
newBuffer(padToEven(hex.slice(2)),'hex');
處理方式分析:瀏覽器js
通過webpack打包好js文件并對文件進行引用,然后在瀏覽器上進行調試分析。
首先輸入的示例字符33974229950.550003會進入到intToBuffer的函數中進行處理。
慢霧:過去一周Web3生態系統因安全事件損失近160萬美元:6月26日消息,慢霧發推稱,過去一周Web3生態系統因安全事件損失近160萬美元,包括MidasCapital、Ara、VPANDADAO、Shido、Slingshot、IPO、Astaria。[2023/6/26 22:00:21]
同步分析intToBuffer的處理過程,這部分和」關鍵代碼分析「部分的代碼邏輯是一樣的,處理轉換部分得到的結果是7e9059bbe.8ccd。
慢霧安全:Quiuixotic 出現嚴重漏洞,請相關用戶盡快取消授權:據慢霧安全團隊情報,2022年7月1日,Optimism生態最大NFT平臺Quiuixotic出現嚴重漏洞,大量用戶資產被盜,請在該市場上進行過交易的用戶盡快取消授權。
在市場合約的fillSell Order函數中僅對賣單進行了檢查,并未對buyer的買單做檢查。故攻擊者首先創建了任意的NFT合約,調用fillSellOrder函數生成賣單,將buyer參數傳為受害者地址、payment ERC20參數傳為需要盜取的代幣地址,即可將對該市場合約有授權的用戶的代幣轉走獲利。[2022/7/1 1:44:30]
接下來分析如何將轉換后的字符填充進入的buffer中,通過這步可以得到buffer的內容是126,144,89,187,14,140,205對應的是7e,90,59,bb,e,8c,cd。
聲音 | 慢霧:使用中心化數字貨幣交易所及錢包的用戶注意撞庫攻擊:據慢霧消息,近日,注意到撞庫攻擊導致用戶數字貨幣被盜的情況,具體原因在于用戶重復使用了已泄露的密碼或密碼通過撞庫攻擊的“密碼生成基本算法”可以被輕易猜測,同時用戶在這些中心化服務里并未開啟雙因素認證。分析認為,被盜用戶之所以沒開啟雙因素認證是以為設置了獨立的資金密碼就很安全,但實際上依賴密碼的認證體系本身就不是個足夠靠譜的安全體系,且各大中心化數字貨幣交易所及錢包在用戶賬號風控體系的策略不一定都一致,這種不一致可能導致用戶由于“慣性思維”而出現安全問題。[2019/3/10]
>0x7e->126>0x90->144>0x59->89>0xbb->187>0xe->14>0x8c->140>0xcd->205
現場 | 慢霧海賊王:保障安全需找專業安全團隊做專業審計:金色財經現場報道,在今日萬向區塊鏈實驗室舉辦的2018區塊鏈·新經濟第四屆區塊鏈全球峰會上,慢霧安全負責人海賊王稱,一筆合法交易的USDT,至少需要滿足以下兩個條件:(1)要通過比特幣的交易來構造,要符合比特幣的余額驗證及交易規則驗證;(2)要通過USDT自己的余額驗證。他總結說,要保障安全,需找專業的安全團隊做專業的審計。[2018/9/10]
這里發現e.這部分的小數點消失了,于是開始解小數點消失之迷,追蹤到hexWrite這個函數,這個函數會將得到的數據2個一組進行切分。然后用了parseInt對切分后的數據進行解析。
然而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
Tags:FERBUFFUFFINTMake A Difference TokenBUFFSbuff幣是什么paint幣行情
巴比特訊,9月29日,Terra發推更新Columbus-5官方執行計劃。在區塊高度#4,724,000時,Columbus-4鏈將停止,Columbus-5主網遷移將開始,大致時間為北京時間2.
1900/1/1 0:00:00有了LootNFT,不妨試試這些衍生項目! 原文鏈接:https://twitter.com/shmula/status/1434747560770428930原文作者:PeterAbilla譯.
1900/1/1 0:00:00巴比特訊,9月15日,Loot項目創始人DomHofmann發推表示已在Fantom上部署合成Loot,隨后.
1900/1/1 0:00:00據sharecast9月15日報道,加密投資者財富管理平臺Abra今天宣布已完成5500萬美元C輪融資,該輪融資由IGNIA和BlockchainCapital領投.
1900/1/1 0:00:00鏈集市?·讓區塊鏈落地更簡單 《區塊鏈行業觀察》專欄·第52?篇作者丨BrianIrwin,OlusegunLadipo 圖片丨來源于網絡 區塊鏈技術被應用于許多行業和應用.
1900/1/1 0:00:00本周,NFT相關的資產吸引了大量的資金,雖然似乎并不是什么特別新鮮的東西,但有一些值得注意的購買行為.
1900/1/1 0:00:00