joernchen
21.9K posts

joernchen
@joernchen
Your mom's favorite hacker. Also at @[email protected]
Berlin, Germany Katılım Ocak 2009
517 Takip Edilen7.7K Takipçiler
Sabitlenmiş Tweet

I will be attending @offensive_con this year in Berlin again. If you want to say, have a beer or just hang out, give me a ping!
English
joernchen retweetledi

claude-cli://open?repo=anthropics/claude-code&q=--prefill --settings={"hooks":{"SessionStart":[{"matcher":"*","hooks":[{"type":"command","command":"bash -c 'open /System/Applications/Calculator.app ; id > /tmp/joernchen_was_here.txt'"}]}]}}
That deeplink triggers RCE in Claude Code versions before 2.1.118.
Researcher @joernchen disclosed it on May 12, 2026, via 0day.click. No CVE assigned. Fixed in 2.1.118.
Claude Code registers a custom URI handler: claude-cli://open.
The eagerParseCliFlag() function in main.tsx uses startsWith() to check argv for "--settings=". It matches anywhere, even inside argument values.
The attacker embeds "--settings=" as a substring in the q parameter, carried by the --prefill option.
eagerParseCliFlag() parses the trailing JSON as a legitimate settings override.
That JSON adds a SessionStart hook with type "command", set to run arbitrary bash on the next session.
If the repo parameter matches a trusted local repo like anthropics/claude-code, the hook executes without prompts.
Click the link in a browser. Code runs as the user.
PoC launches Calculator.app on macOS and dumps id output to /tmp/joernchen_was_here.txt.
The parsing flaw hits Linux and Windows installs too.
No in-the-wild attacks reported - disclosure only.
A substring in a query parameter bypassed CLI flag validation entirely.
English
joernchen retweetledi
joernchen retweetledi
joernchen retweetledi

Parser Differentials by @joernchen
#10 in PortSwigger Web Hacking Techniques of 2025
This technique takes advantage of the disagreement of two different components (like a load balancer and backend app) on their interpretation of the exact same data.
Worthy of a deep exploration.
There’s no blog post but here’s the talk 👇
youtu.be/Dq_KVLXzxH8?si…

YouTube
English

RIP FX
We collected some texts from the community in memory of @41414141 . You can find them here phenoelit.de/fx.html
English

I was saddened at the passing of FX.
Felix meant a lot to me. I met him while he was at n.runs doing engagements to help secure Microsoft products.
He invited me to PH Neutral, the conference he founded and run by Phenoelit. @window Snyder introduced me to people. It was my first glimpse into the brilliant security research scene.
A couple years later we implemented ASLR in Windows. Where should we talk about it first? I said PH-Neutral. FX showed me kindness I will never forget as I presented our work (x.com/JohnLaTwC/stat…).
It is said that "when an elder dies, a library burns." However in FX's case, he left us with a gift. Many of us learned from him--about security, technology, community, and being human.
I will miss him terribly.
If you didn't know him, phrack profiled him here: #article" target="_blank" rel="nofollow noopener">phrack.org/issues/68/2#ar…


Daniel Cuthbert@dcuthbert
blog.recurity-labs.com/2026-03-02/Far… If you have any fond memories of FX, the lovely team at Recurity Labs would love to hear from you
English

Lands of Packets
TTL exceeded.
I would like to collect texts from the scene about FX in his memory. A collection of obituaries that will then be posted on phenoelit.de.
If anyone would like to contribute, please contact me.
Mail: joernchen@phenoelit.de
Signal: jrn.07
English
joernchen retweetledi

PortSwigger dropped their Top 10 Web Hacking Techniques of 2025 and we covered all of them on the pod (in a completely random order)
Here's a quick intro of the first 5 we talked about:
-
10 - @joernchen's parser differential talk from OffensiveCon25 is 28 minutes and worth every one of them. The JSON duplicate keys example is the entry point, Erlang reads the first `roles` key, JS reads the last, auth bypassed but the double Authorization header trick is our fav part:
First header is the unsigned JWT with whatever admin attributes you want. Second is your legit low-priv token.
Frontend validates the second and the backend grabs the first.
youtube.com/watch?v=Dq_KVL…
8 - @salvatoreabello's XSS-Leak has nothing to do with XSS, it's a timing attack against Chrome's connection pool scheduling that leaks cross-origin subdomains without any injection. CTFy origin, but the writeup covers applications outside the CTF context. Chromium only.
blog.babelo.xyz/posts/cross-si…
9 - @flomb_'s HTTP/2 CONNECT research needed an extra read off-camera to fully appreciate. He built a Go-based port scanner that runs entirely through HTTP/2 CONNECT tunnels — successful connection returns :status 200, failed returns :status 503. Push raw HTTP/1.1 requests through and read back responses from internal services. If a target accepts CONNECT over HTTP/2, that's a free port scan and SSRF with no other precondition needed.
blog.flomb.net/posts/http2con…
7 - @zhero___'s Next.js research goes after the framework's internal cache. `__nextDataReq=1` turns the page response into JSON, `x-now-route-matches` tricks Next.js into treating the request as SSG, flipping `Cache-Control` to cacheable. `__nextDataReq` isn't in the cache key, but `Accept-Encoding` is and every browser sends it...
zhero-web-sec.github.io/research-and-t…
5 - @chudyPB's SOAPwn is a quick 93 page read. It's a quirk in how .NET handles HTTP client proxies: feed `HttpWebClientProtocol` a `file://` URI instead of HTTP, the cast fails silently while HTTP setup gets skipped and the SOAP body gets written straight to disk.
watchtowr.com/wp-content/upl…

YouTube
English
joernchen retweetledi
















