<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>m4.rkw.io</title>
    <link href="https://m4.rkw.io/blog/rss" rel="self"/>
    <link href="https://m4.rkw.io/blog.html"/>
    <updated>2026-05-10T20:19:00Z</updated>
    <author><name>m4rkw</name></author>
    
    <entry>
        <title>l0destar</title>
        <link href="https://m4.rkw.io/blog/l0destar.html"/>
        <updated>2026-05-10T20:19:00Z</updated>
        <summary type="html">&lt;p&gt;I have begun a project to create the world&#39;s best open-source vehicle tracker.&lt;/p&gt;
&lt;p&gt;Read about it here: &lt;a href=&#34;https://l0destar.com&#34;&gt;https://l0destar.com&lt;/a&gt;&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>GL.iNet GL-RM1 Comet KVM over IP</title>
        <link href="https://m4.rkw.io/blog/glinet-glrm1-comet-kvm-over-ip.html"/>
        <updated>2026-04-20T18:39:38Z</updated>
        <summary type="html">&lt;p&gt;I bought one of these recently at the suggestion of Casey Liss of &lt;a href=&#34;https://atp.fm&#34;&gt;atp.fm&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Firstly I will say it&#39;s a great device, very useful and has native Tailscale
support. I got the non-PoE version which is slightly different to the one that
was recommended on ATP but it&#39;s nonetheless very good.&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>Refreshing: a workaround to fix kernel panics on macOS with refresh rates higher than 120Hz</title>
        <link href="https://m4.rkw.io/blog/refreshing-a-workaround-to-fix-kernel-panics-on-macos-with-refresh-rates-higher-than-120hz.html"/>
        <updated>2026-03-05T18:21:21Z</updated>
        <summary type="html">&lt;h1&gt;Refreshing&lt;/h1&gt;
&lt;p&gt;A macOS menu bar app that prevents kernel panics (DCPEXT PANIC) on Apple Silicon Macs with external monitors running above 120Hz.&lt;/p&gt;
&lt;h2&gt;The Problem&lt;/h2&gt;</summary>
    </entry>
    
    <entry>
        <title>MacOS Tahoe rounded corner fix</title>
        <link href="https://m4.rkw.io/blog/macos-tahoe-rounded-corner-fix.html"/>
        <updated>2026-02-21T20:26:04Z</updated>
        <summary type="html">&lt;p&gt;I couldn&#39;t cope with those corners anymore. This requires disabling SIP but it makes the
corners like Sequoia system-wide. I don&#39;t like to disable SIP but those corners
hurt my eyes too much. Enough is enough. This uses DYLD injection to patch the
NSThemeFrame methods that determine the corner radius.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/m4rkw/macos-corner-fix&#34;&gt;https://github.com/m4rkw/macos-corner-fix&lt;/a&gt;&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>made my own night mode</title>
        <link href="https://m4.rkw.io/blog/made-my-own-night-mode.html"/>
        <updated>2026-02-09T20:13:26Z</updated>
        <summary type="html">&lt;p&gt;It seemed a shame that the night mode on the latest WatchOS was so good yet
we&#39;re stuck with the same display in sleep mode. So I made my own focus mode,
used Shortcuts automations to make it activate with the sleep schedule and made
a custom watch face in night mode.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image&#34; src=&#34;/static/img/IMG_2840.png&#34; /&gt;&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>Remotely executing shortcuts on iOS</title>
        <link href="https://m4.rkw.io/blog/remotely-executing-shortcuts-on-ios.html"/>
        <updated>2026-02-06T19:21:54Z</updated>
        <summary type="html">&lt;p&gt;This isn&#39;t an exploit, I just wanted to be able to execute a shortcut on iOS via
a remote trigger. Specifically I wanted to dynamically change the complications
on my Apple watch depending on context, for example if I have calendar events
later today then show the calendar as a complication but if I don&#39;t then show
something else.&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>Stateful workout shortcut</title>
        <link href="https://m4.rkw.io/blog/stateful-workout-shortcut.html"/>
        <updated>2026-01-17T20:52:37Z</updated>
        <summary type="html">&lt;p&gt;I made a stateful shortcut for the Apple Watch Ultra action button: &lt;a href=&#34;https://www.icloud.com/shortcuts/c5380ba837db4e4599feb77e5bb73734&#34;&gt;Stateful Workout Shortcut&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It starts an outdoor walk workout and then enables the water lock to avoid humidity from my clothing causing unexpected inputs. Press the action button again and it stops the workout and disables the water lock.&lt;/p&gt;
