<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>linux kernel exploitation — algoatson.github.io</title>
    <link>https://algoatson.github.io/series/linux-kernel-exploitation/</link>
    <atom:link href="https://algoatson.github.io/series/linux-kernel-exploitation/feed.xml" rel="self" type="application/rss+xml"/>
    <description>Most kernel mitigations watch for corrupted pointers and hijacked control flow. DirtyCred sidesteps all of it — instead of overwriting bytes inside a cred or file, it frees the whole privileged object and lets a legitimate one take its place. A UAF becomes root with no leak, no ROP, and nothing for CFI to catch.</description>
    <language>en</language>
    <lastBuildDate>Tue, 16 Jun 2026 02:47:52 +0000</lastBuildDate>
    <item>
      <title>a slab use-after-free, from ioctl to root</title>
      <link>https://algoatson.github.io/p/slab-uaf-modprobe/</link>
      <guid isPermaLink="true">https://algoatson.github.io/p/slab-uaf-modprobe/</guid>
      <pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
      <category>kernel</category><category>pwn</category><category>linux</category>
      <description>A toy char driver frees an object and keeps the pointer. From there it&#x27;s the usual kernel kata — reclaim the slot with a spray, leak KASLR through the dangling read, then turn the dangling write into a modprobe_path overwrite.</description>
    </item>
    <item>
      <title>kernel LPE — commit_creds(prepare_kernel_cred(0))</title>
      <link>https://algoatson.github.io/p/kernel-lpe-commit-creds/</link>
      <guid isPermaLink="true">https://algoatson.github.io/p/kernel-lpe-commit-creds/</guid>
      <pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate>
      <category>kernel</category><category>pwn</category>
      <description>The data-only path overwrites modprobe_path; the code path hijacks kernel control flow to run commit_creds(prepare_kernel_cred(0)) and returns to a root shell. Here&#x27;s that path, and the four mitigations — SMEP, SMAP, KPTI, KASLR — you step over to walk it.</description>
    </item>
    <item>
      <title>userfaultfd &amp; FUSE — freezing a race until it&#x27;s deterministic</title>
      <link>https://algoatson.github.io/p/userfaultfd-fuse-race-windows/</link>
      <guid isPermaLink="true">https://algoatson.github.io/p/userfaultfd-fuse-race-windows/</guid>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <category>kernel</category><category>pwn</category>
      <description>A UAF that needs you to reallocate in a microsecond window is a coin flip — unless you can pause the kernel mid-copy. userfaultfd (and FUSE, when it&#x27;s locked down) let a page fault block in your own handler, stretching a hopeless race into a step you control.</description>
    </item>
    <item>
      <title>Dirty Pipe (CVE-2022-0847): one uninitialised flag</title>
      <link>https://algoatson.github.io/p/dirty-pipe-cve-2022-0847/</link>
      <guid isPermaLink="true">https://algoatson.github.io/p/dirty-pipe-cve-2022-0847/</guid>
      <pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate>
      <category>kernel</category><category>pwn</category>
      <description>A pipe buffer&#x27;s flags field was left uninitialised, so a stale PIPE_BUF_FLAG_CAN_MERGE let a write() spill into the page cache of a file you only opened read-only. No memory corruption, no ROP — just a missing assignment that turns &quot;read a file&quot; into &quot;overwrite it&quot;. A source review of one of the cleanest LPEs in years.</description>
    </item>
    <item>
      <title>kernel heap spray — the elastic objects you allocate on demand</title>
      <link>https://algoatson.github.io/p/kernel-heap-spray-primitives/</link>
      <guid isPermaLink="true">https://algoatson.github.io/p/kernel-heap-spray-primitives/</guid>
      <pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate>
      <category>kernel</category><category>pwn</category>
      <description>A kernel UAF is only useful if you can land controlled data in the freed slot. The exploit-dev toolkit is a handful of syscalls that allocate kernel objects of a size and content you choose — msg_msg, setxattr, add_key, sk_buff — each with different lifetime and reach across the SLUB caches.</description>
    </item>
    <item>
      <title>cross-cache attacks — reaching the objects in their own cache</title>
      <link>https://algoatson.github.io/p/cross-cache-attacks/</link>
      <guid isPermaLink="true">https://algoatson.github.io/p/cross-cache-attacks/</guid>
      <pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate>
      <category>kernel</category><category>pwn</category>
      <description>The juicy kernel structs — cred, file, task_struct — live in dedicated caches a kmalloc spray can&#x27;t touch. Cross-cache attacks free the victim&#x27;s whole slab page back to the buddy allocator and let a different cache claim it, so two object types overlap on the same physical page. The trick that turns a UAF in one cache into a bug affecting another.</description>
    </item>
    <item>
      <title>DirtyCred — swap the object, skip the corruption</title>
      <link>https://algoatson.github.io/p/dirtycred-swapping-credentials/</link>
      <guid isPermaLink="true">https://algoatson.github.io/p/dirtycred-swapping-credentials/</guid>
      <pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate>
      <category>kernel</category><category>pwn</category>
      <description>Most kernel mitigations watch for corrupted pointers and hijacked control flow. DirtyCred sidesteps all of it — instead of overwriting bytes inside a cred or file, it frees the whole privileged object and lets a legitimate one take its place. A UAF becomes root with no leak, no ROP, and nothing for CFI to catch.</description>
    </item>
  </channel>
</rss>
