सारांश: कुछ स्थितियों में, चर भंडारण में अन्य चर को अधिलेखित कर सकते हैं।
प्रभावित सॉलिडिटी कंपाइलर संस्करण: 0.1.6 से 0.4.3 (0.4.4 पूर्व-रिलीज़ संस्करणों सहित)
विस्तृत विवरण:
भंडारण चर जो 256 बिट्स से छोटे हैं, यदि वे फिट हो सकते हैं तो उसी 256 बिट स्लॉट में एक साथ पैक किए जाते हैं। यदि प्रकार द्वारा अनुमत मान से बड़ा मान पहले चर को सौंपा गया है, तो वह मान दूसरे चर को अधिलेखित कर देगा।
इसका मतलब यह है कि यदि कोई हमलावर पहले वेरिएबल के मान में अतिप्रवाह पैदा कर सकता है, तो दूसरे वेरिएबल को संशोधित किया जा सकता है। पहले चर में एक अतिप्रवाह बनाना अंकगणित का उपयोग करके या सीधे कॉल डेटा से एक मूल्य में पास करके संभव है (कॉल डेटा में मान 32 बाइट्स के साथ संरेखित हैं, और पैडिंग न तो सत्यापित है और न ही लागू है)।
अनुबंध जो केवल राज्य चर के लिए नीचे सूचीबद्ध प्रकारों का उपयोग करते हैं नहीं प्रभावित। ऐरे, मैपिंग और स्ट्रक्चर्स (उन निम्न प्रकारों पर आधारित) भी हैं नहीं प्रभावित:
- हस्ताक्षरित पूर्णांक, जिसमें 256 बिट से छोटे आकार शामिल हैं
- बाइट्सएनएन प्रकार, जिसमें 256 बिट्स से छोटे आकार शामिल हैं
- 256 बिट्स के अहस्ताक्षरित पूर्णांक (uint)।
256 बिट्स से छोटे प्रकार के अनुबंध जो कभी एक दूसरे के बगल में नहीं होते हैं (ध्यान दें कि आधार अनुबंधों के राज्य चर “खींचे जाते हैं”) हैं नहीं प्रभावित।
एथेरियम मल्टीसिग्नेचर वॉलेट कॉन्ट्रैक्ट है नहीं प्रभावित। ध्यान दें कि पतों में 160 बिट्स लगते हैं, इसलिए अनुबंध जो केवल पतों का उपयोग करते हैं और 256-बिट प्रकार सुरक्षित हैं। इसके अतिरिक्त, अभ्यास में अंकगणितीय संचालन के माध्यम से पते और बूलियन लगभग कभी भी हेरफेर नहीं किए जाते हैं, इसलिए केवल पते, बूलियन और 256 बिट प्रकार का उपयोग करने वाले अनुबंध भी सुरक्षित होने चाहिए।
निम्नलिखित अनुबंध प्रभावित हो सकते हैं: दो या अधिक सन्निहित राज्य चर वाले अनुबंध जहां उनके आकार का योग 256 बिट्स से कम है और पहला राज्य चर एक हस्ताक्षरित पूर्णांक नहीं है और बाइट्सएनएन प्रकार का नहीं है।
256 बिट से छोटे प्रकारों में शामिल हैं: bool, enums, uint8, …, uint248, int8, …, int248, पता, कोई अनुबंध प्रकार
अनुशंसित कार्रवाई:
- कम से कम सॉलिडिटी रिलीज़ 0.4.4 (प्री-रिलीज़ या नाइटली वर्जन नहीं) का उपयोग करके अभी तक रिकंपाइल कॉन्ट्रैक्ट्स को तैनात नहीं किया गया है।
- निष्क्रिय करें, से धन निकालें, या पहले से तैनात अनुबंधों को अपग्रेड करें।
यह भेद्यता किसके द्वारा पाई गई थी [github.com/catageek](https://github.com/catageek): [https://github.com/ethereum/solidity/issues/1306](https://github.com/ethereum/solidity/issues/1306)