Jorian

Jorian

@jorianwoltjer.com

Normalize being weird.

353 followers107 following107 posts

๐Ÿ‡ณ๐Ÿ‡ฑ Voor de Nederlanders, ik help mee met het organiseren en challenges bouwen bij de National Hackers Cup 2026! Kom 19 september naar Purmerend, we hebben plek voor 500 deelnemers. Zoek een team van 4 of ga solo, en meld je aan: nhc.sh/aanmelden

nhc.shNational Hackers Cup 2026 | Het NK Hacken | 19 september, PurmerendDe grootste CTF in de geschiedenis van Nederland. Zaterdag 19 september 2026 in het H20 Esports Campus in Purmerend. 500 plekken, gratis, en de winnaar gaat naar huis als beste hacker van het land.

There's never enough Unauthenticated RCE's. Here I took a limited AI finding and through some clever Git structures, escalate it to Remote Code Execution on the default installation of Gogs 0.14.2! Read this and more in our latest blog post: www.aikido.dev/blog/fixed-r...

aikido.devYet another RCE in Gogs, but it's fixed this time!CVE-2026-52813 | An Aikido pentesting agent flagged a path traversal in Gogs. We escalated it to full RCE and reported two more bugs, all fixed in 0.14.3.

Playing L3akCTF this weekend with my teammates in Superflat was a blast! The challenge that stood out to me was "Squid", showcasing a werkzeug Race Condition with file descriptor symlinks that I'm sure can be applied elsewhere. Check out the writeup below: jorianwoltjer.com/blog/p/ctf/l...

jorianwoltjer.comL3akCTF 2026 - Squid | Jorian WoltjerA complex server-side web challenge showing off some parser differentials and a new technique. It was followed by a really interesting race condition technique involving file descriptors to read envir...

We took a look at popular open-source forum platform NodeBB! This resulted in interesting vulnerabilities involving the ActivityPub protocol My favorite is *translation templates* causing XSS everywhere, requiring a large rewrite of the codebase in v4.14.0 www.aikido.dev/blog/eight-h...

aikido.devFinding eight high-severity vulnerabilities in NodeBB in six hoursEight high-severity NodeBB vulnerabilities, found by our AI Pentest in six hours. Full technical breakdown of the XSS chains, auth bypasses, and post hijacking.

Simple IDOR turned into an interesting question of "how do we find the IDs?" The answer: Continuously probe ObjectId()'s from MongoDB and search through the predictable gaps! Check out the full explanation & implementation below: www.aikido.dev/blog/predict...

aikido.devPredicting MongoDB ObjectId() continuously in Rocket.ChatAikido's AI pentester found this file-access flaw in Rocket.Chat. A closer look at MongoDB's ObjectId() showed the weak randomness that makes it exploitable.

It's friday so you know what that means, time for a critical vulnerability! Okay... we announced it 4 weeks ago already to be fair, but now we can talk about the technical parts ๐Ÿ™Œ Read how authentication could be bypassed on every online phpBB instance: www.aikido.dev/blog/authent...

aikido.devAuthentication Bypass in the default configuration phpBBOur AI pentest agents found a critical phpBB auth bypass (CVE-2026-48611): one unauthenticated request logs you into any account. See the exploit and the fix.

I won't keep you in mystery any longer, here's how I found an XSS vulnerability *in* Shazzer! The chain involved some interesting browser techniques no sane developer could foresee. Check out the details below: jorianwoltjer.com/blog/p/stori... (and thanks @garethheyes.co.uk for making Shazzer!)

jorianwoltjer.comFinding XSS on Shazzer (literally) | Jorian WoltjerHow I found an XSS in Shazzer, a tool for discovering and sharing browser quirks through fuzzing. Not *using*, but *in* Shazzer. We'll explore some useful techniques with Blob URLs to unsandbox malici...
Gareth Heyes@garethheyes.co.uk

Just want to say @jorianwoltjer.com is awesome. You'll find out why soon...

