<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Leitwacht blog</title>
    <link>https://leitwacht.eu/blog</link>
    <description>Notes on CI runner security, eBPF, and EU sovereignty.</description>
    <language>en</language>
    <atom:link href="https://leitwacht.eu/blog/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>One dropper, 140+ packages: the Mastra npm compromise and the egress block that ends it</title>
      <link>https://leitwacht.eu/blog/blocking-the-mastra-compromise</link>
      <guid isPermaLink="true">https://leitwacht.eu/blog/blocking-the-mastra-compromise</guid>
      <description>The @mastra npm organization was compromised: 140+ packages were republished with a single malicious dependency, easy-day-js@1.11.22, whose postinstall hook fetches a second stage from a hardcoded C2. You never installed the malicious package directly; you pulled it transitively through a package you trust. We detonated it and captured the exact C2 reach. Default-deny egress on the CI runner drops that connection before the second stage can download, regardless of how the code arrived or what it harvested.</description>
      <pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate>
      <author>Thomas, Leitwacht</author>
    </item>
    <item>
      <title>Closing the attach race without NRI</title>
      <link>https://leitwacht.eu/blog/closing-the-attach-race</link>
      <guid isPermaLink="true">https://leitwacht.eu/blog/closing-the-attach-race</guid>
      <description>A zero-capability init container as a synchronization barrier, plus an agent subscribed to containerd&apos;s events socket. Race-free egress enforcement without an NRI plugin&apos;s blast radius.</description>
      <pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate>
      <author>Thomas, Leitwacht</author>
    </item>
    <item>
      <title>Valid provenance, malicious package: anatomy of the Red Hat npm compromise</title>
      <link>https://leitwacht.eu/blog/valid-provenance-malicious-package</link>
      <guid isPermaLink="true">https://leitwacht.eu/blog/valid-provenance-malicious-package</guid>
      <description>Attackers re-published 31 packages across the @redhat-cloud-services npm scope at least four times in one afternoon, every version carrying valid, signed SLSA provenance. How they mint genuine provenance for malware, what the payload does (captured first-hand), and why behavioral detection catches each re-arm in seconds.</description>
      <pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate>
      <author>Thomas, Leitwacht</author>
    </item>
    <item>
      <title>Mini Shai-Hulud, blocked: a live capture against the real payload</title>
      <link>https://leitwacht.eu/blog/mini-shai-hulud-blocked-at-the-kernel</link>
      <guid isPermaLink="true">https://leitwacht.eu/blog/mini-shai-hulud-blocked-at-the-kernel</guid>
      <description>The Mini Shai-Hulud npm wave on 19 May 2026 published 637 malicious versions across 317 packages. We obtained the real payload (size-sensor@1.2.4, a roughly half-megabyte obfuscated Bun script) and ran it inside a Leitwacht-enforced container. Every exfil destination, primary (t[.]m-kosche[.]com, OTel-disguised) and fallback (api.github.com, PAT-authenticated dead-drop), was caught at the kernel before a byte left the runner.</description>
      <pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate>
      <author>Thomas, Leitwacht</author>
    </item>
    <item>
      <title>why-ci-runners-are-the-soft-target</title>
      <link>https://leitwacht.eu/blog/why-ci-runners-are-the-soft-target</link>
      <guid isPermaLink="true">https://leitwacht.eu/blog/why-ci-runners-are-the-soft-target</guid>
      <description></description>
      <pubDate>Thu, 01 Jan 1970 00:00:00 GMT</pubDate>
      <author>Leitwacht</author>
    </item>
  </channel>
</rss>
