<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Ryuk0x01</title><description>Security Researcher</description><link>https://ryuk0x01.github.io/</link><language>en</language><item><title>LeakyJar Write-up | Top 3 Intigriti Challenge Write-up 🏆</title><link>https://ryuk0x01.github.io/posts/leakyjar-write-up/</link><guid isPermaLink="true">https://ryuk0x01.github.io/posts/leakyjar-write-up/</guid><description>A detailed write-up for the Intigriti June Bonus Challenge 2026 explaining the reconnaissance process, identifying the vulnerable /share endpoint, and exploiting a CSRF vulnerability to retrieve the secret recipe.</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Intigriti June Bonus Challenge 2026 — Leaky Jar Write-up&lt;/h1&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The objective of this challenge was to retrieve the administrator’s secret recipe containing the flag.&lt;/p&gt;
&lt;p&gt;At first glance, the application looked like a simple recipe management platform where users could create private recipes, share them with other users, and report recipes to an administrator through a review bot.&lt;/p&gt;
&lt;p&gt;Rather than searching immediately for payloads, I started by understanding the application’s functionality and identifying every feature that could modify user data or interact with the administrator.&lt;/p&gt;
&lt;p&gt;This write-up explains the complete reconnaissance process, the reasoning that led to identifying the vulnerable endpoint, and how the CSRF vulnerability was leveraged to obtain the administrator’s private vault.&lt;/p&gt;
&lt;h2&gt;Reconnaissance&lt;/h2&gt;
&lt;p&gt;I started by exploring the application’s functionality to understand the available features before attempting any exploitation.&lt;/p&gt;
&lt;p&gt;The homepage revealed the main areas of the application:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Recipes&lt;/strong&gt; — Publicly available recipes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bakers&lt;/strong&gt; — List of registered users.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;My Recipe Box&lt;/strong&gt; — A private vault where users can store personal recipes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Report a Recipe&lt;/strong&gt; — A page allowing users to submit URLs for review by the administrator bot.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At this stage, nothing appeared obviously vulnerable. Therefore, I decided to inspect each feature individually, focusing on functionality capable of modifying user data or interacting with privileged users.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:1400/format:webp/1*SncFnMXoOWJCuny2meycNw.png&quot; alt=&quot;Figure 1 — Homepage showing the main application features.&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Exploring the Application&lt;/h2&gt;
&lt;p&gt;I continued exploring each section of the application to identify features that could potentially expose sensitive functionality.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Recipes&lt;/strong&gt; page only displayed public content and did not appear to expose any attack surface.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Bakers&lt;/strong&gt; page listed registered users, which later became useful because the &lt;code&gt;/share&lt;/code&gt; functionality requires a valid username.&lt;/p&gt;
&lt;p&gt;The most interesting page, however, was &lt;strong&gt;My Recipe Box&lt;/strong&gt;. This page allows authenticated users to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Store private recipes.&lt;/li&gt;
&lt;li&gt;Share their entire recipe vault with another user.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Since both actions modify application state, this page became the primary focus for further analysis.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:1400/format:webp/1*WwgCXOvnWjm2pO237ForXg.png&quot; alt=&quot;Figure 2 — The Recipe Box page exposing functionality for storing and sharing private recipes.&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Inspecting the Share Functionality&lt;/h2&gt;
&lt;p&gt;Since the &lt;strong&gt;Share my Recipe Box&lt;/strong&gt; feature performs a state-changing action, I decided to inspect how it was implemented.&lt;/p&gt;
&lt;p&gt;The page contains a simple HTML form that submits a &lt;code&gt;POST&lt;/code&gt; request to the &lt;code&gt;/share&lt;/code&gt; endpoint. The only user-controlled parameter is the target username.&lt;/p&gt;
&lt;p&gt;While reviewing the form, I noticed that it did not contain any hidden fields commonly used for request validation, such as a CSRF token. At this point, I did not immediately conclude that the application was vulnerable, but the absence of an anti-CSRF mechanism made this endpoint particularly interesting for further investigation.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:1380/format:webp/1*ZqQ85HtMqO53zdNHxrpHUg.png&quot; alt=&quot;Figure 3 — HTML form used to share the recipe box with another user.&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Identifying the Attack Surface&lt;/h2&gt;
&lt;p&gt;At this stage, I shifted my focus from exploring the application’s features to identifying endpoints capable of performing sensitive actions.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;/share&lt;/code&gt; endpoint immediately stood out for several reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It uses a &lt;code&gt;POST&lt;/code&gt; request, indicating that it modifies application state.&lt;/li&gt;
&lt;li&gt;The action grants another user access to the owner’s private recipe vault.&lt;/li&gt;
&lt;li&gt;The HTML form only requires a single parameter (&lt;code&gt;username&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;No anti-CSRF token or other request validation mechanism was visible in the page source.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Although these observations alone were not sufficient to confirm a vulnerability, they suggested that the endpoint was a strong candidate for Cross-Site Request Forgery (CSRF) testing.&lt;/p&gt;
&lt;p&gt;Another important clue came from the challenge itself: users could submit external URLs through the &lt;strong&gt;Report a Recipe&lt;/strong&gt; feature, and those URLs would later be visited by an authenticated administrator bot.&lt;/p&gt;
&lt;p&gt;Combining these observations led to the following hypothesis:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;If the administrator bot could be tricked into visiting an attacker-controlled webpage, and if the &lt;code&gt;/share&lt;/code&gt; endpoint accepted cross-site POST requests without CSRF protection, the administrator could unknowingly share their private recipe vault with an attacker-controlled account.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This hypothesis became the basis for the next stage of the investigation.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:1400/format:webp/1*wLTPWQHM3vSx_Ueg37IJ2A.png&quot; alt=&quot;Figure 4 — The /share request only requires the target username and contains no anti-CSRF token or other request validation parameter.&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Developing the Exploit&lt;/h2&gt;
&lt;p&gt;After confirming that the &lt;code&gt;/share&lt;/code&gt; endpoint accepted a simple authenticated &lt;code&gt;POST&lt;/code&gt; request without any visible CSRF protection, I attempted to reproduce the same request from an external webpage.&lt;/p&gt;
&lt;p&gt;The goal was straightforward: create a page that automatically submits a form to the &lt;code&gt;/share&lt;/code&gt; endpoint while an authenticated administrator is viewing it.&lt;/p&gt;
&lt;p&gt;If successful, the administrator’s browser would include its authenticated session cookies, causing the application to process the request as if it had been intentionally initiated by the administrator.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:1400/format:webp/1*AnVa7q1u0gi5A9tnX1edbg.png&quot; alt=&quot;Figure 5 — Auto-submitting HTML page used to trigger a cross-site POST request to the /share endpoint.&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Delivering the Payload&lt;/h2&gt;
&lt;p&gt;Once the CSRF page was ready, the next step was to deliver it to the administrator.&lt;/p&gt;
&lt;p&gt;The challenge provides a &lt;strong&gt;Report a Recipe&lt;/strong&gt; feature, allowing participants to submit a URL that is later visited by an authenticated administrator bot.&lt;/p&gt;
&lt;p&gt;I hosted the HTML page on a publicly accessible server and submitted its URL through the report form. Since the page automatically submitted the form on load, no additional interaction from the administrator was required.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:1400/format:webp/1*Ze2BcqycMjJH5dhHTjHVCw.png&quot; alt=&quot;Figure 6 — Submitting the attacker-controlled page to the administrator bot.&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Exploitation&lt;/h2&gt;
&lt;p&gt;When the administrator bot visited the submitted URL, the browser automatically rendered the attacker’s HTML page.&lt;/p&gt;
&lt;p&gt;The embedded JavaScript immediately submitted the hidden form to the &lt;code&gt;/share&lt;/code&gt; endpoint.&lt;/p&gt;
&lt;p&gt;Because the administrator was already authenticated, the browser automatically included the administrator’s session cookies with the request.&lt;/p&gt;
&lt;p&gt;As a result, the application processed the request as a legitimate action performed by the administrator and shared the administrator’s private recipe vault with my account.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:1400/format:webp/1*IEMovOvc0USlh1z86R6XVQ.png&quot; alt=&quot;Figure 7 — The administrator’s recipe vault is now shared with the attacker’s account.&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Retrieving the Flag&lt;/h2&gt;
&lt;p&gt;After the administrator’s recipe box was successfully shared with my account, I navigated back to the &lt;strong&gt;My Recipe Box&lt;/strong&gt; page.&lt;/p&gt;
&lt;p&gt;The administrator’s private recipes were now accessible under the shared recipes section. Among them was the &lt;strong&gt;Master Baker’s Secret Recipe&lt;/strong&gt;, which contained the challenge flag.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;INTIGRITI{019ef404-1e44-7748-bdcf-ca7b12dbfee0}

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Root Cause&lt;/h2&gt;
&lt;p&gt;The vulnerability exists because the &lt;code&gt;/share&lt;/code&gt; endpoint performs a sensitive state-changing action without implementing any protection against Cross-Site Request Forgery (CSRF).&lt;/p&gt;
&lt;p&gt;The endpoint accepts authenticated &lt;code&gt;POST&lt;/code&gt; requests based solely on the user&apos;s session cookies and does not verify whether the request originated from the legitimate application.&lt;/p&gt;
&lt;p&gt;As a result, an attacker can craft an external webpage that silently submits a request on behalf of an authenticated user, causing unintended actions to be executed.&lt;/p&gt;
&lt;h2&gt;Mitigation&lt;/h2&gt;
&lt;p&gt;The vulnerability can be mitigated by implementing standard CSRF protections, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Synchronizer CSRF tokens.&lt;/li&gt;
&lt;li&gt;Origin and Referer header validation.&lt;/li&gt;
&lt;li&gt;Appropriate SameSite cookie attributes.&lt;/li&gt;
&lt;li&gt;Additional confirmation for sensitive actions such as sharing an entire recipe vault.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This challenge highlights how a seemingly simple feature can become security-critical when combined with an automated administrator bot.&lt;/p&gt;
&lt;p&gt;Although the &lt;code&gt;/share&lt;/code&gt; endpoint appeared straightforward, the absence of CSRF protection allowed an attacker to abuse the administrator&apos;s authenticated session and gain unauthorized access to sensitive data.&lt;/p&gt;
&lt;p&gt;By combining careful reconnaissance with an understanding of browser behavior and CSRF mechanics, it was possible to identify the intended attack path and successfully retrieve the flag.&lt;/p&gt;
</content:encoded></item></channel></rss>