<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Vulnerability Analysis on KnightLi Blog</title>
        <link>https://knightli.com/en/tags/vulnerability-analysis/</link>
        <description>Recent content in Vulnerability Analysis on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Fri, 22 May 2026 15:16:59 +0800</lastBuildDate><atom:link href="https://knightli.com/en/tags/vulnerability-analysis/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>CVE-2026-43494 / PinTheft: Local Privilege Escalation Risk from Linux RDS and io_uring</title>
        <link>https://knightli.com/en/2026/05/22/linux-kernel-cve-2026-43494-pintheft/</link>
        <pubDate>Fri, 22 May 2026 15:16:59 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/22/linux-kernel-cve-2026-43494-pintheft/</guid>
        <description>&lt;p&gt;&lt;code&gt;CVE-2026-43494&lt;/code&gt; is a Linux kernel local privilege escalation risk. The related exploitation chain is also known publicly as &lt;code&gt;PinTheft&lt;/code&gt;. The key point is not a remote entry point, but whether a low-privilege local user can line up RDS zerocopy, &lt;code&gt;io_uring&lt;/code&gt; fixed buffers, a readable SUID-root program, and a suitable kernel version.&lt;/p&gt;
&lt;p&gt;One naming detail is worth clarifying first: the &lt;code&gt;Unclecheng-li/poc-lab&lt;/code&gt; repository directory is named &lt;code&gt;CVE-2026-43494 PinTheft&lt;/code&gt;, while the README title also mentions &lt;code&gt;QVD-2026-27616 - PinTheft&lt;/code&gt;. Based on public CVE entries and third-party advisories, &lt;code&gt;CVE-2026-43494&lt;/code&gt; points to a Linux kernel RDS zerocopy issue where &lt;code&gt;op_nents&lt;/code&gt; is not reset correctly, leading to a double-free / reference-counting anomaly. &lt;code&gt;QVD-2026-27616&lt;/code&gt; appears more like a Qianxin risk advisory identifier. In real triage, record both identifiers, but treat distribution security advisories and kernel patch status as the source of truth.&lt;/p&gt;
&lt;h2 id=&#34;what-is-the-core-bug&#34;&gt;What Is the Core Bug?
&lt;/h2&gt;&lt;p&gt;The issue appears in the zerocopy send path of Linux RDS, Reliable Datagram Sockets. Public descriptions point to these key functions:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rds_message_zcopy_from_user()
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rds_message_purge()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;When &lt;code&gt;iov_iter_get_pages2()&lt;/code&gt; fails inside &lt;code&gt;rds_message_zcopy_from_user()&lt;/code&gt;, pages that have already been pinned can be released by the error path, but the related &lt;code&gt;op_nents&lt;/code&gt; state is not cleared correctly. Later, &lt;code&gt;rds_message_purge()&lt;/code&gt; may still release the residual entries again. The result is that the same batch of page references can be decremented too many times, creating an exploitable reference-counting error.&lt;/p&gt;
&lt;p&gt;Viewed alone, the RDS bug is an error-path memory-management issue inside the kernel. PinTheft becomes dangerous because the exploitation chain connects it with the &lt;code&gt;io_uring&lt;/code&gt; fixed-buffer mechanism: &lt;code&gt;io_uring&lt;/code&gt; still keeps an old &lt;code&gt;struct page *&lt;/code&gt;, while the page itself has already been freed and reallocated for another purpose. The public PoC then steers this state toward overwriting the page cache of a SUID-root program, eventually reaching local privilege escalation.&lt;/p&gt;
&lt;h2 id=&#34;why-it-is-called-pintheft&#34;&gt;Why It Is Called PinTheft
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;io_uring REGISTER_BUFFERS&lt;/code&gt; pins user pages. For normal pages, &lt;code&gt;FOLL_PIN&lt;/code&gt; is not just a simple reference increment; it raises the page refcount through a larger bias. The public PoC uses the concept of &lt;code&gt;GUP_PIN_COUNTING_BIAS = 1024&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The name PinTheft means the attack chain repeatedly &amp;ldquo;steals&amp;rdquo; those pin references through the RDS zerocopy failure path. After the references are drained, &lt;code&gt;io_uring&lt;/code&gt; still believes it holds a valid page, but that physical page can now be freed and reused by the page cache.&lt;/p&gt;
&lt;p&gt;This class of vulnerability is easy to misread as &amp;ldquo;directly modifying &lt;code&gt;/usr/bin/su&lt;/code&gt; on disk.&amp;rdquo; A more accurate description is that the exploitation chain tries to overwrite the in-memory page cache. The file itself may not be written back to disk, but when the kernel executes the SUID program, it may fetch instructions from the contaminated page cache and run the attack payload.&lt;/p&gt;
&lt;h2 id=&#34;the-trigger-conditions-are-not-broad&#34;&gt;The Trigger Conditions Are Not Broad
&lt;/h2&gt;&lt;p&gt;This is not a vulnerability where &amp;ldquo;any Linux server can be remotely hit.&amp;rdquo; Public information indicates that the exploitation chain depends on at least these conditions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The kernel has &lt;code&gt;CONFIG_RDS&lt;/code&gt; and &lt;code&gt;CONFIG_RDS_TCP&lt;/code&gt; enabled.&lt;/li&gt;
&lt;li&gt;The system has &lt;code&gt;CONFIG_IO_URING&lt;/code&gt; enabled, and &lt;code&gt;kernel.io_uring_disabled=0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;rds&lt;/code&gt; / &lt;code&gt;rds_tcp&lt;/code&gt; modules are already loaded, or a low-privilege user can trigger autoloading.&lt;/li&gt;
&lt;li&gt;A readable SUID-root binary exists locally, such as &lt;code&gt;/usr/bin/su&lt;/code&gt;, &lt;code&gt;/usr/bin/passwd&lt;/code&gt;, or &lt;code&gt;/usr/bin/pkexec&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The public PoC also depends on the newer &lt;code&gt;IORING_REGISTER_CLONE_BUFFERS&lt;/code&gt; API. CloudLinux analysis notes that the public PoC is more aligned with kernel 6.13 and later.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If any one of these links is missing, the public exploitation path breaks. For example, many RHEL-family distributions do not compile RDS by default, older Ubuntu kernels may lack the &lt;code&gt;io_uring&lt;/code&gt; clone-buffer API needed by the PoC, and some environments restrict automatic RDS module loading by unprivileged users.&lt;/p&gt;
&lt;h2 id=&#34;one-minute-self-check&#34;&gt;One-Minute Self-Check
&lt;/h2&gt;&lt;p&gt;First, check the kernel configuration:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zgrep -E &lt;span class=&#34;s2&#34;&gt;&amp;#34;CONFIG_(RDS|RDS_TCP|IO_URING)&amp;#34;&lt;/span&gt; /proc/config.gz 2&amp;gt;/dev/null &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; grep -E &lt;span class=&#34;s2&#34;&gt;&amp;#34;CONFIG_(RDS|RDS_TCP|IO_URING)&amp;#34;&lt;/span&gt; /boot/config-&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname -r&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then check whether &lt;code&gt;io_uring&lt;/code&gt; is disabled:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /proc/sys/kernel/io_uring_disabled 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Interpret the common values like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0&lt;/code&gt;: allowed, giving the largest exposure.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1&lt;/code&gt;: restricted for unprivileged users; exact behavior depends on kernel version and distribution policy.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2&lt;/code&gt;: &lt;code&gt;io_uring&lt;/code&gt; disabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check whether the RDS modules exist and can be loaded:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsmod &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -E &lt;span class=&#34;s2&#34;&gt;&amp;#34;^rds|^rds_tcp&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;modprobe -n -v rds_tcp 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; head -3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If &lt;code&gt;CONFIG_RDS&lt;/code&gt; is &lt;code&gt;not set&lt;/code&gt;, or the system has no &lt;code&gt;rds_tcp&lt;/code&gt; module at all, this bug usually cannot be reached. Conversely, if RDS is available, &lt;code&gt;io_uring&lt;/code&gt; is not disabled, and the system uses a relatively new general-purpose kernel, continue checking distribution fix status with higher priority.&lt;/p&gt;
&lt;h2 id=&#34;which-machines-deserve-priority&#34;&gt;Which Machines Deserve Priority
&lt;/h2&gt;&lt;p&gt;Prioritize these environments:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Multi-user Linux hosts, teaching machines, jump hosts, and shared development machines.&lt;/li&gt;
&lt;li&gt;Container hosts, especially environments that allow untrusted local users or have a loose container escape surface.&lt;/li&gt;
&lt;li&gt;Desktops or servers running newer mainline / rolling kernels, such as Arch-like rolling distributions.&lt;/li&gt;
&lt;li&gt;HPC, Oracle RAC, or other scenarios that may genuinely use RDS.&lt;/li&gt;
&lt;li&gt;CI workers, build machines, and lab environments that allow unprivileged users to run large amounts of local code.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For an ordinary web server where only controlled service accounts run applications and RDS is not enabled, the practical risk is much lower. But &amp;ldquo;much lower&amp;rdquo; does not mean &amp;ldquo;ignore it&amp;rdquo;: the typical impact of a kernel local privilege escalation is that an attacker first gains low-privilege access through Web, SSH, CI, containers, or an application bug, then uses the local bug to expand control.&lt;/p&gt;
&lt;h2 id=&#34;temporary-mitigation-ideas&#34;&gt;Temporary Mitigation Ideas
&lt;/h2&gt;&lt;p&gt;The proper fix should still come from the distribution kernel update. Patch status, backported versions, and affected ranges must be checked against advisories from Debian, Ubuntu, RHEL, AlmaLinux, Rocky Linux, SUSE, Arch, cloud vendors, or container base-image providers. Do not judge only by the upstream version number.&lt;/p&gt;
&lt;p&gt;While waiting for patches, or when an immediate kernel reboot is not possible, choose temporary measures according to the environment:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# If the business does not depend on RDS, block related module loading&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;printf &amp;#39;install rds /bin/false\ninstall rds_tcp /bin/false\ninstall rds_rdma /bin/false\n&amp;#39; &amp;gt; /etc/modprobe.d/pintheft.conf&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rmmod rds_tcp 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rmmod rds_rdma 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rmmod rds 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If the business does not depend on &lt;code&gt;io_uring&lt;/code&gt;, consider disabling or restricting it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sysctl -w kernel.io_uring_disabled&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Persistent configuration needs to be written into the appropriate &lt;code&gt;/etc/sysctl.d/*.conf&lt;/code&gt; file. Be careful with this step: modern databases, proxies, runtimes, or high-performance I/O programs may use &lt;code&gt;io_uring&lt;/code&gt;. Confirm business dependencies before changing production systems.&lt;/p&gt;
&lt;h2 id=&#34;how-to-verify-after-fixing&#34;&gt;How to Verify After Fixing
&lt;/h2&gt;&lt;p&gt;After upgrading the kernel, do not rely only on package-manager success output. Confirm three things:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uname -a
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /proc/sys/kernel/io_uring_disabled 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;modprobe -n -v rds_tcp 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; head -3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If a distribution advisory explicitly says &lt;code&gt;CVE-2026-43494&lt;/code&gt; is fixed, the kernel may still be protected even when &lt;code&gt;uname -r&lt;/code&gt; does not look like the newest upstream release, because the stable distribution kernel may have received a backported patch. Conversely, if the kernel comes from a self-built tree, third-party repository, cloud marketplace image, or container host template, continue checking the patch commit and build time.&lt;/p&gt;
&lt;h2 id=&#34;references&#34;&gt;References
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Unclecheng-li/poc-lab/tree/main/CVE-2026-43494%20PinTheft&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Unclecheng-li/poc-lab: CVE-2026-43494 PinTheft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://dbugs.ptsecurity.com/vulnerability/PT-2026-42451&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;dbugs: CVE-2026-43494&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.cloudlinux.com/pintheft-cloudlinux-platforms-not-affected&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;CloudLinux: PinTheft (CVE-2026-43494) kernel LPE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://git.kernel.org/stable/c/e174929793195e0cd6a4adb0cad731b39f9019b4&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Linux stable commit: net/rds reset op_nents when zerocopy page pin fails&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>How to Check CVE-2026-42945: Nginx Rift Trigger Conditions, Version Checks, and Upgrade Advice</title>
        <link>https://knightli.com/en/2026/05/15/nginx-rift-cve-2026-42945/</link>
        <pubDate>Fri, 15 May 2026 17:55:42 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/15/nginx-rift-cve-2026-42945/</guid>
        <description>&lt;p&gt;&lt;code&gt;CVE-2026-42945&lt;/code&gt; is a security vulnerability in NGINX Open Source and NGINX Plus. It is also being referred to as &lt;code&gt;Nginx Rift&lt;/code&gt;. The issue is in &lt;code&gt;ngx_http_rewrite_module&lt;/code&gt;, and the vulnerability type is heap-based buffer overflow.&lt;/p&gt;
