Jorian
@jorianwoltjer.com
π€ 283
π₯ 96
π 69
Normalize being weird.
I posted 2 more small articles to the Critical Thinking Research Lab: * Nonce CSS leak in MathML:
lab.ctbb.show/research/lea...
* HTML fun facts:
lab.ctbb.show/research/htm...
loading . . .
Leaking CSP nonces with CSS & MathML
By dangling a tag in HTML, leaking nonce attributes via CSS is possible again!
https://lab.ctbb.show/research/leaking-csp-nonces-css-mathml
1 day ago
0
4
1
My first post for the
@ctbbpodcast.bsky.social
Research Lab is live. Super excited to be part of this team, can't wait to see what crazy research is gonna come from this!
lab.ctbb.show/research/Exp...
loading . . .
Exploiting Web Worker XSS with Blobs
Ways to turn XSS in a Web Worker into full XSS, covering known tricks and a new generic exploit using Blob URLs with the Drag and Drop API
https://lab.ctbb.show/research/Exploiting-web-worker-XSS-with-blobs
20 days ago
0
9
3
AMAZING technique by @salvatoreabello, I've been inspired by the connection pool exploits he comes up with. Check out this crazy impact labeled as "working as intended":
blog.babelo.xyz/posts/cross-...
21 days ago
0
6
3
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.
23 days ago
2
1
0
@omidxrz.bsky.social
shared this nice postMessage() challenge some time ago. I'm a bit late, but worth trying if you haven't already :D Otherwise, my solution is below, it's a really fun technique that makes me re-evaluate all the .source checks I've seen before...
26 days ago
1
3
0
The last Intigriti challenge by @0xblackbird was a fun combination of SSRF to RCE using a surprisingly exploitable pitfall in NextJS middleware. Check out my writeup below:
jorianwoltjer.com/blog/p/ctf/i...
loading . . .
Intigriti August RCE Challenge (0825) | Jorian Woltjer
A challenge to achieve RCE through SSRF by @0xblackbird, involving an interesting NextJS middleware pitfall. We build a clean proxy for it and find some extra vulnerabilities along the way.
https://jorianwoltjer.com/blog/p/ctf/intigriti-xss-challenge/0825?2
about 1 month ago
0
10
1
#bugbountytips
Template Injection payload list: {{7*7}} ${7*7}} 49 <%=7*7%>
2 months ago
3
3
1
I made a hard
@intigriti.com
XSS challenge this July π But, it involves some very interesting Mutation XSS & DOM Clobbering fun combined with a CSP Bypass using the powerful SocketIO gadget. Everything's explained in my writeup below!
jorianwoltjer.com/blog/p/ctf/i...
loading . . .
Intigriti July XSS Challenge (0725) | Jorian Woltjer
My author's writeup of the July 2025 challenge. Perform Mutation XSS to DOM Clobber an change the insertion point into an iframe, then bypass the CSP using a new useful Socket.IO gadget
https://jorianwoltjer.com/blog/p/ctf/intigriti-xss-challenge/0725
3 months ago
0
7
1
Here's my writeup the technique allowing some nonce-based CSPs to be bypassed. I think it definitely has some practical use, so included some details about different scenario's. Don't let that HTML-injection of yours wait!
jorianwoltjer.com/blog/p/resea...
loading . . .
Nonce CSP bypass using Disk Cache | Jorian Woltjer
The solution to my small XSS challenge, explaining a new kind of CSP bypass with browser-cached nonces. Leak it with CSS and learn about Disk Cache to safely update your payload
https://jorianwoltjer.com/blog/p/research/nonce-csp-bypass-using-disk-cache
3 months ago
3
15
6
Just found an interesting way to bypass some nonce-based CSPs and made a small XSS challenge with an exploitable scenario. See if you can find it before I tell! Source JS:
gist.github.com/JorianWoltje...
URL:
greeting-chall.jorianwoltjer.com
Found a solution? Please DM to avoid spoilers, thanks!
3 months ago
1
6
2
This is a Public Service Announcement to all client-side challenge authors: *XSS on any localhost origin makes RCE possible on selenium!*
add a skeleton here at some point
3 months ago
0
3
0
This month @ToG gave us an unusual, but very cool challenge. It required some messing with a headless browser via Arbitrary File Write, and then to use a little-known Chromedriver CSRF β RCE trick. A must-know for challenge-cheesers like myself!
jorianwoltjer.com/blog/p/ctf/i...
loading . . .
Intigriti June RCE Challenge (0625) | Jorian Woltjer
A surprising RCE challenge instead of XSS, created by @ToG. I took an unintended approach involving the Preferences file and a chromedriver CSRF RCE issue, a must-know for CTF authors.
https://jorianwoltjer.com/blog/p/ctf/intigriti-xss-challenge/0625
3 months ago
1
3
1
Many great techniques covered in this writeup by @rewhile for different cheesy π§ strategies and client-side fun. Show them some love! I promise you'll learn something new:
t.co/hox8lncSEN
loading . . .
https://rewhile.github.io/posts/smiley-2025/
https://t.co/hox8lncSEN
4 months ago
0
3
0
Small tip for the JavaScript reverse engineers out there, Chrome has a `debug()` function which triggers a breakpoint whenever its first argument is called. It even works on built-in methods, no more wrapping stuff in proxies :D debug(DOMParser.prototype.parseFromString)
4 months ago
0
11
1
Just pushed a new frontend for my site, and a new post! This one's about an tricky file write vulnerability on Windows in OBS. By crafting an image with very specific pixels, we can plant a backdoor on your PC all from an attacker's site by misconfiguring:
jorianwoltjer.com/blog/p/resea...
loading . . .
OBS WebSocket to RCE | Jorian Woltjer
Disabling password authentication of your OBS WebSocket server can have devastating consequences. We'll attack from the browser to construct an RCE payload on Windows formed from the pixels of an imag...
https://jorianwoltjer.com/blog/p/research/obs-websocket-rce
4 months ago
1
5
2
JavaScript HTML templating framework in 153 bytes: t=(S,...V)=>(e=$=>$?._?$:$?.map?$.map(e).join``:($+'').replace(/[&"'<>]/g,c=>`&#${c.charCodeAt()};`),(o=Object(S.reduce((a,p,i)=>a+e(V[i-1])+p)))._=1,o);
4 months ago
1
15
4
Double-Clickjacking, or "press buttons on other sites without preconditions". After seeing and experimenting with this technique for a while, I cooked up a variation that combines many small tricks and ends up being quite convincing. Here's a flexible PoC:
jorianwoltjer.com/blog/p/hacki...
loading . . .
The Ultimate Double-Clickjacking PoC | Jorian Woltjer
Combing a lot of browser tricks to create a realistic Proof of Concept for the Double-Clickjacking attack. Moving a real popunder with your mouse cursor and triggering it right as you're trying to bea...
https://jorianwoltjer.com/blog/p/hacking/ultimate-doubleclickjacking-poc
5 months ago
2
6
2
This includes a fun trick with User Activation. It can be used to detect when actions like shortcuts and clicks happen inside cross-origin iframes:
add a skeleton here at some point
5 months ago
0
4
1
The legendary
@joaxcar.bsky.social
made a really interesting XSS challenge this month for Intigriti. My solution involved winning a race condition with 100 <iframe>s to utilize a DOM Clobbering gadget after bypassing a RegEx. Check out the writeup below:
jorianwoltjer.com/blog/p/hacki...
loading . . .
Intigriti May XSS Challenge (0525) | Jorian Woltjer
A challenge by @joaxcar with a small but complex XSS chain, hitting DOM Clobbering with a race condition and abusing a cool URL parsing quirk in JavaScript.
https://jorianwoltjer.com/blog/p/hacking/intigriti-xss-challenge/0525
5 months ago
2
12
7
While collecting some HTML-Injection techniques, I thought of an interesting way to abuse existing <form>s when XSS isn't an option. You can inject <input>s with form= pointing to the form's id= to add params, and make a <button> with form= and formaction= to change its action.
5 months ago
1
4
0
Servers listening on 127.0.0.1 are often still vulnerable to DNS Rebinding in the browser. Not many people know this and it blew my mind when I first found out about it π€― Check out the writeup below for details on how we could interact with local servers to exploit functionality
add a skeleton here at some point
5 months ago
0
1
1
reposted by
Jorian
Atomic
5 months ago
(Already posted this on X but) WE HACKED THE MODEL CONTEXT PROTOCOL!! Check out the writeup, chat:
blog.jaisal.dev/articles/mcp
loading . . .
MCP: May Cause Pwnage - Backdoors in Disguise
Yeah I think the title says it all. Jorian and I penetration tested the model context protocol and had some fun breaking it. We ended up hacking a range of things, from cloud infrastructure to crypto
https://blog.jaisal.dev/articles/mcp
0
4
2
Me and
@jaisal.dev
wanted to hack MCP servers, but *not* from an LLM's perspective. Looking at alternative ways to interact with the functionality and the tools around it. We found many client-side issues and discovered scary internet-exposed servers!
blog.jaisal.dev/articles/mcp
loading . . .
MCP: May Cause Pwnage - Backdoors in Disguise
Yeah I think the title says it all. Jorian and I penetration tested the model context protocol and had some fun breaking it. We ended up hacking a range of things, from cloud infrastructure to crypto
https://blog.jaisal.dev/articles/mcp
5 months ago
1
8
5
Helping organize a CTF at my local BSides was soooo much fun, meeting the people who play your challenges. Would highly recommend to anyone to help out any such event in their area, either as a speaker or just by hosting something there :D
5 months ago
0
1
0
While listening to the
@ctbbpodcast.bsky.social
, I discovered that my own blog was vulnerable to Cache Deception! It would have allowed anyone to send me a link and then retrieve all hidden posts. This sent me down a caching deep dive, check out the details here:
jorianwoltjer.com/blog/p/codin...
loading . . .
Cache Deception on my new site! | Jorian Woltjer
A fun story about discovering my site was vulnerable to Cache Deception, allowing the visit of a link by me to leak all hidden blog posts to an attacker, thanks to URL-decoding and Path Traversals to ...
https://jorianwoltjer.com/blog/p/coding/cache-deception-on-my-new-site
6 months ago
1
9
1
reposted by
Jorian
Rebane
6 months ago
it's finally time... this is css clicker, a fully-featured incremental game where your goal is to design your own personal website and get as many views on it as possible the fun part? it's a pure-css game, meaning it runs no javascript or server-side code. have fun!
lyra.horse/css-clicker/
loading . . .
CSS Clicker
a pure-CSS idle game where you build your own website
https://lyra.horse/css-clicker/
43
476
215
This month,
@0x999.net
made an awesome and difficult Intigriti XSS challenge. I really enjoyed the openness of this challenge resulting in an unintended solution and the first solve π©Έ! Check out how I got there in my writeup below:
jorianwoltjer.com/blog/p/hacki...
loading . . .
Intigriti March XSS Challenge (0325) | Jorian Woltjer
A hard Cross-Site Scripting challenge chaining small bugs with one very hard step to leak a fragment directive using Self XSS
https://jorianwoltjer.com/blog/p/hacking/intigriti-xss-challenge/0325
6 months ago
0
4
2
reposted by
Jorian
Intigriti
7 months ago
β° It's CHALLENGE O'CLOCK! π Find the FLAG before Monday the 30th March π Win β¬400 in SWAG prizes π We'll release a tip for every 50 likes on this tweet Thanks
@0x999.net
for the challenge π
challenge-0325.intigriti.io
loading . . .
March Challenge - Intigriti
Find the FLAG and WIN Intigriti swag.
https://challenge-0325.intigriti.io
2
6
3
@renwax23.bsky.social
made an interesting challenge (
x.com/RenwaX23/sta...
). Instead of right-click and open in new tab, I found you can also use drag-and-drop into a popup window to achieve the same effect! With CSS you can make it convincing like clickjacking:
gist.github.com/JorianWoltje...
loading . . .
7 months ago
1
1
0
Here's a way to exploit `eval(name)` on Firefox without user interaction:
7 months ago
1
1
0
Inspired by
x.com/PaulosYibelo
, I thought about what improvements I could make to trick users into pressing buttons that perform sensitive actions. Finding some vulnerable targets along the way! Read the details in my latest blog post below:
jorianwoltjer.com/blog/p/hacki...
loading . . .
Post: Pressing Buttons with Popups (on Twitch, LinkedIn and more) | Jorian Woltjer
Combining existing research with my own experiments to create a realistic proof of concept that forces an OAuth authorization with a single key press. Learn the ins and outs of popup blockers and focu...
https://jorianwoltjer.com/blog/p/hacking/pressing-buttons-with-popups
8 months ago
0
5
1
I recently found a pretty interesting attack on a friend's website where the `Link:` response header was automatically set to the requested path:
8 months ago
1
4
0
reposted by
Jorian
KΓ©vin Gervot (Mizu)
8 months ago
I'm very happy to finally share the second part of my DOMPurify security research π₯ This article mostly focuses on DOMPurify misconfigurations, especially hooks, that downgrade the sanitizer's protection (even in the latest version)! Link π
mizu.re/post/explori...
1/2
2
27
12
During
#x3ctf
, I discovered an unintended solution that turned out to be a pretty cool generic technique. It allows you to detect the result of a selector during CSS Injection, bypassing any CSP restricting external requests! Check out the writeup below:
jorianwoltjer.com/blog/p/ctf/x...
loading . . .
Post: x3CTF - blogdog (+ new CSS Injection XS-Leak!) | Jorian Woltjer
A "hard web xssbot" challenge about a fun browser quirk with the is= attribute to perform CSS Injection. Bypass the strict CSP with an unintended new technique to XS-Leak a selector's result by detect...
https://jorianwoltjer.com/blog/p/ctf/x3ctf-blogdog-new-css-injection-xs-leak
9 months ago
1
22
7
We all use tools while pentesting, but what if these tools are vulnerable themselves? We found multiple high vulnerabilities in PwnDoc and its libraries docx-templater & angular-expressions. My favorites are the JavaScript templating sandbox escape tricks!
warpnet.nl/blog/pwneddo...
loading . . .
PwnedDoc: Hacking a Reporting Tool - Warpnet
Finding 5 CVEs in the PwnDoc pentest reporting tool, angular-expressions and docx-templater. This includes multiple 1-click Remote Code Execution vulnerabilities by escaping the JavaScript sandbox in ...
https://warpnet.nl/blog/pwneddoc-hacking-a-reporting-tool/
9 months ago
0
2
0
My colleague is organizing the first ever BSides in Groningen, Netherlands! This is a community-driven event taking place May 2nd. If you have a cool story or piece of research for a talk and want to attend, be sure to submit to the Call for Presentations:
sessionize.com/bsidesgrunn/
loading . . .
BSides Groningen: Call for Presentations
BSides Groningen is an Information Security conference organized by the community for the community.Each BSides is a community-driven framework for bu...
https://sessionize.com/bsidesgrunn/
9 months ago
0
1
0
I loved playing with team Superflat during the IrisCTF 2025 last weekend, where we ended up in 4th place. The challenge I enjoyed most was about a cool DNS Rebinding technique with a cache, and learning some Java/Kotlin along the way!
jorianwoltjer.com/blog/p/ctf/i...
loading . . .
Post: IrisCTF 2025 - webwebhookhook | Jorian Woltjer
The hardest web challenge of this CTF was a simple Java Spring web server written in Kotlin, with a complex DNS Rebinding solution. Learn about a new way to exploit this when a response is cached by t...
https://jorianwoltjer.com/blog/p/ctf/irisctf-2025-webwebhookhook
9 months ago
0
1
0
Just arrived at
#38C3
, just as excited as I was last year π
10 months ago
0
2
0
Have you tried my december XSS challenge? The solution's public now in this writeup! It includes two vulnerabilities in CodeIgniter that abuse the cache storage format and bypass its builtin XSS filter. Merry Christmas! π
add a skeleton here at some point
10 months ago
0
5
1
reposted by
Jorian
CryptoCat
10 months ago
Today is the last day of the Intigriti December challenge π As a final hint, we'll give you our plan to save Christmas! π First, look into this mysterious "cache" to find an escape route. Only then will you need to dodge the traps using a "mutation" of your own, to grant that sweet XSS π
add a skeleton here at some point
0
1
1
reposted by
Jorian
terjanq
10 months ago
Got sniped into the challenge and ended up doing some cool XSS research :D 11 char XSS with mind-boggling race-conditions. TL;DR the final payload is location=x (10 chars) and the longest is top.Z.x=x.d (11 char) It's shorter than location=name !!
terjanq.me/solutions/jo...
add a skeleton here at some point
1
29
12
I made an XSS challenge for Intigriti this month, good luck and have fun!
x.com/intigriti/st...
10 months ago
0
3
3
Apparently, navigating to a javascript: URL returning a string will write it as HTML to the DOM. This allows for an interesting XSS payload:
x.com/icesfont2/st...
10 months ago
0
12
2
My challenge has been out for about a week with only one half-intended solution, so here's my solution!
add a skeleton here at some point
11 months ago
1
1
1
To summarize what I have learned about Mutation XSS, my CVE, and the solution to my challenge, I wrote a post going through it all. If you like regular XSS, this is a whole new world of crazy techniques and many sanitizer bypasses. You too can learn this!
jorianwoltjer.com/blog/p/hacki...
loading . . .
Post: Mutation XSS: Explained, CVE and Challenge | Jorian Woltjer
Learn how to bypass HTML sanitizers by abusing the intricate parsing rules and mutations. Including my CVE-2024-52595 (lxml_html_clean bypass) and the solution to a hard challenge I shared online
https://jorianwoltjer.com/blog/p/hacking/mutation-xss
11 months ago
0
23
11
I've been closely following the awesome Mutation XSS research that's been coming out, and have found some tricks of my own. Below is a challenge from me to you. This code removes comments, dangerous text nodes and all attributes. Bypass the filter to achieve XSS. Good luck!
11 months ago
1
2
2
you reached the end!!
feeds!
log in