<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Security on ma.ttias.be</title><link>https://ma.ttias.be/categories/security/</link><description>Recent content in Security on ma.ttias.be</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>mattias@ma.ttias.be (Mattias Geniar)</managingEditor><webMaster>mattias@ma.ttias.be (Mattias Geniar)</webMaster><lastBuildDate>Sat, 06 Jun 2026 10:00:00 +0000</lastBuildDate><atom:link href="https://ma.ttias.be/categories/security/index.xml" rel="self" type="application/rss+xml"/><item><title>The ghost domain problem in DNS, and what we're doing about it</title><link>https://ma.ttias.be/the-ghost-domain-problem-in-dns/</link><pubDate>Sat, 06 Jun 2026 10:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/the-ghost-domain-problem-in-dns/</guid><description>&lt;p&gt;I wrote a piece over on the Oh Dear blog about a failure mode that most uptime monitoring gets wrong: a domain gets pulled from its registry&amp;rsquo;s zone, but its authoritative nameservers keep answering, and cached resolvers happily serve the stale delegation for days. Your monitoring says green. The domain is gone.&lt;/p&gt;</description></item><item><title>Running HTTP/3 with Caddy in 2026: it just works</title><link>https://ma.ttias.be/running-http3-with-caddy-2026/</link><pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/running-http3-with-caddy-2026/</guid><description>&lt;p&gt;When I &lt;a href="https://ma.ttias.be/how-run-http-3-with-caddy-2/"&gt;wrote about running HTTP/3 with Caddy in 2020&lt;/a&gt;
, it was a ritual. You opted in with an &lt;code&gt;experimental_http3&lt;/code&gt; global option, the protocol was still draft &lt;code&gt;h3-27&lt;/code&gt;, and to test it you needed a custom-compiled curl and a browser nightly with the right flags flipped. It worked, but it was clearly the bleeding edge.&lt;/p&gt;</description></item><item><title>QUIC and HTTP/3 in 2026: from Google experiment to IETF standard</title><link>https://ma.ttias.be/quic-http3-in-2026/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/quic-http3-in-2026/</guid><description>&lt;p&gt;Ten years ago I wrote about &lt;a href="https://ma.ttias.be/googles-quic-protocol-moving-web-tcp-udp/"&gt;Google&amp;rsquo;s QUIC protocol&lt;/a&gt;
, back when it was an experiment you could realistically only test against Google&amp;rsquo;s own servers. I was excited about it, and I ended that post hoping the spec would get standardised and show up in other browsers and servers.&lt;/p&gt;</description></item><item><title>Caching get_certificate lookups in Caddy</title><link>https://ma.ttias.be/caching-get-certificate-lookups-in-caddy/</link><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/caching-get-certificate-lookups-in-caddy/</guid><description>&lt;p&gt;At &lt;a href="https://ohdear.app" target="_blank" rel="noopener noreferrer"&gt;Oh Dear&lt;/a&gt;
, our &lt;a href="https://ohdear.app/features/status-pages" target="_blank" rel="noopener noreferrer"&gt;status pages&lt;/a&gt;
can run on a customer&amp;rsquo;s own domain, and we&amp;rsquo;ve always served on-demand ACME certificates for them: someone points their domain at us, and &lt;a href="https://caddyserver.com" target="_blank" rel="noopener noreferrer"&gt;Caddy&lt;/a&gt;
provisions a Let&amp;rsquo;s Encrypt certificate for it automatically. We&amp;rsquo;re now adding a second option, letting customers bring their &lt;em&gt;own&lt;/em&gt; certificate. For that, Caddy doesn&amp;rsquo;t provision anything; it fetches the certificate from an HTTP backend in our app.&lt;/p&gt;</description></item><item><title>Could not find directory of OpenSSL installation</title><link>https://ma.ttias.be/could-not-find-directory-of-openssl-installation/</link><pubDate>Mon, 23 Nov 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/could-not-find-directory-of-openssl-installation/</guid><description>&lt;p&gt;Ran into this error when compiling some software from source:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Could not find directory of OpenSSL installation, and this `-sys` crate cannot
proceed without this knowledge. If OpenSSL is installed and this crate had
trouble finding it, you can set the `OPENSSL_DIR` environment variable for the
compilation process.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The fix is, luckily, rather easy.&lt;/p&gt;</description></item><item><title>OpenSSL pkg-config not found</title><link>https://ma.ttias.be/openssl-pkg-config-not-found/</link><pubDate>Mon, 23 Nov 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/openssl-pkg-config-not-found/</guid><description>&lt;p&gt;I found this error message when compiling some software from source:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;It looks like you&amp;#39;re compiling on Linux and also targeting Linux. Currently this
requires the `pkg-config` utility to find OpenSSL but unfortunately `pkg-config`
could not be found. If you have OpenSSL installed you can likely fix this by
installing `pkg-config`.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Luckily, it&amp;rsquo;s an easy fix!&lt;/p&gt;</description></item><item><title>What else can you stuff in a certificate chain?</title><link>https://ma.ttias.be/certificate-chain-stuffing/</link><pubDate>Mon, 25 May 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/certificate-chain-stuffing/</guid><description>&lt;p&gt;I recently learned that quite a few (old) root certificates are going to expire, and &lt;a href="https://ohdear.app/blog/resolving-the-addtrust-external-ca-root-certificate-expiration" target="_blank" rel="noopener noreferrer"&gt;many websites still send those along in the TLS handshake&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Creating a 2-of-3 multisig with raw transactions on EOSIO</title><link>https://ma.ttias.be/creating-2-of-3-multisig-raw-transactions-eos/</link><pubDate>Tue, 05 May 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/creating-2-of-3-multisig-raw-transactions-eos/</guid><description>&lt;p&gt;These instructions can be followed to create a 2-out-of-3 multisignature address on the EOS blockchain (or any derivative thereof). This means you will need at least 2 out of the 3 keyholders to sign off on a transaction before any funds can be spent.&lt;/p&gt;</description></item><item><title>Someone, somewhere, is trying to break into your app</title><link>https://ma.ttias.be/someone-somewhere-is-trying-to-break-into-your-app/</link><pubDate>Tue, 21 Apr 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/someone-somewhere-is-trying-to-break-into-your-app/</guid><description>&lt;p&gt;It&amp;rsquo;s good to be reminded of the fact that the internet is, in fact, a pretty hostile place.&lt;/p&gt;</description></item><item><title>How to run HTTP/3 with Caddy 2</title><link>https://ma.ttias.be/how-run-http-3-with-caddy-2/</link><pubDate>Fri, 10 Apr 2020 06:30:00 +0100</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/how-run-http-3-with-caddy-2/</guid><description>&lt;p&gt;I &lt;a href="https://ma.ttias.be/migrating-caddy-2/"&gt;just migrated this webserver to Caddy 2&lt;/a&gt;
and with it, enabled HTTP/3 support. This post will give a short explanation how you can do that.&lt;/p&gt;</description></item><item><title>Migrating to Caddy 2</title><link>https://ma.ttias.be/migrating-caddy-2/</link><pubDate>Fri, 10 Apr 2020 06:00:00 +0100</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/migrating-caddy-2/</guid><description>&lt;p&gt;Last week, the &lt;a href="https://github.com/caddyserver/caddy/releases" target="_blank" rel="noopener noreferrer"&gt;first Release Candidate of Caddy 2&lt;/a&gt;
saw the light of day. I don&amp;rsquo;t usually like to run production environments on beta software, but for Caddy I wanted to make an exception&lt;/p&gt;</description></item><item><title>How to prevent content-spoofing in Apache's 404 error pages</title><link>https://ma.ttias.be/prevent-content-spoofing-apache-404-error-pages/</link><pubDate>Wed, 20 Nov 2019 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/prevent-content-spoofing-apache-404-error-pages/</guid><description>&lt;p&gt;We had an interesting security report for our &lt;a href="https://ohdear.app/" target="_blank" rel="noopener noreferrer"&gt;Oh Dear monitoring service&lt;/a&gt;
. An attacker could load a specific URL and trigger a 404 page in which &lt;em&gt;they&lt;/em&gt; controlled the output.&lt;/p&gt;</description></item><item><title>Disable HTTP sessions in Laravel to speed up your API</title><link>https://ma.ttias.be/disable-http-sessions-in-laravel-to-speed-up-your-api/</link><pubDate>Fri, 08 Nov 2019 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/disable-http-sessions-in-laravel-to-speed-up-your-api/</guid><description>&lt;p&gt;If you run a Laravel application purely as a headless API, you can benefit from disabling the HTTP sessions.&lt;/p&gt;</description></item><item><title>strace: operation not permitted, ptrace_scope incorrect</title><link>https://ma.ttias.be/strace-operation-not-permitted-ptrace_scope-incorrect/</link><pubDate>Tue, 22 Oct 2019 15:54:37 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/strace-operation-not-permitted-ptrace_scope-incorrect/</guid><description>&lt;p&gt;When using &lt;code&gt;strace&lt;/code&gt; on a server, you might get this error message when you try to attach to a running process.&lt;/p&gt;</description></item><item><title>Chrome’s next steps for security: mixed content checking more important than ever</title><link>https://ma.ttias.be/chromes-next-steps-for-security-mixed-content-checking-more-important-than-ever/</link><pubDate>Wed, 09 Oct 2019 08:59:27 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/chromes-next-steps-for-security-mixed-content-checking-more-important-than-ever/</guid><description>&lt;blockquote&gt;
&lt;p&gt;The team at Chrome has announced their plans for handling mixed content last week on their blog.&lt;/p&gt;</description></item><item><title>How we used Caddy and Laravel’s subdomain routing to serve our status pages</title><link>https://ma.ttias.be/how-we-used-caddy-and-laravels-subdomain-routing-to-serve-our-status-pages/</link><pubDate>Thu, 19 Sep 2019 10:04:17 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/how-we-used-caddy-and-laravels-subdomain-routing-to-serve-our-status-pages/</guid><description>&lt;blockquote&gt;
&lt;p&gt;We recently launched our new Status Page feature. Under the hood, it&amp;rsquo;s using the Caddy proxy server and Laravel&amp;rsquo;s subdomain routing to serve the right status page on the right domain.&lt;/p&gt;</description></item><item><title>There’s more than one way to write an IP address</title><link>https://ma.ttias.be/theres-more-than-one-way-to-write-an-ip-address/</link><pubDate>Tue, 09 Jul 2019 11:31:32 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/theres-more-than-one-way-to-write-an-ip-address/</guid><description>&lt;p&gt;Most of us write our IP addresses the way we&amp;rsquo;ve been taught, a long time ago: &lt;code&gt;127.0.0.1&lt;/code&gt;, &lt;code&gt;10.0.2.1&lt;/code&gt;, &amp;hellip; but that gets boring after a while, doesn&amp;rsquo;t it?&lt;/p&gt;</description></item><item><title>Enable the RPC JSON API with password authentication in Bitcoin Core</title><link>https://ma.ttias.be/enable-the-rpc-json-api-with-password-authentication-in-bitcoin-core/</link><pubDate>Sat, 04 May 2019 20:09:26 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/enable-the-rpc-json-api-with-password-authentication-in-bitcoin-core/</guid><description>&lt;p&gt;The bitcoin daemon has a very useful &amp;amp; easy-to-use HTTP API built-in, that allows you to talk to it like a simple webserver and get JSON responses back.&lt;/p&gt;</description></item><item><title>Requesting certificates with Let’s Encrypt’s official certbot client</title><link>https://ma.ttias.be/requesting-certificates-with-lets-encrypts-official-certbot-client/</link><pubDate>Mon, 22 Apr 2019 13:18:41 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/requesting-certificates-with-lets-encrypts-official-certbot-client/</guid><description>&lt;p&gt;There&amp;rsquo;s plenty of guides on this already, but I recently used Let&amp;rsquo;s Encrypt &lt;code&gt;certbot&lt;/code&gt; client again manually (instead of through already automated systems) and figured I&amp;rsquo;d write up the commands for myself. Just in case.&lt;/p&gt;</description></item><item><title>The end of Extended Validation certificates</title><link>https://ma.ttias.be/the-end-of-extended-validation-certificates/</link><pubDate>Wed, 03 Apr 2019 07:40:18 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/the-end-of-extended-validation-certificates/</guid><description>&lt;p&gt;You know those certificates you paid 5x more for than a normal one? The ones that are supposed to give you a green address bar with your company name imprinted on it?&lt;/p&gt;</description></item><item><title>Remote Code Execution in apt/apt-get</title><link>https://ma.ttias.be/remote-code-execution-in-apt-apt-get/</link><pubDate>Wed, 23 Jan 2019 10:59:22 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/remote-code-execution-in-apt-apt-get/</guid><description>&lt;p&gt;A very clever exploit was found in &lt;code&gt;apt&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;tl;dr I found a vulnerability in apt that allows a network man-in-the-middle (or a malicious package mirror) to execute arbitrary code as root on a machine installing any package. The bug has been fixed in the latest versions of apt. If you’re worried about being exploited during the update process, you can protect yourself by disabling HTTP redirects while you update.&lt;/p&gt;</description></item><item><title>The convincing Bitcoin scam e-mail extorting you</title><link>https://ma.ttias.be/convincing-bitcoin-scam-e-mail-extorting/</link><pubDate>Wed, 17 Oct 2018 12:51:02 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/convincing-bitcoin-scam-e-mail-extorting/</guid><description>&lt;p&gt;A few months ago I received an e-mail that got me worried for a few seconds. It looked like this, and chances are you&amp;rsquo;ve seen it too.&lt;/p&gt;</description></item><item><title>Find the public key belonging to a private key</title><link>https://ma.ttias.be/find-public-key-belonging-private-key/</link><pubDate>Tue, 02 Oct 2018 13:33:52 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/find-public-key-belonging-private-key/</guid><description>&lt;p&gt;Here&amp;rsquo;s how you can show the public key part if you have the private key.&lt;/p&gt;</description></item><item><title>ssh error: unable to negotiate with IP: no matching cipher found</title><link>https://ma.ttias.be/ssh-error-unable-negotiate-ip-no-matching-cipher-found/</link><pubDate>Mon, 24 Sep 2018 19:03:31 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/ssh-error-unable-negotiate-ip-no-matching-cipher-found/</guid><description>&lt;p&gt;I have a pretty old Synology NAS at home that I use for some basic file storage. I also &lt;em&gt;abuse&lt;/em&gt; it as a cron-server, doing some simple rsync&amp;rsquo;s from remote systems. When I last tried to SSH into it, I was greeted with this error.&lt;/p&gt;</description></item><item><title>Remote Desktop error: CredSSP encryption oracle remediation</title><link>https://ma.ttias.be/remote-desktop-error-credssp-encryption-oracle-remediation/</link><pubDate>Mon, 14 May 2018 08:21:29 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/remote-desktop-error-credssp-encryption-oracle-remediation/</guid><description>&lt;p&gt;A while back, Microsoft announced it would ship updates to both its RDP client &amp;amp; server components to resolve a critical security vulnerability. That rollout is now happening and many clients have received auto-updates for their client.&lt;/p&gt;</description></item></channel></rss>