撰文: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的結果都是一致的。
慢霧:遠程命令執行漏洞CVE-2023-37582在互聯網上公開,已出現攻擊案例:金色財經報道,據慢霧消息,7.12日Apache RocketMQ發布嚴重安全提醒,披露遠程命令執行漏洞(CVE-2023-37582)目前PoC在互聯網上公開,已出現攻擊案例。Apache RocketMQ是一款開源的分布式消息和流處理平臺,提供高效、可靠、可擴展的低延遲消息和流數據處理能力,廣泛用于異步通信、應用解耦、系統集等場景。加密貨幣行業有大量平臺采用此產品用來處理消息服務,注意風險。漏洞描述:當RocketMQ的NameServer組件暴露在外網時,并且缺乏有效的身份認證機制時,攻擊者可以利用更新配置功能,以RocketMQ運行的系統用戶身份執行命令。[2023/7/14 10:54:22]
不一致的地方是在newBuffer的操作:
慢霧:Equalizer Finance被黑主要在于FlashLoanProvider合約與Vault合約不兼容:據慢霧區消息,6 月 7 日,Equalizer Finance 遭受閃電貸攻擊。慢霧安全團隊以簡訊形式將攻擊原理分享如下:
1. Equalizer Finance 存在 FlashLoanProvider 與 Vault 合約,FlashLoanProvider 合約提供閃電貸服務,用戶通過調用 flashLoan 函數即可通過 FlashLoanProvider 合約從 Vault 合約中借取資金,Vault 合約的資金來源于用戶提供的流動性。
2. 用戶可以通過 Vault 合約的 provideLiquidity/removeLiquidity 函數進行流動性提供/移除,流動性提供獲得的憑證與流動性移除獲得的資金都受 Vault 合約中的流動性余額與流動性憑證總供應量的比值影響。
3. 以 WBNB Vault 為例攻擊者首先從 PancekeSwap 閃電貸借出 WBNB
4. 通過 FlashLoanProvider 合約進行二次 WBNB 閃電貸操作,FlashLoanProvider 會先將 WBNB Vault 合約中 WBNB 流動性轉給攻擊者,隨后進行閃電貸回調。
5. 攻擊者在二次閃電貸回調中,向 WBNB Vault 提供流動性,由于此時 WBNB Vault 中的流動性已經借出一部分給攻擊者,因此流動性余額少于預期,則攻擊者所能獲取的流動性憑證將多于預期。
6. 攻擊者先歸還二次閃電貸,然后從 WBNB Vault 中移除流動性,此時由于 WBNB Vault 中的流動性已恢復正常,因此攻擊者使用添加流動性獲得憑證所取出的流動性數量將多于預期。
7. 攻擊者通過以上方式攻擊了在各個鏈上的 Vault 合約,耗盡了 Equalizer Finance 的流動性。
此次攻擊的主要原因在于 Equalizer Finance 協議的 FlashLoanProvider 合約與 Vault 合約不兼容。慢霧安全團隊建議協議在進行實際實現時應充分考慮各個模塊間的兼容性。[2022/6/8 4:09:22]
newBuffer(padToEven(hex.slice(2)),'hex');
慢霧:Multichain(AnySwap)被黑由于anySwapOutUnderlyingWithPermit函數相關問題:據Multichain(AnySwap)早前消息,2022年01月18日,一個影響6個跨鏈Token的關鍵漏洞正在被利用。慢霧安全團隊進行分析后表示,此次主要是由于anySwapOutUnderlyingWithPermit函數為檢查用戶傳入的Token的合法性,且未考慮并非所有underlying代幣都有實現permit函數,導致用戶資產被未授權轉出。慢霧安全團隊建議:應對用戶傳入的參數是否符合預期進行檢查,且在與其他合約進行對接時應考慮好兼容性問題。[2022/1/19 8:57:49]
處理方式分析:瀏覽器js
通過webpack打包好js文件并對文件進行引用,然后在瀏覽器上進行調試分析。
慢霧:Crosswise遭受攻擊因setTrustedForwarder函數未做權限限制:據慢霧區情報,2022年1月18日,bsc鏈上Crosswise項目遭受攻擊。慢霧安全團隊進行分析后表示,此次攻擊是由于setTrustedForwarder函數未做權限限制,且在獲取調用者地址的函數_msg.sender()中,寫了一個特殊的判斷,導致后續owner權限被轉移以及后續對池子的攻擊利用。[2022/1/19 8:57:48]
首先輸入的示例字符33974229950.550003會進入到intToBuffer的函數中進行處理。
同步分析intToBuffer的處理過程,這部分和」關鍵代碼分析「部分的代碼邏輯是一樣的,處理轉換部分得到的結果是7e9059bbe.8ccd。
聲音 | 慢霧科技余弦:區塊鏈行業很多小公司 喜歡辦公去中心化:安全公司慢霧科技聯合創始人余弦在微博上稱,區塊鏈行業真是很多小公司,甚至只有一個人的,喜歡辦公去中心化。很多優秀知名的項目,人也很少,像我們這樣的都算比較多人的了...從我個人角度,我喜歡這種小而美的公司,利潤還不錯,做大還是做強,人數多少永遠不是重點,創造好價值,賺到錢,如果不小心還能影響點世界的話,何其幸運。[2019/10/10]
接下來分析如何將轉換后的字符填充進入的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
這里發現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:BUFFFERUFFULTREDBUFFREFER價格Buff DogeAVASTR Vault (NFTX)
AnySwap關于ETH和FTM的NFT跨鏈橋Alpha測試網現已上線。隨著NFT浪潮的不斷高漲,NFT跨鏈橋解決方案不可避免地成為一種剛性需求.
1900/1/1 0:00:00來源:Medium 作者:iamthetorn 翻譯:思嘉 如果沒有修改智能合約中使用隨機性的方式,不要將Loot的代碼用于新項目。Loot的智能合約有一個設計限制,影響著初始代幣分配的公平性.
1900/1/1 0:00:00作者:秦曉峰 這兩天大熱的項目,除了文本類NFT「FirstFirstNFTs」,還有菠菜猴「MonkeyBetDAO」.
1900/1/1 0:00:00提要: 24日,央行和發改委分別聯合多部門下發文件,有業內人士指出,這兩份文件從頂層設計上將監管措施系統化,且預計監管層還將進一步完善虛擬貨幣監管的法律體系,明確各類行為應承擔的法律責任.
1900/1/1 0:00:00巴比特訊,去中心化社交媒體NFT平臺Enevti和創建DAO的平臺Kalipo成為LiskGrantProgram第1波入選項目,將分別獲得6萬瑞士法郎贈款.
1900/1/1 0:00:00來源:財聯社|區塊鏈日報 作者:李紅暉 9月27日,由中國信息通信研究院、中關村區塊鏈產業聯盟、中關村安信網絡身份認證產業聯盟主辦的ICT中國·2021高層論壇之區塊鏈應用發展論壇在京召開.
1900/1/1 0:00:00