&lt;p&gt;News like this is easy to turn into headlines such as &amp;ldquo;hidden for 18 years&amp;rdquo;, &amp;ldquo;remote control without a password&amp;rdquo;, or &amp;ldquo;30% of servers affected&amp;rdquo;. Those claims travel well, but when reading the patch notes and NVD description, it is better to separate the risk into concrete pieces: the issue is serious, and it does not require a logged-in account; but not every Nginx instance is automatically compromised. Triggering it requires specific rewrite configuration and request conditions.&lt;/p&gt;
&lt;h2 id=&#34;start-with-the-official-description&#34;&gt;Start with the official description
&lt;/h2&gt;&lt;p&gt;The NVD description of &lt;code&gt;CVE-2026-42945&lt;/code&gt; can be summarized as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It affects NGINX Plus and NGINX Open Source.&lt;/li&gt;
&lt;li&gt;The vulnerability is in &lt;code&gt;ngx_http_rewrite_module&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The issue may be triggered when a &lt;code&gt;rewrite&lt;/code&gt; directive is followed by a &lt;code&gt;rewrite&lt;/code&gt;, &lt;code&gt;if&lt;/code&gt;, or &lt;code&gt;set&lt;/code&gt; directive, unnamed PCRE capture groups such as &lt;code&gt;$1&lt;/code&gt; and &lt;code&gt;$2&lt;/code&gt; are used, and the replacement string contains a question mark &lt;code&gt;?&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;An unauthenticated attacker can send a crafted request to trigger the vulnerability.&lt;/li&gt;
&lt;li&gt;The result may be a heap buffer overflow and restart of an NGINX worker process.&lt;/li&gt;
&lt;li&gt;If ASLR is disabled on the system, code execution is possible.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;F5, as the CNA, gives the following scores:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVSS v4.0: &lt;code&gt;9.2&lt;/code&gt;, Critical.&lt;/li&gt;
&lt;li&gt;CVSS v3.1: &lt;code&gt;8.1&lt;/code&gt;, High.&lt;/li&gt;
&lt;li&gt;CWE: &lt;code&gt;CWE-122 Heap-based Buffer Overflow&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So this is not a routine &amp;ldquo;bad config causes a 404&amp;rdquo; issue. It is a memory safety vulnerability covered by an official Nginx security fix.&lt;/p&gt;
&lt;h2 id=&#34;which-claims-need-context&#34;&gt;Which claims need context
&lt;/h2&gt;&lt;p&gt;First, &amp;ldquo;no password required&amp;rdquo; is best understood as unauthenticated attack. In other words, the attacker does not need to log in to an Nginx admin panel, obtain SSH access, or hold an application account. But that does not mean every public-facing Nginx instance can be casually taken over.&lt;/p&gt;
&lt;p&gt;Second, &amp;ldquo;direct remote control&amp;rdquo; depends on conditions. The more careful official framing is that the vulnerability can cause worker process restarts; on systems where ASLR is disabled, code execution is a possible outcome. On environments with ASLR enabled, proper distribution hardening, and restricted runtime privileges, the exploitation path becomes more complex.&lt;/p&gt;
&lt;p&gt;Third, &amp;ldquo;30% of servers affected&amp;rdquo; should not be treated as &amp;ldquo;all Nginx market share equals exposed attack surface&amp;rdquo;. Real exposure depends on the version, whether the affected module is present, whether the specific rewrite configuration exists, whether the distribution has already backported the patch, and how hardened the Nginx runtime environment is.&lt;/p&gt;
&lt;p&gt;The more accurate approach is simple: if you run Nginx in production, check it quickly; but do not decide whether you are affected based only on a headline percentage.&lt;/p&gt;
&lt;h2 id=&#34;how-to-determine-the-affected-scope&#34;&gt;How to determine the affected scope
&lt;/h2&gt;&lt;p&gt;According to nginx.org release information, the &lt;code&gt;nginx-1.30.1&lt;/code&gt; stable release and &lt;code&gt;nginx-1.31.0&lt;/code&gt; mainline release published on May 13, 2026 include multiple security fixes, including the &lt;code&gt;ngx_http_rewrite_module&lt;/code&gt; buffer overflow tracked as &lt;code&gt;CVE-2026-42945&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you use official Nginx source builds or official packages, focus on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NGINX Open Source stable: upgrade to &lt;code&gt;1.30.1&lt;/code&gt; or later.&lt;/li&gt;
&lt;li&gt;NGINX Open Source mainline: upgrade to &lt;code&gt;1.31.0&lt;/code&gt; or later.&lt;/li&gt;
&lt;li&gt;NGINX Plus: check the fixed version for your F5-supported branch.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you use Debian, Ubuntu, RHEL, AlmaLinux, Rocky Linux, Alpine, container images, Plesk, control panels, Ingress Controller, or cloud-provider managed components, do not rely only on the upstream version shown by &lt;code&gt;nginx -v&lt;/code&gt;. Many distributions backport security fixes into older package versions. The version string may look old while the patch is already included.&lt;/p&gt;
&lt;h2 id=&#34;one-minute-urgency-check&#34;&gt;One-minute urgency check
&lt;/h2&gt;&lt;p&gt;Use these questions for a quick risk tiering:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Is this Nginx instance directly exposed to the internet, or is it part of an API Gateway, reverse proxy, load balancer, or Ingress entry layer?&lt;/li&gt;
&lt;li&gt;Are you using official Nginx packages, source builds, third-party control panels, or container images without having confirmed the &lt;code&gt;CVE-2026-42945&lt;/code&gt; fix status?&lt;/li&gt;
&lt;li&gt;Does the configuration contain complex &lt;code&gt;rewrite&lt;/code&gt; rules, especially consecutive &lt;code&gt;rewrite&lt;/code&gt;, &lt;code&gt;if&lt;/code&gt;, or &lt;code&gt;set&lt;/code&gt; directives and unnamed captures such as &lt;code&gt;$1&lt;/code&gt; and &lt;code&gt;$2&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Does any rewrite target include request paths, query parameters, or other user-controlled input?&lt;/li&gt;
&lt;li&gt;Is the system weakly hardened, for example with ASLR disabled, overly privileged workers, or overly broad container permissions?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If the first two items apply and rewrite configuration has not yet been reviewed, treat it as high priority. Public entry points, shared environments, Kubernetes Ingress, edge proxies, and Nginx instances carrying login or API traffic should be upgraded or replaced with a confirmed fixed package first.&lt;/p&gt;
&lt;h2 id=&#34;how-to-confirm-fixes-on-debian--ubuntu--rhel--alpine&#34;&gt;How to confirm fixes on Debian / Ubuntu / RHEL / Alpine
&lt;/h2&gt;&lt;p&gt;Distribution users should not look only at &lt;code&gt;nginx -v&lt;/code&gt;. Debian, Ubuntu, RHEL, AlmaLinux, Rocky Linux, and Alpine often backport security patches into stable branches, so the visible version may still be lower than nginx.org&amp;rsquo;s &lt;code&gt;1.30.1&lt;/code&gt; or &lt;code&gt;1.31.0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;On Debian / Ubuntu, check security advisories, package changelog, and upgrade candidates:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nginx -v
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nginx -V
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt list --upgradable &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt changelog nginx &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;CVE-2026-42945&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;On RHEL / AlmaLinux / Rocky Linux, check security updates and package changelog:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum updateinfo list security &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -i nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -q --changelog nginx &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;CVE-2026-42945&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;On Alpine, check the installed package version and security branch updates:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apk info -v nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apk version -v nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If the package manager, distribution security advisory, or vendor advisory explicitly says &lt;code&gt;CVE-2026-42945&lt;/code&gt; is fixed, you can treat it as backported even if the upstream version number looks old. Conversely, if the version looks new but the source is unclear, still confirm the build date and patch source.&lt;/p&gt;
&lt;h2 id=&#34;how-to-check-container-images-and-ingress-controller&#34;&gt;How to check container images and Ingress Controller
&lt;/h2&gt;&lt;p&gt;In container environments, check the Nginx inside the image, not only the host. First confirm the actual embedded version:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run --rm your-nginx-image nginx -v
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run --rm your-nginx-image nginx -V
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Also check whether the base image has been updated. If the image is built on Debian, Ubuntu, Alpine, or distribution packages, apply the same advisory and changelog checks for that distribution. Restarting an old image is not useful; the image itself needs to be rebuilt or replaced.&lt;/p&gt;
&lt;p&gt;For Kubernetes Ingress, confirm three things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Whether the Ingress Controller project has published an advisory or fixed release for &lt;code&gt;CVE-2026-42945&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Whether the running controller image digest has actually changed, rather than only the tag.&lt;/li&gt;
&lt;li&gt;Whether the controller&amp;rsquo;s embedded Nginx version, build flags, and template configuration still contain high-risk rewrite rules.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Start by checking the running image:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl -n ingress-nginx get pods -o wide
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl -n ingress-nginx describe pod &amp;lt;pod-name&amp;gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -i image
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you use a cloud-provider managed Ingress or gateway, check the corresponding cloud service advisory. Managed components usually cannot be fixed by running &lt;code&gt;apt upgrade&lt;/code&gt; yourself; you need the provider&amp;rsquo;s fix or a switch to a fixed version.&lt;/p&gt;
&lt;h2 id=&#34;which-rewrite-patterns-deserve-attention&#34;&gt;Which rewrite patterns deserve attention
&lt;/h2&gt;&lt;p&gt;This vulnerability is related to &lt;code&gt;rewrite&lt;/code&gt; configuration. Start by searching Nginx configuration:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grep -R &lt;span class=&#34;s2&#34;&gt;&amp;#34;rewrite&amp;#34;&lt;/span&gt; /etc/nginx -n
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grep -R &lt;span class=&#34;s2&#34;&gt;&amp;#34;\\&lt;/span&gt;$&lt;span class=&#34;s2&#34;&gt;[0-9]&amp;#34;&lt;/span&gt; /etc/nginx -n
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Pay attention to patterns like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;rewrite&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;^/old/(.*)&lt;/span&gt;$ &lt;span class=&#34;s&#34;&gt;/new/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1?&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;permanent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The unnamed captures such as &lt;code&gt;$1&lt;/code&gt; and &lt;code&gt;$2&lt;/code&gt;, plus the &lt;code&gt;?&lt;/code&gt; in the replacement target, are among the key conditions described by the official sources. During review, pay special attention to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;rewrite&lt;/code&gt; followed by another &lt;code&gt;rewrite&lt;/code&gt;, &lt;code&gt;if&lt;/code&gt;, or &lt;code&gt;set&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Broad captures such as &lt;code&gt;(.*)&lt;/code&gt; and &lt;code&gt;(.+)&lt;/code&gt; that are reused as &lt;code&gt;$1&lt;/code&gt; or &lt;code&gt;$2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Rewrite targets containing &lt;code&gt;?&lt;/code&gt; to append or discard query parameters.&lt;/li&gt;
&lt;li&gt;Rewrite input coming from public paths, Host, URI, parameters, or upstream-controlled values.&lt;/li&gt;
&lt;li&gt;Rewrite rules generated by panels, gateways, Ingress annotations, or templates.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you cannot upgrade immediately, use temporary mitigations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reduce complex rewrite rules.&lt;/li&gt;
&lt;li&gt;Replace unnamed captures with clearer named captures.&lt;/li&gt;
&lt;li&gt;Avoid unnecessary &lt;code&gt;?&lt;/code&gt; concatenation in replacement strings.&lt;/li&gt;
&lt;li&gt;Add WAF or reverse-proxy rules for high-risk entry points.&lt;/li&gt;
&lt;li&gt;Confirm that ASLR is enabled.&lt;/li&gt;
&lt;li&gt;Reduce Nginx worker privileges and verify systemd sandboxing, SELinux/AppArmor, and related hardening.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These measures are mitigations, not replacements for patching.&lt;/p&gt;
&lt;h2 id=&#34;remediation-priority&#34;&gt;Remediation priority
&lt;/h2&gt;&lt;p&gt;Prioritize by exposure:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Public-facing Nginx entry points.&lt;/li&gt;
&lt;li&gt;Reverse proxies, API Gateway, and edge gateways.&lt;/li&gt;
&lt;li&gt;Nginx in multi-tenant environments.&lt;/li&gt;
&lt;li&gt;Kubernetes Ingress Controller.&lt;/li&gt;
&lt;li&gt;Plesk, control panels, marketplace images, and other components that bundle Nginx.&lt;/li&gt;
&lt;li&gt;Internal Nginx instances that carry critical business traffic.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;how-to-verify-after-upgrading-nginx--t-reload-and-worker-state&#34;&gt;How to verify after upgrading: nginx -t, reload, and worker state
&lt;/h2&gt;&lt;p&gt;After updating, do not stop at &amp;ldquo;the package manager succeeded&amp;rdquo;. Confirm the configuration, process state, and actual binary have all switched over. First validate the configuration:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nginx -t
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If there are no errors, reload smoothly:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl reload nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If the package upgrade replaced the binary, confirm old workers have exited:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ps aux &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;You can also inspect the master process start time and binary path to ensure the running service is not an old process still resident in memory. If needed, schedule a maintenance window and restart the service so old workers or old containers do not continue handling requests.&lt;/p&gt;
&lt;p&gt;For containers and Ingress, also confirm the new image rollout has actually completed:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl -n ingress-nginx rollout status deployment/&amp;lt;deployment-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl -n ingress-nginx get pods -o wide
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The key verification question is not &amp;ldquo;did the command run&amp;rdquo;, but &amp;ldquo;is live traffic now handled by Nginx processes that include the fix&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;do-not-ignore-the-same-nginx-security-batch&#34;&gt;Do not ignore the same Nginx security batch
&lt;/h2&gt;&lt;p&gt;The &lt;code&gt;1.30.1&lt;/code&gt; and &lt;code&gt;1.31.0&lt;/code&gt; releases published by nginx.org on the same day fixed more than &lt;code&gt;CVE-2026-42945&lt;/code&gt;. The release information also mentions HTTP/2 request injection, SCGI/uWSGI buffer overread, charset module buffer overread, HTTP/3 address spoofing, OCSP resolver use-after-free, and other issues.&lt;/p&gt;
&lt;p&gt;That means production environments should not only add a temporary rule for a single CVE. Treat this Nginx security release as an overall upgrade.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;The key point of &lt;code&gt;CVE-2026-42945&lt;/code&gt; is not &amp;ldquo;all Nginx instances can be instantly taken over&amp;rdquo;. It is a long-standing memory safety vulnerability in the rewrite module that can be triggered by unauthenticated requests under specific configurations. The most direct result is worker crash and restart; on weaker environments such as systems with ASLR disabled, code execution risk is higher.&lt;/p&gt;
&lt;p&gt;For operations teams, the handling order is straightforward:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Confirm the Nginx source and version.&lt;/li&gt;
&lt;li&gt;Check distribution, F5, nginx.org, or cloud-provider advisories.&lt;/li&gt;
&lt;li&gt;Upgrade to a fixed version or distribution security package as soon as possible.&lt;/li&gt;
&lt;li&gt;Review complex rewrite configuration, especially combinations of &lt;code&gt;$1&lt;/code&gt;, &lt;code&gt;$2&lt;/code&gt;, and &lt;code&gt;?&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Confirm ASLR, privilege isolation, and service reload state.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The headline can be scary. The fix should be calm: confirm exposure, upgrade, then clean up high-risk rewrite rules.&lt;/p&gt;
&lt;h2 id=&#34;references&#34;&gt;References
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://nvd.nist.gov/vuln/detail/CVE-2026-42945&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;NVD: CVE-2026-42945&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://nginx.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;nginx.org release information&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://my.f5.com/manage/s/article/K000161019&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;F5 Security Advisory K000161019&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://depthfirst.com/nginx-rift&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DepthFirst: Nginx Rift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Copy Fail CVE-2026-31431: Container Escape Risk in the Linux Kernel File-Copy Path</title>
        <link>https://knightli.com/en/2026/05/01/copy-fail-cve-2026-31431-linux-kernel-container-escape/</link>
        <pubDate>Fri, 01 May 2026 18:42:34 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/01/copy-fail-cve-2026-31431-linux-kernel-container-escape/</guid>
        <description>&lt;p&gt;Copy Fail is a vulnerability in the Linux kernel file-copy path, tracked as &lt;code&gt;CVE-2026-31431&lt;/code&gt;.