Cool exploit with @0x999.net: He found that \x7F breaks Chrome's "Copy as cURL (cmd)" command parsing in Windows Console Host. In combination with a ", it allowed you to add any arguments to curl. With -o writing files is easy, but we need the username for the startup path... (1/2)

(2/2) After some wild ideas of leaking it, I found a different solution using the obscure "Variables" (curl.se/docs/manpage...) feature of curl. We can define and expand {{USERPROFILE}}, then finish with an 8.3 Shortname "StartM~1" to avoid issues with a space! The final payload:

XSS on a password manager, about the scariest impact you can have... github.com/aliasvault/a... Luckily it was fixed super quick! Here's a simple script you can use to send raw HTML in emails. I think a lot more clients will benifit from sanitizer testing. gist.github.com/JorianWoltje...

github.comCross-Site Scripting (XSS) via Email HTML Rendering## Impact A stored cross-site scripting (XSS) vulnerability was identified in the email rendering feature of AliasVault Web Client versions 0.25.3 and lower. When viewing received emails on an ali...

Really interesting technique from a local CTF. In gunicorn with --proxy-protocol --proxy-allow-from='*', the "Proxy Protocol" (github.com/haproxy/hapr...) allows you to spoof the source IP with a PROXY prefix like this! I feel like it might be useful as impact in Request Tunneling๐Ÿ‘€

For the people who don't have time to read this entire thing, here are the coolest tricks I mentioned ๐Ÿ˜„: (1/5)

Jorian@jorianwoltjer.com

Follow your rabbit holes is the takeaway from my latest CTF writeup. I found several interesting techniques that can help tricky situations, such as using the Connection Pool to make Client-Side Race Conditions easier! Read the whole thing on my blog: jorianwoltjer.com/blog/p/ctf/o...

View full thread

(4/5) Form input history is restored on history.back() even if the HTML changed in the meantime. For inputs without a form, that means you can hijack it into your own form with a form= attribute as an exception. From there you could submit your form to leak it.

(5/5) For Client-Side Race Conditions based on network requests, you can slow down time by holding up the Connection Pool. Then slowly release them one by one, performing any actions you need in between with 100% consistency.

For the people who don't have time to read this entire thing, here are the coolest tricks I mentioned ๐Ÿ˜„: (1/5)

Jorian@jorianwoltjer.com

Follow your rabbit holes is the takeaway from my latest CTF writeup. I found several interesting techniques that can help tricky situations, such as using the Connection Pool to make Client-Side Race Conditions easier! Read the whole thing on my blog: jorianwoltjer.com/blog/p/ctf/o...

(2/5) With a strict CSP, .click() gadgets can be very useful for things like: * Opening the attacker's website with <a target="_blank"> * Submitting a form for CSRF * Performing actions on the site to trigger other behavior

(3/5) Script gadgets inside an <iframe srcdoc> that require URL parameters can be set using a <meta http-equiv="refresh"> redirect to about:srcdoc. It reloads the document with the new URL while keeping its content.

Follow your rabbit holes is the takeaway from my latest CTF writeup. I found several interesting techniques that can help tricky situations, such as using the Connection Pool to make Client-Side Race Conditions easier! Read the whole thing on my blog: jorianwoltjer.com/blog/p/ctf/o...

jorianwoltjer.comopenECSC 2025 - kittychat-secure | Jorian WoltjerOvercomplicating a hard client-side web challenge involving complex CSP script gadgets. Exploit Math.random() predictability, and learn how to use the Connection Pool to make Race Conditions easier.

While playing a challenge by Salvatore Abello, I found a pretty interesting way to exploit Dangling Markup with a strict CSP. All you need is an <iframe>, <object> or <embed> set to about:blank, with a dangling name= attribute. This vulnerable page should be iframable.

On our attacker's page, we load this in an iframe and can then access [0] to get a reference to our injected object. To read its name, we can set its location to *our* about:blank and then read the .name window property (set by the attribute)!