&lt;p&gt;Not sure why the action button works while water locked but it&#39;s very handy, I hope they don&#39;t change that.&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>How to run Tailscale on AWS Lambda</title>
        <link href="https://m4.rkw.io/blog/how-to-run-tailscale-on-aws-lambda.html"/>
        <updated>2025-06-24T18:41:31Z</updated>
        <summary type="html">&lt;p&gt;Just in case anyone thought I was joking about running Tailscale on AWS Lambda, this is how: &lt;a href=&#34;https://github.com/m4rkw/aws-lambda-python312-tailscale&#34;&gt;aws-lambda-python312-tailscale&lt;/a&gt;&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>Tailscale ephemeral nodes as the ultimate MMORPG superweapon</title>
        <link href="https://m4.rkw.io/blog/tailscale-ephemeral-nodes-as-the-ultimate-mmorpg-superweapon.html"/>
        <updated>2025-06-22T12:46:42Z</updated>
        <summary type="html">&lt;p&gt;People often talk about Tailscale but don&#39;t seem to mention its ephemeral nodes and their awesome power as an MMORPG weapon so I thought I&#39;d address that. There are many MMORPGs but my all-time favourite is AWS which I play as an extremely stingy but also quite rich and entitled hacker. This character choice works well within the game dynamic as the object of the game is obviously to run your workload for as little financial outlay as possible.&lt;/p&gt;
&lt;p&gt;The bog standard default way of running things on AWS is to use EC2, but one glance at the in-game pricing for this will make you quickly realise this is not a viable way to win. Managed services can sometimes be a good cost-effective alternative, but for those of us playing super stingy characters who just want their personal stuff to run for as close to free as possible, these too are usually unviable options. Serverless is therefore where the real action is at and how you can truly win at this game.&lt;/p&gt;
&lt;p&gt;It&#39;s not without its limitations though and there are many crafty ways the game monetises its side channels and ancillary services in order to extract profit from the player. Take for example AWS Lambda, on the surface for smaller workloads this can be close to essentially free compute. That only works until you need a state store though, and depending on what you&#39;re doing pay-as-you-go DynamoDB can quickly add up to unacceptable costs. My in-game bill was recently creeping over the $5/month mark so I decided to have a think about my strategy and see if I could level up by levelling down my bill. The observant reader might wonder if hours of my time are really worth the potential cost savings here, all I can say is that some people will just never understand gaming.&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>How to run Tailscale on a Synology rt6600ax router</title>
        <link href="https://m4.rkw.io/blog/how-to-run-tailscale-on-a-synology-rt6600ax-router.html"/>
        <updated>2025-02-25T09:00:48Z</updated>
        <summary type="html">&lt;p&gt;Steps for installing Tailscale on a Synology rt6600ax. The same steps will probably work on the 2600 but I haven&#39;t tried it.&lt;/p&gt;
&lt;p&gt;1) SSH to the router as root&lt;/p&gt;
&lt;p&gt;2) Retrieve the package for DSM7 / ARMv8:&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>Synology SRM 1.3.1, a thoughtful review of the latest software release</title>
        <link href="https://m4.rkw.io/blog/synology-srm-131-a-thoughtful-review-of-the-latest-software-release.html"/>
        <updated>2025-02-05T00:00:00Z</updated>
        <summary type="html">&lt;p&gt;&lt;em&gt;Originally posted on the &lt;a href=&#34;https://community.synology.com/enu/forum/2/post/194952&#34;&gt;Synology Community forum&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It&#39;s great to see the new SRM release - 1.3.1 - has recently dropped. Although a minor update, apparently adding only optimisations to the network connectivity check mechanism, this is a testament to the stability and resiliency of the SRM software in that dramatic changes are no longer required in order for their products to continue to operate well.&lt;/p&gt;
