Leaky Jar — Intigriti Challenge Write-up
Leaky Jar is where bakers share their best cookie recipes — and argue about them in the reviews. Find your next favourite.
Leaky Jar — Intigriti CSRF challenge

Leaky Jar is a small recipe-sharing app for "bakers". Log in and you get your own private recipe box. You can add recipes to it, share the whole box with another baker by username, or report a recipe URL to the Master Baker — an admin bot that opens whatever link you send while logged into its own account.
That last feature is where things get interesting. The Master Baker's box holds the flag, stored as the "Master Baker's Secret Recipe", and there's no direct path into the admin's box. So the challenge boils down to one question: how do you read a recipe that lives in someone else's vault?
Three actions matter here:
POST /share— share your entire box with another bakerPOST /recipe— add a recipe to your boxPOST /report— get the admin bot to visit a URL
The bug
Open the state-changing requests in Burp and the problem shows up fast. Neither /share nor the add-recipe endpoint has any CSRF protection:
- No anti-CSRF token. The body is just
username=<whoever>, completely predictable. - No Origin or Referer check, so a request from any site is accepted.
- The session cookie is set with
SameSite=None, so the browser attaches it to cross-site POSTs too.

Put those three together and it's a textbook CSRF: get the victim's browser to fire a forged POST and it runs in their session. We don't even have to figure out delivery — "Report a recipe" is literally built to hand a URL to the logged-in admin.
Which means this goes past "make the admin click something". We can make the admin share its secret box with us.
Building the exploit
First I registered a plain baker account, asako. That's who the admin is going to end up sharing with.

Then a one-page site with a hidden form that auto-submits a share request naming asako as the recipient. When the admin loads the page, its cookie rides along and the box gets shared with me.
<!doctype html>
<html>
<body>
<form id="f" action="https://leakyjar.intigriti.io/share" method="POST">
<input type="hidden" name="username" value="asako">
</form>
<script>document.getElementById('f').submit();</script>
</body>
</html>
Host it anywhere you control — Beeceptor, ngrok, a static host, take your pick.
Now hand it over. Paste the URL into Report a recipe and send it to the Master Baker.

The server confirms it's queued:

The bot opens the page in its authenticated session, the hidden form submits, and POST /share goes out with the admin's cookie attached. The admin shares its private box with asako without any interaction on its end.
Last step: log back in as asako and go to My recipe box → Shared with you. The admin's box is sitting right there. Open it and the Master Baker's Secret Recipe is fully readable.

Flag
INTIGRITI{019ef404-1e44-7748-bdcf-ca7b12dbfee0}

Why it works
No CSRF protection plus a SameSite=None cookie is all it takes to push any logged-in baker, admin included, into actions they never agreed to — just by getting them to open a page. And the app hands you a delivery mechanism for free. In practice that's enough to read someone's entire private vault (the flag, here) or quietly write recipes into a box that isn't yours.