<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Skelmis</title>
    <link>https://skelmis.co.nz/posts/</link>
    <description>Recent content in Posts on Skelmis</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Sun, 15 Mar 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://skelmis.co.nz/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Concurrency Is Hard (Sometimes)</title>
      <link>https://skelmis.co.nz/posts/concurrency-is-hard/</link>
      <pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/concurrency-is-hard/</guid>
      <description>Scaling software is often thought of as hard problem, yet it is one of the bits of software development I enjoy the most. It provides access to some niche bugs that aren&amp;rsquo;t simply &amp;lsquo;You forgot to add a ; to the end of the line&amp;rsquo; but rather provide scenarios such as &amp;lsquo;What happens when N people attempt to use Y at exactly the same time? Are all requests served by the server?</description>
    </item>
    <item>
      <title>C# Path&#39;ing May Not Work As You Expect</title>
      <link>https://skelmis.co.nz/posts/c_sharp-pathing/</link>
      <pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/c_sharp-pathing/</guid>
      <description>Background Link to heading During a security review this year I stumbled across some C# that at a glance looked fine. Turns out however it actually contained path traversal which was by design (of the language). After asking some of my friends who are familiar with C# they also went &amp;lsquo;huh thats weird&amp;rsquo; so I figured I&amp;rsquo;d make this and share with you all.&#xA;TLDR Link to heading If you are reviewing C# and come across Path.</description>
    </item>
    <item>
      <title>CVE-2024-41808 - Unauthenticated log injection to account takeover</title>
      <link>https://skelmis.co.nz/posts/cve-2024-41808/</link>
      <pubDate>Mon, 05 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/cve-2024-41808/</guid>
      <description>This is a cross post from a research group blog post I made which can be found here&#xA;OpenObserve vulnerability chain Link to heading TL;DR - OpenObserve deployments using version 0.9.1 or lower are vulnerable to the following privilege escalation chain:&#xA;A malicious user submits logs via a service which sends logs to an OpenObserve instance. These logs contain malicious content. A site user attempts to create a dashboard, using the logging field containing malicious input.</description>
    </item>
    <item>
      <title>PNG to RCE: Faking files to bypass server side validation</title>
      <link>https://skelmis.co.nz/posts/file-faking/</link>
      <pubDate>Sat, 20 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/file-faking/</guid>
      <description>Recently during some personal research I came across a very interesting avenue for remote code execution (RCE). The program let you provide one argument to the command line before appending some flags after. Now it wasn&amp;rsquo;t &amp;ldquo;one&amp;rdquo; escapable argument, but was actually only one argument much to my disappointment.&#xA;Due to this, we are unlikely to LOLBIN our way out of the situation. So instead, let&amp;rsquo;s talk about a tale of bypassing theoretical file validation within some file upload and how to convince Linux to then run arbitrary code via said file when the rough following command is typed into a shell!</description>
    </item>
    <item>
      <title>CVE-2024-37893 - MFA bypass in OAuth flow may lead to compromise of Firefly III data</title>
      <link>https://skelmis.co.nz/posts/cve-2024-37893/</link>
      <pubDate>Tue, 18 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/cve-2024-37893/</guid>
      <description>TL;DR - Even with MFA enabled on firefly III versions v6.1.16 and lower, an attacker is able to authorize OAuth applications against user accounts using only a username and password.&#xA;Advisory can be found here.&#xA;Firefly III is a personal finance manager which is both free and open source for anyone to use. After a recommendation from a colleague, I decided to spin up a version for myself.&#xA;I configured my Firefly account with a strong password + MFA.</description>
    </item>
    <item>
      <title>Discord bot sharding &amp; clustering</title>
      <link>https://skelmis.co.nz/posts/discord-bot-sharding-and-clustering/</link>
      <pubDate>Thu, 28 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/discord-bot-sharding-and-clustering/</guid>
      <description>Table of contents What is sharding Sharding in Python libraries What is clustering How to cluster your bot Note: This content relates directly to the experiences of the author. You should tailor your solution to your bots needs as at this scale, everyone has different requirements.&#xA;What is sharding Link to heading Sharding is the process by which Discord helps to alleviate load by forcing your bot to create multiple connections to Discord to split the load.</description>
    </item>
    <item>
      <title>How we almost ruined Christmas (and lost 1.95 million database records)</title>
      <link>https://skelmis.co.nz/posts/suggestions-server-december-outage/</link>
      <pubDate>Sun, 24 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/suggestions-server-december-outage/</guid>
      <description>TLDR; We had moved our database onto the same machine as our software a few months earlier, removing all replication in the process and never re-configuring it. Then our server proceeded to brick itself and our hosting provider was unsure if it could be recovered. It was in the end, but that&amp;rsquo;s how we nearly lost 1.95 million database records and ruined Christmas. And yes, you bet we have off-site backups again.</description>
    </item>
    <item>
      <title>Fun with USB rubber duckies</title>
      <link>https://skelmis.co.nz/posts/rubber-duckys/</link>
      <pubDate>Fri, 06 Oct 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/rubber-duckys/</guid>
      <description>After attending BSides Canberra I managed to get one of the DigiSparks from Redacted who offered them up as a sort of home brew USB rubber ducky. Kudos to Tomais for actually getting me one.&#xA;The DigiSpark for reference:&#xA;Naturally I wanted to have some fun with it, and being primarily a linux user I developed the payload with that in mind. It took a fair amount of trial and error, but I ended up with a payload that was able to pull a script from this site, download it and execute.</description>
    </item>
    <item>
      <title>A short dive into Fire and Emergency NZ&#39;s callout rates</title>
      <link>https://skelmis.co.nz/posts/fenz-analysis/</link>
      <pubDate>Tue, 19 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/fenz-analysis/</guid>
      <description>Did you know Fire and Emergency New Zealand (FENZ) publish incident reports? Well they do, and you can read them here. Naturally, the software developer and &amp;ldquo;Oooo pretty graph&amp;rdquo; in me decided I wanted to look at the data, and so I created a little tool for myself to gather some information to build this post.&#xA;Disclaimer&#xA;Caveat for this data and my inferences: the data supplied is an extract from the ICAD reporting system maintained by Fire and Emergency New Zealand.</description>
    </item>
    <item>
      <title>CVE-2023-41885 - Piccolo time based user enumeration</title>
      <link>https://skelmis.co.nz/posts/cve-2023-41885/</link>
      <pubDate>Mon, 18 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/cve-2023-41885/</guid>
      <description>It started as &amp;ldquo;bring password hashing inline with industry best practices&amp;rdquo; and two weeks later ended as &amp;ldquo;BaseUser.login implementation is vulnerable to time based user enumeration&amp;rdquo;. So here&amp;rsquo;s how a PR to bring a package inline with security best practices lead to a CVE.&#xA;Recently I moved, and am still in the processing of moving my websites to an ORM called Piccolo which provides a nice database layer, batteries included approach to working with FastAPI while allowing me; a former Django developer; the ability to easily build data driven platforms without the need to write SQL.</description>
    </item>
    <item>
      <title>Lets talk time based user enumeration</title>
      <link>https://skelmis.co.nz/posts/tbue/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/tbue/</guid>
      <description>I discovered some time based user enumeration in the wild with some pretty nice implications, so let&amp;rsquo;s discuss them.&#xA;So firstly, what is time based user enumeration or tbue as I will refer to it for the rest of this post?&#xA;Essentially tbue occurs in sites which do not return constant time responses regardless of if an account exists or not. You can think of it roughly speaking as the following code block:</description>
    </item>
    <item>
      <title>My adventures building a passwordless platform - Part 1</title>
      <link>https://skelmis.co.nz/posts/passwordless-platform-1/</link>
      <pubDate>Mon, 19 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/passwordless-platform-1/</guid>
      <description>This project and by extension article are an on-going piece of work.&#xA;Firstly, lets define some things.&#xA;When I say site I mean a website with RBAC and user sign up, however, there should be no requirement for a password. This will hopefully be achieved through a phone which combines &amp;lsquo;something you have&amp;rsquo; (The phone) and &amp;lsquo;something you know&amp;rsquo; (Your phone creds).&#xA;So I want to make a site that allows for user sign up, but you don&amp;rsquo;t need a password essentially.</description>
    </item>
    <item>
      <title>NZCSC 2023 Writeups</title>
      <link>https://skelmis.co.nz/posts/nzcsc-2023/</link>
      <pubDate>Mon, 12 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/nzcsc-2023/</guid>
      <description>NZCSC tends to repeat challenges or at-least the themes of challenges yearly yet there is a distinct lack of resources such as write-ups from previous years. This aims to solve that while also just being a nice reference for things.&#xA;&amp;ldquo;The S in NZCSC stands for stego&amp;rdquo;&#xA;HexF The following write-ups are either nice, concise paths to the solution I&amp;rsquo;ve improved in post to remove extra fluff or the path I took to actually solve them including dead ends.</description>
    </item>
    <item>
      <title>My new site</title>
      <link>https://skelmis.co.nz/posts/new-site/</link>
      <pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/new-site/</guid>
      <description>After having my old site for nearly four years and various other readthedocs hosted sites for documentation, I have finally decided to condense it down into one site and Hugo was the perfect choice. I love markdown. I love not having to write CSS. This was perfect.&#xA;This should be the new home of all my static content going forward.</description>
    </item>
  </channel>
</rss>