&lt;p&gt;Those of us with Synology routers may cast our minds back to the late summer of 2022 when SRM 1.3.1 was released, adding much-wanted VLAN support for the older devices including the RT2600ac router. This update was unfortunately slightly problematic, resulting in an additional update - 1.3.1 - being pushed out on the same day.&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>How to auto-refresh LetsEncrypt certificate on Synology routers</title>
        <link href="https://m4.rkw.io/blog/how-to-autorefresh-letsencrypt-certificate-on-synology-routers.html"/>
        <updated>2024-06-21T09:08:20Z</updated>
        <summary type="html">&lt;p&gt;I&#39;ve been manually monitoring and renewing it like a chump. Turns out it&#39;s trivially easy to automate the renewal:&lt;/p&gt;
&lt;p&gt;````
curl https://gist.githubusercontent.com/m4rkw/6c9b65dcd4914e1aa03188d2b5d5c5b8/raw/09632a5be4dddf029916367dd9fa463cd3d3b9ae/gistfile1.txt -o /usr/local/bin/renew_cert.py&lt;/p&gt;
&lt;p&gt;chmod 755 /usr/local/bin/renew_cert.py&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>Sim swap defence</title>
        <link href="https://m4.rkw.io/blog/sim-swap-defence.html"/>
        <updated>2024-03-16T00:00:00Z</updated>
        <summary type="html">&lt;p&gt;Several organisations still support SMS for OTP, often making it mandatory, and
even when it isn&#39;t mandatory as the primary 2FA method it&#39;s often still enabled
as a fallback, leaving you vulnerable. An attacker will always take the easiest
path, you may have a passkey set up or even a hardware fido token but if it&#39;s
possible to revert to sms-based OTP then you&#39;re just as vulnerable to a sim-swap
as you would be without these extra tokens.&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>Defending against iCloud takeover if your phone is stolen</title>
        <link href="https://m4.rkw.io/blog/defending-against-icloud-takeover-if-your-phone-is-stolen.html"/>
        <updated>2023-10-24T21:02:00Z</updated>
        <summary type="html">&lt;p&gt;Another security issue that&#39;s been rising in recent years is the advent of organised criminals shoulder-surfing iPhone passcodes in order to then later steal the phone and take over the iCloud account.&lt;/p&gt;
&lt;p&gt;Unfortunate victims are then locked out of their account forever, losing precious iCloud data such as photos of their kids.&lt;/p&gt;
&lt;p&gt;There are some steps you can take to protect yourself, such as using a longer/more complex passcode and being very careful where you type it to ensure nobody can see over your shoulder.&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>Defending against sim swap attacks</title>
        <link href="https://m4.rkw.io/blog/defending-against-sim-swap-attacks.html"/>
        <updated>2023-10-24T20:46:00Z</updated>
        <summary type="html">&lt;p&gt;Although for most people it&#39;s pretty unlikely, the thought of getting sim-swapped is pretty scary.&lt;/p&gt;
&lt;p&gt;This is where an attacker manages to convince your mobile carrier to transfer your number to a new sim card that they control. When this happens your original sim card will lose service and they will obtain your number - and any SMS OTP codes it&#39;s configured to receive.&lt;/p&gt;
&lt;p&gt;Unfortunately despite many improvements in online security there are still several providers who either rely on SMS OTP or make it a mandatory fallback option if your primary OTP mechanism doesn&#39;t work. You&#39;re only secure as the weakest link and nothing will stop an attacker from using the fallback mechanisms if they can&#39;t bypass your primary one.&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>Bye bye ProtonMail</title>
        <link href="https://m4.rkw.io/blog/bye-bye-protonmail.html"/>
        <updated>2022-06-08T21:10:00Z</updated>
        <summary type="html">&lt;p&gt;I recently blogged about my ProtonMail issues, the weird glitches with their bridge IMAP interface and their apparent lack of care that it might be silently deleting customer data - &lt;a href=&#34;https://github.com/ProtonMail/proton-bridge/issues/220&#34;&gt;proton-bridge issue #220&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I have now finally gotten around to kicking ProtonMail out of my life and I could not be happier. Gone are the days of having to run some janky Go software just to get an unstable IMAP interface. Gone are randomly changing message UIDs invalidating backups. Gone is the totally batshit way that messages can become orphaned from any folder and not show up anywhere other than &#34;All Mail&#34;.&lt;/p&gt;
