通過以太坊漏洞賞金計劃,我們收到了關于新的實驗性ABI編碼器(名為ABIEncoderV2)中的一個缺陷報告。經研究,我們發現該組件存在一些相同類型的不同變化。本公告的第一部分詳細解釋了這個錯誤。新的ABI編碼器仍然標記為實驗性的,但我們認為這值得強調,因為它已經在主網上使用。
此外,優化器中的兩個低影響bug在過去兩周內已經被確定,其中一個bug已經在Solidityv0.5.6修復。兩者都是在0.5.5版本中引入的。詳情請參閱本公告的第二部分。
在0.5.7版本中,本文中提到的所有bug與漏洞都已經被修復。
這里提到的所有bug都應該在涉及相關代碼路徑的測試中很容易看到,至少在使用0和非0值的所有組合運行時是這樣。
感謝Melonport團隊(TravisJacobs和JennaZenk)和MelonCouncil(NickMunoz-McDonald,MartinLundfall,MattdiFerrante和AdamKolar),他們通過以太坊漏洞賞金計劃報告了這些!
Solana社區成員提議創建可將Ed25519密鑰對轉換為Curve25519密鑰對的加密標準:4月10日消息,Solana社區成員Valentin發起一項提案,建議創建一個將Ed25519密鑰對轉換為為Diffie Hellman密鑰交換協議設計的Curve25519密鑰對的標準,這將支持非對稱加密,而不必生成單獨的密鑰來執行這種操作。
Valentin解釋稱,隨著Solana生態系統的發展,對于保護敏感數據(如帳戶狀態或IPFS和Arveawe等分布式文件系統上的文件),對Solana密鑰對加密標準的需求變得越來越重要。雖然Ed25519密鑰對對簽名消息有效,但它們不能用于非對稱加密,而非對稱加密對于用戶隱私和數據保護至關重要。再次,提出這個建議是為了就如何派生Solana密鑰對以兼容Diffie Hellman密鑰交換或其他類型的加密機制兼容達成一致。一旦就此主題達成一致,錢包就可以開始實施加密功能,作為錢包標準的一部分。
Valentin還提到,作為從常規Solana密鑰對派生Curve25519密鑰對來執行加密的替代方案,Jordan Sexton建議可以從任何錢包(包括硬件錢包)的簽名消息中派生密鑰對來派生加密密鑰。這種方法的一個問題可能是,一旦兩個dApp請求使用相同種子的簽名,密碼就可能被破解。需要某種在每次加密時都必須不同的一次性隨機數,這很難實現。[2023/4/10 13:54:02]
誰應該關注
數據:當前Solana生態總市值約為82.64億美元:金色財經報道,據CoinGecko最新數據顯示,當前Solana生態總市值約為82.64億美元(截至發稿時為8,264,252,338美元,24小時增漲1.8%),24小時交易額約為4.9億美元(截至發稿時為490,375,453美元)。[2023/1/2 22:20:44]
如果您已經部署了使用實驗性ABIencoderV2的合約,那么這些合約可能會受到影響。換言之,只有在源代碼中使用以下指令的合約才會受到影響:
pragmaexperimentalABIEncoderV2;
此外,還有許多需要觸發的bug。有關更多信息,請參閱下面的技術詳細信息。
據我們所知,主網上有大約2500個合同使用實驗ABIEncoderV2。尚不清楚其中有多少存在該bug。
如何檢查合約是否受影響
Solana借貸協議Solend因網絡擁堵出現壞賬風險:11月9日消息,借貸協議Solend因Solana網絡擁堵而清算緩慢,導致大量頭寸未得到及時清算。在SOL貸款池中,用戶欠協議2970萬美元USDC,而SOL抵押品僅為3260萬美元。LTV高達91.1%,已超過85%的清算門檻。該協議必須出售近200萬美元的SOL抵押品才能使貸款回到清算門檻之下。(theblock)[2022/11/9 7:23:29]
只有當滿足以下所有條件時,該bug才會出現:
涉及到數組或結構的存儲數據直接發送到外部函數調用,發送到abi.encode或發送到eventdata,而無需事先分配給本地變量AND
數組包含大小小于32字節的元素,或者一個結構具有共享存儲槽的元素或類型bytesNN小于32字節的成員。
除此之外,在以下情況下,您的代碼不受影響:
數據:當前Solana生態總市值為418億美元:金色財經報道,據CoinGecko最新數據顯示,當前Solana生態總市值為418億美元(本文撰寫時為41,761,688,652美元),24小時交易額為3,421,864,842美元。目前按市值排名前三的通證分別是:Solana(26,015,967,539美元)、Chainlink(6,161,129,323美元)和Waves(2,608,711,463美元)。[2022/3/12 13:52:14]
如果所有結構或數組僅使用uint256或int256類型
如果您只使用整數類型并且一次只編碼一個數組
如果您只返回此類數據但不使用abi.encode,在外部調用或事件數據中。
如果您的合約符合這些條件,并且想要驗證合約是否確實存在漏洞,您可以通過與我們聯系。
如何防止
Chorus One公布為Lido構建的SOL流動性質押協議進展:即將啟動主網:為Lido構建Solana代幣SOL質押服務的PoS節點專業服務商Chorus One公布路線圖,該由Lido DAO治理的流動性質押協議名為“Lido for Solana”,允許通過Lido質押SOL來獲得流動性質押代幣stSOL,以將流動性質押引入Solana和將stSOL集成到Solana DeFi生態系統及其他領域。[2021/8/7 1:40:56]
為了保守起見,實驗性ABI編碼器只有在明確啟用時才可用,允許人們與它進行交互并測試它,而不會在它被認為穩定之前對它過分信任。
我們盡最大努力確保高質量,并且最近開始研究OSS-Fuzz上某些部分的“語義”模糊測試。
對于開發人員-使用漏洞檢測器等工具很難檢測Solidity編譯器中的,因為對源代碼或抽象語法樹表示進行操作的工具不會檢測僅引入編譯字節碼的缺陷。
防止這些缺陷的最佳方法是為您的合約進行一系列嚴格的端到端測試,因為編譯器中的錯誤很可能不是“靜默”而是表現為無效數據。
危害
當然,根據程序控制流程,任何bug都會產生各種各樣的后果,但我們預計這更容易導致故障而不是可利用性。
當bug被觸發時,在某些情況下會將方法調用上的錯誤參數發送到其他合約。
時間線
2019年3月16日:
通過漏洞賞金計劃進行報告,關于直接從存儲到ABI編碼器的布爾數組中讀取時所導致的損壞。
2019年03月16日至2019年03月21日:
調查根本原因,分析受影響的合約。在主網上部署了大量使用實驗性編碼器編譯的合約,其中許多合約沒有經過一致性校驗的源代碼。
對bug的調查發現了更多觸發bug的方法,例如使用結構。此外,在同一程序中還發現了一個數組溢出錯誤。
檢查了在Github上發現的一些合約,沒有發現任何合約受到影響。
對ABI編碼器進行了錯誤修正。
2019年03月20日:
決定公開信息。
推理:檢測所有易受攻擊的合同并及時與所有作者聯系是不可行的,最好防止主網上的不安全合約進一步擴散。
2019年3月26日:
新的編譯器版本,版本0.5.7。
這篇文章發布了。
技術細節
背景
合約ABI是一種規范如何與來自外部的合約或合約之間的交互來交換數據的規范。它支持各種類型的數據,包括數字,字節和字符串等簡單值,以及更復雜的數據類型,包括數組和結構。
當合同收到輸入數據時,它必須解碼,并且在返回數據或將數據發送到另一個合同之前,它必須對其進行編碼。Solidity編譯器為合約中的每個已定義函數生成這兩段代碼。在Solidity編譯器中,生成編碼器和解碼器的子系統稱為“ABI編碼器”。
2017年中旬,Solidity團隊開始研究名為“ABI編碼器V2”的全新實現,目標是提供更靈活,安全,高性能和可審計的代碼生成器。這個實驗性代碼生成器在明確啟用后,自2017年底開始向用戶提供0.4.19版本。
缺陷
實驗性ABI編碼器不能正確處理短于32個字節的非整數值。這適用于bytesNN類型,bool,enum和其它類型的,當它們是數組或結構的一部分并直接從存儲中編碼時。這意味著這些存儲引用必須直接在內部使用abi.encode(...),作為外部函數調用或事件數據中的參數,而無需事先分配給局部變量。使用return不會觸發錯誤。類型bytesNN和bool將導致數據損壞,但enum可能導致無效revert。
此外,即使基礎類型是整數類型,也可能無法正確處理元素短于32字節的數組。如果編碼的元素數量不是適合單個存儲槽的元素數量的倍數,那么按照上面描述的方式編碼這樣的數組會導致編碼中的其他數據被覆蓋。如果編碼中的數組后面沒有任何內容,或者如果只編碼單個數組,則不會覆蓋其他數據。
兩個無關的bug
與上面解釋的ABI編碼器問題無關,在優化器中發現了兩個錯誤。兩者都引入了0.5.5。除非使用內聯匯編,否則它們不太可能出現在編譯器生成的代碼中。
通過最近為OSS-Fuzz添加Solidity來識別這兩個錯誤-這是一個用于查找各種項目中的差異或問題的安全工具包。對于Solidity,我們已經包含了多個不同的模糊測試器,用于測試編譯器的不同方面。
優化器將操作碼序列轉換((x<<a)<<b))轉換為(x<<(ab))時不會正確處理加法中的溢出。
如果將常量31用作第二個參數,則優化器會錯誤地處理byte操作碼。在對bytesNN編譯時常量值為31的類型執行索引訪問或在內聯匯編中使用字節操作碼時,可能會發生這種情況。
這篇文章由@axic,@chriseth,@holiman聯合撰寫
親愛的Coinw用戶:Coinw官方指定錢包HyperPay現已開啟VSYSPoS礦池,年化25%.
1900/1/1 0:00:00一周行情回顧 本周加密貨幣受消息影響走勢振蕩。最高值出現在周二,總市值1852.17億美元,成交量512.94億美元;最低值出現在周五,總市值1674.99億美元,成交量499.17億美元.
1900/1/1 0:00:00活動時間:2019年4月24日10:00—4月30日24:00活動規則:使用火幣專屬邀請碼123456創建NewID在NewMall購物即可獲得挖礦收益,還將額外享受贈送雙倍NEW特權.
1900/1/1 0:00:00關于KBC 邁阿密的KaratCoinBank及其所有者HaraldSeiz于2018年推出了KaratGoldCoin,這是一種基于ERC20區塊鏈技術的全新加密貨幣.
1900/1/1 0:00:00DragonEx上線ATOM/USDT交易對并開通杠桿交易對 2019-04-28 親愛的用戶: DragonEx將于USDT區上線ATOM/USDT交易對并開通杠桿交易對.
1900/1/1 0:00:00作者:YogitaKhatri翻譯:Penny毛里求斯金融服務委員會澄清了適用于啟動證券型代幣項目的規則.
1900/1/1 0:00:00