<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Application Security on Christoph Kemetmüller</title><link>https://xn--kemetmller-feb.com/tags/appsec/</link><description>Recent content in Application Security on Christoph Kemetmüller</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 Christoph Kemetmüller</copyright><lastBuildDate>Sat, 31 Oct 2026 00:45:37 +0100</lastBuildDate><atom:link href="https://xn--kemetmller-feb.com/tags/appsec/index.xml" rel="self" type="application/rss+xml"/><item><title>Hackers took 300 GB from the AfD's provider in two visits</title><link>https://xn--kemetmller-feb.com/blog/afd-hack/</link><pubDate>Sat, 31 Oct 2026 00:44:52 +0100</pubDate><guid>https://xn--kemetmller-feb.com/blog/afd-hack/</guid><description>&lt;p&gt;&lt;a href="https://www.lilithwittmann.de/blog/afd-hack-2026/" target="_blank" rel="noreferrer"&gt;Lilith Wittmann reconstructs&lt;/a&gt; (in German) how about 300 GB left Alternita, the party-owned provider that runs more than 300 AfD domains.&#10;According to the hackers and the provider&amp;rsquo;s circle, the way in was a poorly protected WordPress at &lt;code&gt;wahlkampf.afd.de&lt;/code&gt;, where they installed a plugin (WP-Console) for a shell; they reset officials&amp;rsquo; mailbox passwords and pulled mail out via one-click hosters and IMAP batch requests.&#10;The intrusion was noticed on 9 September after about 180 GB, but by the hackers&amp;rsquo; account the code they left behind was not, and they came back on 14 September for another 120 GB.&#10;&lt;a href="https://www.afd.de/afd-zum-daten-hack-angriff-auf-parteiensystem-und-demokratie/" target="_blank" rel="noreferrer"&gt;The AfD&amp;rsquo;s own statement&lt;/a&gt; dates the attack to late September and blames the scandals on a crude AI keyword search.&#10;The dump includes member-database extracts and register-office data on first-time voters in Mecklenburg-Vorpommern, which registry offices had emailed unencrypted, and the party&amp;rsquo;s claim that it informed the data-protection authority immediately sits awkwardly with the Berlin authority logging the report at 18:59, two hours after the 16:51 press release.&lt;/p&gt;</description></item><item><title>CVE-2026-109618 - PHP RCE CVEs leaked before the patch was out</title><link>https://xn--kemetmller-feb.com/blog/php2shell/</link><pubDate>Thu, 29 Oct 2026 18:00:00 +0100</pubDate><guid>https://xn--kemetmller-feb.com/blog/php2shell/</guid><description>&lt;p&gt;On 20 October &lt;a href="https://cyberplace.social/@GossiTheDog/117474220875882526" target="_blank" rel="noreferrer"&gt;Kevin Beaumont noticed&lt;/a&gt; two PHP CVE IDs circulating before any patch existed, and by that evening &lt;a href="https://infosec.exchange/@wdormann/117475540081194496" target="_blank" rel="noreferrer"&gt;Will Dormann had spotted&lt;/a&gt; a Calif video of a proof of concept called php2shell working against WordPress.&#10;&lt;a href="https://thephp.foundation/blog/2026/10/21/todays-php-security-release-and-how-were-strengthening-php-security/" target="_blank" rel="noreferrer"&gt;The PHP Foundation&amp;rsquo;s account&lt;/a&gt; fills in the rest: no technical details leaked, just a wrong release time and a wrong CVSS of 10.0 (it is 9.2), but the early pre-announcement led Calif to publish that video by mistake, Chainguard shipped patched images more than six hours before the embargo lifted, and the release was pulled forward a day to 21 October.&#10;&lt;a href="https://www.php.net/archive/2026.php#2026-10-21-5" target="_blank" rel="noreferrer"&gt;The advisory&lt;/a&gt; describes two unauthenticated RCEs: hitting &lt;code&gt;memory_limit&lt;/code&gt; at the wrong moment leaves half-initialised request data that cleanup treats as valid (&lt;a href="https://db.gcve.eu/vuln/CVE-2026-109618" target="_blank" rel="noreferrer"&gt;CVE-2026-109618&lt;/a&gt;), and a fatal error can leave global state pointing into a previous request&amp;rsquo;s freed memory (&lt;a href="https://db.gcve.eu/vuln/CVE-2026-109619" target="_blank" rel="noreferrer"&gt;CVE-2026-109619&lt;/a&gt;), with the first triggerable on Apache with mod_php before any application code runs.&#10;Update to 8.5.12, 8.4.27, 8.3.36 or 8.2.35; the &lt;a href="https://infosec.exchange/@wdormann/117479190363340291" target="_blank" rel="noreferrer"&gt;stopgaps Dormann passed on&lt;/a&gt; (&lt;code&gt;memory_limit=-1&lt;/code&gt;, &lt;code&gt;session.upload_progress.enabled=0&lt;/code&gt;, a small &lt;code&gt;post_max_size&lt;/code&gt;) each close only specific paths.&#10;The Foundation is also unusually frank that the OOM problem was first spotted in 2024 and the fix stalled for months, &amp;ldquo;a structural failure&amp;rdquo;, until Calif and OpenAI reported the same root cause on 11 August.&#10;Meanwhile a &lt;a href="https://jackalsyn.com/posts/php-up-2026.html" target="_blank" rel="noreferrer"&gt;pre-patch &amp;ldquo;weaponized&amp;rdquo; write-up&lt;/a&gt; has since demoted its own bug to a non-RCE CVSS 5.3, proving that leaked CVE numbers attract confident guesses long before they attract facts.&lt;/p&gt;&#10;&lt;p&gt;Since the release, &lt;a href="https://arcticwolf.com/resources/blog/php2shell-critical-php-vulnerabilities-enable-unauthenticated-remote-code-execution/" target="_blank" rel="noreferrer"&gt;Arctic Wolf&lt;/a&gt; lists PHP-FPM, php-cgi, FrankenPHP and LiteSpeed as affected too, and saw wide scanning but only a few attempts to fetch second-stage payloads from a host serving the Mirai-derived Potassium botnet.&#10;The Delft Threat Intelligence Lab&amp;rsquo;s &lt;a href="https://php2shell.delftintellab.com/" target="_blank" rel="noreferrer"&gt;live tracker&lt;/a&gt; counted 66,494 requests from 645 IPs by 27 October, 47,900 of them probes only.&#10;A &lt;a href="https://news.ycombinator.com/item?id=50224916" target="_blank" rel="noreferrer"&gt;Show HN challenge&lt;/a&gt; put a bitcoin key worth about $502 on a server running pre-patch PHP 8.4.26, and KillaBoi got it out on 25 October.&#10;The &lt;a href="https://github.com/KillaBoi/StealMyBitcoin-PoC" target="_blank" rel="noreferrer"&gt;released PoC&lt;/a&gt; lands about seven runs in ten in a lab; the stored key did not derive the prize address, and the operator paid out anyway.&#10;&lt;a href="https://dreamgroup.com/blog/chained-php2shell-exploit-roots-25-servers" target="_blank" rel="noreferrer"&gt;Dream Group says&lt;/a&gt; a custom PHP2Shell build, chained with the &lt;a href="https://xn--kemetmller-feb.com/blog/fragnesia-cve-2026-46300/" &gt;Fragnesia&lt;/a&gt; kernel privilege escalation (&lt;a href="https://db.gcve.eu/vuln/CVE-2026-46300" target="_blank" rel="noreferrer"&gt;CVE-2026-46300&lt;/a&gt;), rooted 24 Palo Alto Networks PAN-OS firewalls with internet-facing management interfaces in the US, Japan, Taiwan and South Korea, plus the internal firewall management server of a US government-affiliated organisation, from which the attacker went after its Active Directory.&#10;Per Dream, Unit 42 has verified the tooling and tracks the activity as CL-UNK-1280, a Chinese-speaking actor in UTC+8, while Dream&amp;rsquo;s own &amp;ldquo;AI-assisted&amp;rdquo; label rests on Claude Code and a DeepSeek and Kimi driven offensive platform (aiscan) found on the attacker&amp;rsquo;s infrastructure, plus the scripts&amp;rsquo; commenting style.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Update 2026-10-30:&lt;/strong&gt; A week on, &lt;a href="https://xn--kemetmller-feb.com/blog/php2shell-palo-alto-root/" &gt;Hunt.io&amp;rsquo;s look at the tooling&lt;/a&gt; finds php2shell mostly crashing on the open web, with PAN-OS as the exception.&lt;/p&gt;</description></item><item><title>CVE-2026-110264 - Unauthenticated GitLab RCE via a crafted .org file</title><link>https://xn--kemetmller-feb.com/blog/cve-2026-110264/</link><pubDate>Thu, 22 Oct 2026 21:30:00 +0200</pubDate><guid>https://xn--kemetmller-feb.com/blog/cve-2026-110264/</guid><description>&lt;p&gt;&lt;a href="https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-5-1-released/" target="_blank" rel="noreferrer"&gt;GitLab&amp;rsquo;s October 21 patch release&lt;/a&gt; fixes &lt;a href="https://db.gcve.eu/vuln/CVE-2026-110264" target="_blank" rel="noreferrer"&gt;CVE-2026-110264&lt;/a&gt;: rendering a crafted &lt;code&gt;.org&lt;/code&gt; file lets an unauthenticated attacker run code on the server, CVSS 10.0.&#10;&lt;a href="https://lilting.ch/en/articles/gitlab-cve-2026-110264-org-mode-rce" target="_blank" rel="noreferrer"&gt;Ikesan&amp;rsquo;s analysis&lt;/a&gt; traces it to Onigmo, Ruby&amp;rsquo;s regex engine.&#10;The &lt;code&gt;#+TODO:&lt;/code&gt; keywords of an Org mode file go unescaped into &lt;code&gt;Regexp.new&lt;/code&gt;, and an integer overflow while compiling that pattern ends with commands running as the &lt;code&gt;git&lt;/code&gt; user.&#10;Every self-managed CE/EE release since 7.0 is affected; GitLab.com and Dedicated are already patched.&lt;/p&gt;&#10;&lt;p&gt;The fixed versions are 19.5.1, 19.4.3, 19.3.6, 19.2.9, 19.1.9, 19.0.10 and 18.11.13.&#10;18.10 and older get no fix, so those instances have to follow the upgrade path to 18.11.13 or later.&#10;If you just installed the October 12 releases (19.4.2, 19.3.5, 19.2.8), congratulations, you get to do it again.&#10;The bug is the third GitLab regex find from joaxcar via HackerOne, and GCVE already links a proof-of-concept repository, so this one shouldn&amp;rsquo;t wait for the next maintenance window.&lt;/p&gt;</description></item><item><title>Offensive Security Web Expert</title><link>https://xn--kemetmller-feb.com/blog/offensive-security-web-expert/</link><pubDate>Tue, 14 Jul 2020 15:55:18 +0200</pubDate><guid>https://xn--kemetmller-feb.com/blog/offensive-security-web-expert/</guid><description>&lt;div&#10; &#10; class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"&#10; &#10; &gt;&#10; &lt;span&#10; &#10; class="text-primary-400 pe-3 flex items-center"&#10; &#10; &gt;&#10; &lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/&gt;&lt;/svg&gt;&#10;&lt;/span&gt;&#10; &lt;/span&gt;&#10;&#10; &lt;span&#10; &#10; class="dark:text-neutral-300"&#10; &#10; &gt;&lt;strong&gt;Note:&lt;/strong&gt; OSWE is one of three certifications required for OSCE3 (along with OSED and OSEP), which replaced the original OSCE in 2020.&lt;/span&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;I passed the Offensive Security Web Expert exam in July 2020.&#10;Now, I would like to share my thoughts.&lt;/p&gt;</description></item><item><title>SANS Holiday Hack Challenge 2017 Solution</title><link>https://xn--kemetmller-feb.com/blog/sans-holiday-hack-challenge-2017-solution/</link><pubDate>Mon, 01 Jan 2018 01:23:27 +0000</pubDate><guid>https://xn--kemetmller-feb.com/blog/sans-holiday-hack-challenge-2017-solution/</guid><description>&lt;p&gt;Letters to Santa app contains a reference to a development system in a HTML comment section.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- Development version --&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://dev.northpolechristmastown.com&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;display: none;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Access Development Version&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&#10;&#10;&lt;p&gt;The development interface is based on Apache struts.&#10;The utilized version is vulnerable to CVE 2017-9805.&#10;A respective script can be found on &lt;a href="https://github.com/chrisjd20/cve-2017-9805.py/blob/master/cve-2017-9805.py" target="_blank" rel="noreferrer"&gt;github&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>The 2015 SANS Holiday Hack Challenge - Solution</title><link>https://xn--kemetmller-feb.com/blog/the-2015-sans-holiday-hack-challenge-solution/</link><pubDate>Tue, 05 Jan 2016 01:23:27 +0000</pubDate><guid>https://xn--kemetmller-feb.com/blog/the-2015-sans-holiday-hack-challenge-solution/</guid><description>&lt;ol&gt;&#10;&lt;li&gt;Which commands are sent across the Gnome’s command-and-control channel?&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;EXEC:iwconfig&lt;/code&gt; in packet 363&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;EXEC:cat /tmp/iwlistscan.txt&lt;/code&gt; in packet 573&lt;/li&gt;&#10;&lt;li&gt;What image appears in the photo the Gnome sent across the channel from the Dosis home?&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;A tidy children&amp;rsquo;s room is depicted in the photo. The photo includes something like legs that are probably attached to the camera. At the bottom is a label with &amp;ldquo;GnomeNet-NorthAmerica&amp;rdquo;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="3"&gt;&#10;&lt;li&gt;What operating system and CPU type are used in the Gnome? What type of web framework is the Gnome web interface built in?&lt;/li&gt;&#10;&lt;li&gt;OpenWRT (r47650) on ARM&lt;/li&gt;&#10;&lt;li&gt;NodeJS with Mongodb&lt;/li&gt;&#10;&lt;li&gt;What kind of a database engine is used to support the Gnome web interface? What is the plaintext password stored in the Gnome database?&lt;/li&gt;&#10;&lt;li&gt;MongoDB&lt;/li&gt;&#10;&lt;li&gt;The following credentials are stored in the firmware image&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;admin&lt;/code&gt; : &lt;code&gt;SittingOnAShelf&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;user&lt;/code&gt; : &lt;code&gt;user&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;What are the IP addresses of the five SuperGnomes scattered around the world, as verified by Tom Hessman in the Dosis neighborhood?&lt;/li&gt;&#10;&lt;li&gt;SG-01 52.2.229.189 (United States, Ashburn)&lt;/li&gt;&#10;&lt;li&gt;SG-02 52.34.3.80 (United States, Boardman)&lt;/li&gt;&#10;&lt;li&gt;SG-03 52.64.191.71 (Australia, Sydney)&lt;/li&gt;&#10;&lt;li&gt;SG-04 52.192.152.132 (Japan, Tokyo)&lt;/li&gt;&#10;&lt;li&gt;SG-05 54.233.105.81 (Brazil)&lt;/li&gt;&#10;&lt;li&gt;Where is each SuperGnome located geographically?&lt;/li&gt;&#10;&lt;li&gt;Describe the vulnerabilities you discovered in the Gnome firmware.&lt;/li&gt;&#10;&lt;li&gt;Storage of clear text passwords in the MongoDB database.&lt;/li&gt;&#10;&lt;li&gt;Local file inclusion via directory traversal in &lt;code&gt;routes/index.js:195&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The code checks whether the requested file path contains a &amp;ldquo;.png&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;The file upload can be utilized to create a temporary folder with a suitable name.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="3"&gt;&#10;&lt;li&gt;Possible NoSQL injection for the login post in &lt;code&gt;routes/index.js:109&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Might not possible as &amp;ldquo;extended = false&amp;rdquo; for the firmware as described in &lt;a href="https://stackoverflow.com/questions/24330014/bodyparser-is-deprecated-express-4#comment-49638474" target="_blank" rel="noreferrer"&gt;bodyParser is deprecated express 4&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="4"&gt;&#10;&lt;li&gt;Possible server side javascript injection for file upload in &lt;code&gt;routes/index.js:166&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The user provided parameter: &lt;code&gt;posproc&lt;/code&gt; is utilized in an unsanatized &lt;code&gt;eval()&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="5"&gt;&#10;&lt;li&gt;Stack based buffer overflow in sgnet_readn that is utilized in &lt;code&gt;sgstatd.c:147:&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The stack canary is static and can easily be repaired.&lt;/li&gt;&#10;&lt;li&gt;The stack canary includes a &lt;code&gt;JMP ESP&lt;/code&gt; as a partial command. This assembly instruction is crucial for exploitation.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="8"&gt;&#10;&lt;li&gt;Describe the technique you used to gain access to each SuperGnome’s gnome.conf file.&lt;/li&gt;&#10;&lt;li&gt;SG-01: Administrative credentials from the firmware image provided full access.&lt;/li&gt;&#10;&lt;li&gt;SG-02: A path traversal vulnerability allowed to download arbitrary files in the context of a standard user.&lt;/li&gt;&#10;&lt;li&gt;SG-03: A NoSQL injection in the login form was exploited in order to login as admin user.&lt;/li&gt;&#10;&lt;li&gt;SG-04: The system was compromised via server side javascript injection in NodeJS.&lt;/li&gt;&#10;&lt;li&gt;SG-05: Weaponize remote exploit for sgstadt (4242/tcp) in order to a reverse shell.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10;&#10;&lt;p&gt;The packet capture includes mostly traffic on port 53/udp.&#10;A client system at 52.2.229.189 is querying the dns server at 10.42.0.18 for a TXT record.&#10;In packet 363 the server responds with a base64 encoded string &lt;code&gt;EXEC:iwconfig&lt;/code&gt;.&#10;Subsequently, the client starts sending TXT responses with base64 encoded data to the server.&#10;The response starts with a start marker &lt;code&gt;EXEC:START_STATE&lt;/code&gt;.&#10;The end of the exec output is marked by an encoded &lt;code&gt;EXEC:STOP&lt;/code&gt;.&#10;In packet 573 another command is scheduled by the server: &lt;code&gt;EXEC:cat /tmp/iwlistscan.txt&lt;/code&gt;.&#10;Finally, in packet 875 the server requests a file with &lt;code&gt;FILE:/root/Pictures/snapshot_CURRENT.jpg&lt;/code&gt;.&lt;/p&gt;</description></item></channel></rss>