Bugcrowd&amp;rsquo;s analysis describes it as a kernel-level issue worth attention: under specific conditions, an unprivileged user can abuse file-copy logic to trigger unauthorized writes, leading to privilege escalation or container escape.&lt;/p&gt;
&lt;p&gt;From a risk perspective, this is not a normal application-layer vulnerability.
The issue happens in the kernel path that handles file copying and page cache behavior, so its impact can extend to containers, shared hosts, CI/CD runners, PaaS platforms, and multi-tenant Linux environments.
If an attacker can already run low-privileged code on a system, the vulnerability may become a stepping stone for breaking through isolation boundaries.&lt;/p&gt;
&lt;h2 id=&#34;where-the-vulnerability-roughly-lives&#34;&gt;Where the Vulnerability Roughly Lives
&lt;/h2&gt;&lt;p&gt;Copy Fail is related to Linux kernel file-copy capabilities.
Modern Linux provides several efficient copy paths, such as &lt;code&gt;copy_file_range&lt;/code&gt;, splice-like paths, and data-copy optimizations across different file systems.
These mechanisms are designed to reduce data movement between user space and kernel space and improve large-file copy performance.&lt;/p&gt;
&lt;p&gt;The problem is that high-performance copy paths often reuse page cache, file offsets, permission checks, and file-system callbacks.
If a boundary condition is not handled strictly enough, the kernel may perform a write in the wrong permission context, or expose data pages that should not be controlled by the attacker.&lt;/p&gt;
&lt;p&gt;The core risk of Copy Fail can be summarized as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the attacker does not need root privileges;&lt;/li&gt;
&lt;li&gt;the attack entry point comes from common file-copy capabilities;&lt;/li&gt;
&lt;li&gt;the affected logic runs in kernel space;&lt;/li&gt;
&lt;li&gt;in container environments, the vulnerability may bypass namespace and mount isolation;&lt;/li&gt;
&lt;li&gt;successful exploitation may write to host content that the container should not be able to modify.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is why it has drawn attention.
Container security depends on isolation provided by the Linux kernel. Once a kernel path itself allows unauthorized writes, the container boundary becomes fragile.&lt;/p&gt;
&lt;h2 id=&#34;why-container-scenarios-are-more-sensitive&#34;&gt;Why Container Scenarios Are More Sensitive
&lt;/h2&gt;&lt;p&gt;Containers are not virtual machines.
Processes inside a container share the same Linux kernel with the host and are isolated through mechanisms such as namespaces, cgroups, capabilities, seccomp, and AppArmor/SELinux.&lt;/p&gt;
&lt;p&gt;If a vulnerability exists in a user-space service, it usually affects only one container or one process.
But if the vulnerability is in the kernel, especially one that can be triggered by an unprivileged user, an attacker may influence the host from inside a container.&lt;/p&gt;
&lt;p&gt;That is where Copy Fail becomes dangerous.
Many platforms allow users to submit build jobs, run scripts, start containers, or execute plugins.
As long as an attacker can run code inside a container, they may try to use the kernel file-copy path to break isolation.&lt;/p&gt;
&lt;p&gt;High-risk environments include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;untrusted workloads in Kubernetes clusters;&lt;/li&gt;
&lt;li&gt;shared runners on CI/CD platforms;&lt;/li&gt;
&lt;li&gt;sandbox platforms that allow users to upload and execute code;&lt;/li&gt;
&lt;li&gt;multi-tenant Linux hosts;&lt;/li&gt;
&lt;li&gt;containerized PaaS environments;&lt;/li&gt;
&lt;li&gt;systems that run third-party plugins or extensions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If these environments are running affected kernels and lack extra restrictions, the risk rises significantly.&lt;/p&gt;
&lt;h2 id=&#34;impact-depends-on-kernel-patch-status&#34;&gt;Impact Depends on Kernel Patch Status
&lt;/h2&gt;&lt;p&gt;You cannot judge this kind of vulnerability only by distribution name.
For the same Ubuntu, Debian, RHEL, Fedora, or Arch version, exposure depends on the kernel package that is actually running and whether the distribution has backported the fix.&lt;/p&gt;
&lt;p&gt;During triage, prioritize three checks:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The currently running kernel version.&lt;/li&gt;
&lt;li&gt;Whether the distribution security advisory mentions &lt;code&gt;CVE-2026-31431&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Whether the cloud provider or managed platform has patched the host kernel.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can first confirm the kernel version on the system:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uname -a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then check distribution security advisories, kernel changelogs, or cloud platform notices.
Do not judge safety only from the major version, because many enterprise distributions backport security fixes to older kernel branches.&lt;/p&gt;
&lt;h2 id=&#34;temporary-mitigation-ideas&#34;&gt;Temporary Mitigation Ideas
&lt;/h2&gt;&lt;p&gt;The most reliable fix is still to update the kernel.
But in environments where patches cannot be deployed immediately, you can reduce exposure first.&lt;/p&gt;
&lt;p&gt;Common mitigation directions include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;disallow untrusted users from running privileged containers;&lt;/li&gt;
&lt;li&gt;avoid mounting sensitive host paths into containers;&lt;/li&gt;
&lt;li&gt;tighten container capabilities, especially avoiding unnecessary &lt;code&gt;CAP_SYS_ADMIN&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;use seccomp, AppArmor, or SELinux to restrict dangerous system calls and file access;&lt;/li&gt;
&lt;li&gt;move untrusted workloads to stronger virtual-machine isolation;&lt;/li&gt;
&lt;li&gt;destroy CI/CD runners per job instead of reusing the same host for a long time;&lt;/li&gt;
&lt;li&gt;monitor abnormal file writes, permission changes, and signs of container escape.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These measures do not replace patches.
Their role is to reduce exploitation success rate and impact, especially before patches reach production systems.&lt;/p&gt;
&lt;h2 id=&#34;patching-priority&#34;&gt;Patching Priority
&lt;/h2&gt;&lt;p&gt;Prioritize remediation by environment risk.&lt;/p&gt;
&lt;p&gt;Patch first:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;platforms that expose container execution to external users;&lt;/li&gt;
&lt;li&gt;CI/CD nodes that run untrusted code;&lt;/li&gt;
&lt;li&gt;multi-tenant Kubernetes nodes;&lt;/li&gt;
&lt;li&gt;systems with user-defined plugins or script execution;&lt;/li&gt;
&lt;li&gt;shared development machines, teaching machines, and lab platforms.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Relatively lower priority:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;single-user desktops;&lt;/li&gt;
&lt;li&gt;internal hosts that only run trusted services;&lt;/li&gt;
&lt;li&gt;environments that already isolate untrusted code with virtual machines.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Even when risk is lower, it is still best to update the kernel through the distribution.
Kernel vulnerabilities are often chained into more complex attacks, and delaying patches rarely provides much benefit.&lt;/p&gt;
&lt;h2 id=&#34;checklist-for-operations-teams&#34;&gt;Checklist for Operations Teams
&lt;/h2&gt;&lt;p&gt;You can process it in this order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Inventory all Linux hosts and container nodes.&lt;/li&gt;
&lt;li&gt;Mark machines that run untrusted code.&lt;/li&gt;
&lt;li&gt;Check the current kernel version and distribution security advisories.&lt;/li&gt;
&lt;li&gt;Update high-risk nodes first.&lt;/li&gt;
&lt;li&gt;Apply temporary isolation policies to nodes that cannot be updated immediately.&lt;/li&gt;
&lt;li&gt;Review container runtime configuration and remove unnecessary privileges and host mounts.&lt;/li&gt;
&lt;li&gt;Reboot nodes after updating and confirm that the new kernel is actually running.&lt;/li&gt;
&lt;li&gt;Keep change records for later audit.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Installing a kernel package does not mean the system is already running the new kernel.
You must reboot after updating and confirm again:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uname -a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;The key point of Copy Fail / &lt;code&gt;CVE-2026-31431&lt;/code&gt; is not that an application crashes, but that there is a permission-boundary issue in the Linux kernel file-copy path.
It gives unprivileged code a chance to touch higher-privilege data-write paths, so it deserves special attention in container and multi-tenant environments.&lt;/p&gt;
&lt;p&gt;When handling this type of vulnerability, the two most important actions are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;follow kernel patches from your distribution or cloud provider as soon as possible;&lt;/li&gt;
&lt;li&gt;before patches are deployed, restrict untrusted code, privileged containers, and sensitive host mounts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For personal desktops, it may not be an immediate panic issue.
But for teams running container platforms, CI/CD, sandboxes, and shared hosts, it should be treated as a high-priority kernel security update.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.bugcrowd.com/blog/what-we-know-about-copy-fail-cve-2026-31431/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bugcrowd: What We Know About Copy Fail CVE-2026-31431&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://copy.fail/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Copy Fail official explanation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