&lt;p&gt;Suddenly I have normal IMAP that works, it even works on iOS (!) and in the webmail I can operate on more than 50 messages at once. I can in fact perform a quick operation on the entire resultset of a search. Try doing that in Proton&#39;s webmail. I have lost hours of my life to messing around just try to carry out basic operations on their platform and I&#39;m so glad to be rid of it.&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>PSA: your ProtonMail backups might not be safe</title>
        <link href="https://m4.rkw.io/blog/psa-your-protonmail-backups-might-not-be-safe.html"/>
        <updated>2022-06-05T12:16:00Z</updated>
        <summary type="html">&lt;p&gt;I was a fan of the ProtonMail email service until I was casually linked to this issue while discussing something else:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/ProtonMail/proton-bridge/issues/220&#34;&gt;proton-bridge issue #220&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;TL;DR message UIDs returned by proton-bridge are unstable and subject to change &lt;em&gt;without&lt;/em&gt; UIDVALIDITY changing. This is not only bad because it violates the RFC but also because it can lead to data loss in at least a couple of scenarios:&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>LuLu firewall hardening</title>
        <link href="https://m4.rkw.io/blog/lulu-firewall-hardening.html"/>
        <updated>2022-02-26T21:21:00Z</updated>
        <summary type="html">&lt;p&gt;I&#39;m a big fan of Patrick Wardle&#39;s free mac utilities but I noticed something odd about LuLu recently. It seems that it only filters egress traffic when LuLu.app is running. Since it normally runs as the local user rather than root, this makes it somewhat trivial for malware to defeat as it can simply kill the process and then connect to whatever it wants.&lt;/p&gt;
&lt;p&gt;This can be mitigated by running the app as root, but since it&#39;s not installed root-owned the first thing to do is change that:&lt;/p&gt;
&lt;p&gt;```
$ sudo chown -R root:wheel /Applications/LuLu.app/&lt;/p&gt;</summary>
    </entry>
    
    <entry>
        <title>Linux server hardening guide</title>
        <link href="https://m4.rkw.io/blog/linux-server-hardening-guide.html"/>
        <updated>2022-02-23T00:00:00Z</updated>
        <summary type="html">&lt;p&gt;After working for some time as an engineer at a very security-obsessed company I decided it would be a good exercise to note down and organise all the things I&#39;ve learned both at work and in my spare time related to Linux server security. This guide will focus on Linux in a server context but many of the ideas here are applicable to other systems.&lt;/p&gt;
&lt;p&gt;The full guide is also available on GitHub: &lt;a href=&#34;https://github.com/m4rkw/linux-server-hardening-guide&#34;&gt;linux-server-hardening-guide&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Guiding principles&lt;/h2&gt;</summary>
    </entry>
    
    <entry>
        <title>TouchID over SSH part 2 - Secretive agent</title>
        <link href="https://m4.rkw.io/blog/touchid-over-ssh-part-2-secretive-agent.html"/>
        <updated>2022-02-19T13:46:00Z</updated>
        <summary type="html">&lt;p&gt;For some time I&#39;ve been using a hand-rolled solution for touchID over ssh which I previously blogged about. Up until recently it&#39;s been a somewhat loosely-compiled scattering of config that wasn&#39;t really in a releasable form but with a pending security talk on the horizon I thought it would be worth tidying it up and making it releasable so I could mention it in my talk.&lt;/p&gt;
&lt;p&gt;That code can be found here: &lt;a href=&#34;https://github.com/m4rkw/touchid-remote&#34;&gt;touchid-remote&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;However when I was compiling it I was under the impression that one of the tools it relies on - touch2sudo - was merely a standalone binary for authenticating sudo commands locally. I didn&#39;t realise that the author had also noted in the README that it&#39;s possible to use it over SSH. The solution presented there involves forwarding the local ssh agent over the SSH connection and then configuring touch2sudo as the askpass agent.&lt;/p&gt;</summary>
    </entry>
    
</feed>