Blacksmith को import करना होगा जिसमें भेद्यता पाई गई थी। यदि आप प्रभावित protocol या vulnerable contract का सटीक नाम जानते हैं तो आप उसे सीधे search भी कर सकते हैं।



Blacksmith: pool does not exist के साथ विफल हो गया।
Pool memory pool = pools[_lpToken]; देखते हैं जहाँ data cache होता है, और बाद में line 125 पर अपडेट होता है जहाँ हम _claimCoverRewards(pool, miner); देखते हैं
Contract ने cache data का उपयोग किया क्योंकि data स्वयं memory में रहा; इसीलिए बाद में contract ने उस data का उपयोग करके function की गणना की। Cache को अपडेट नहीं किया गया जिसके परिणामस्वरूप यह hack हुआ:
example.sol
example.sol
example.sol
- Hack से कुछ घंटे पहले liquidity mining के लिए एक नया pool approved हुआ था। यह pool पूरी तरह से सामान्य है लेकिन चूँकि यह नया था, blacksmith contract के पास इस pool का कोई LP token नहीं था।
- हमलावर ने इस pool के कुछ tokens को Blacksmith contract में जमा कर दिया।
- Blacksmith contract प्रति-token के आधार पर rewards का ट्रैक रखता है। यदि बहुत सारे tokens locked हैं, तो प्रति-token reward छोटा होगा। यदि बहुत कम tokens locked हैं, तो प्रति-token reward बड़ा होगा। संबंधित variable को
accRewardsPerTokenकहा जाता है और इसकी गणनाtotalPoolRewards / totalTokenBalanceके रूप में की जाती है। - हमलावर ने फिर Blacksmith contract से लगभग सभी LP tokens निकाल लिए,
totalTokenBalanceराशि को लगभग शून्य कर दिया। - हमलावर ने फिर इस pool के कुछ tokens को Blacksmith contract में फिर से जमा किया। यहीं पर bug ने अपने असली रंग दिखाए। चूँकि पिछले transaction में
totalTokenBalanceबहुत कम हो गया था, इसलिए नए-गणना किए गएaccRewardsPerTokenमें तेज़ी से वृद्धि हुई। ContractaccRewardsPerTokenके प्रभाव को नियंत्रण में रखने के लिएrewardWriteoffका उपयोग करता है। हालाँकि, bug के कारण,rewardWriteoffमान की गणना करते समयaccRewardsPerTokenका पुराना (छोटा) मान उपयोग किया गया था। इसके कारण,accRewardsPerTokenका बड़ा मान अनियंत्रित रहा। - हमलावर ने फिर अपने rewards निकाले। चूँकि
accRewardsPerTokenमें एक बड़ा, अनियंत्रित मान था, system से भुगतान किया गया कुल reward inflate हो गया और contract ने अंततः 40,796,131,214,802,500,000 COVER tokens mint कर दिए।
इस hack breakdown के अंतिम भाग के लिए Mudit Gupta को धन्यवाद - उनके ब्लॉग पर इसके बारे में
अधिक पढ़ें :)