<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Security Updates on KnightLi Blog</title>
        <link>https://www.knightli.com/en/categories/security-updates/</link>
        <description>Recent content in Security Updates on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sun, 17 May 2026 09:29:03 +0800</lastBuildDate><atom:link href="https://www.knightli.com/en/categories/security-updates/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>ssh-keysign-pwn (CVE-2026-46333): Linux Local Information Disclosure, SSH Host Keys, and /etc/shadow Risk</title>
        <link>https://www.knightli.com/en/2026/05/17/ssh-keysign-pwn-cve-2026-46333/</link>
        <pubDate>Sun, 17 May 2026 09:29:03 +0800</pubDate>
        
        <guid>https://www.knightli.com/en/2026/05/17/ssh-keysign-pwn-cve-2026-46333/</guid>
        <description>&lt;p&gt;&lt;code&gt;ssh-keysign-pwn&lt;/code&gt; refers to a set of exploitation paths around a logic flaw in Linux kernel &lt;code&gt;__ptrace_may_access()&lt;/code&gt;, assigned &lt;code&gt;CVE-2026-46333&lt;/code&gt;. It is not a remote unauthenticated flaw and it does not directly hand out a root shell, but the risk is still high: a low-privileged local user may read root-owned sensitive files that should be inaccessible, such as SSH host private keys or &lt;code&gt;/etc/shadow&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For operations teams, the priority is not reproducing a PoC. The priority is to identify affected machines, upgrade the kernel, reboot into the fixed kernel, and rotate SSH host keys or reset passwords when necessary.&lt;/p&gt;
&lt;h2 id=&#34;bottom-line&#34;&gt;Bottom line
&lt;/h2&gt;&lt;p&gt;This vulnerability deserves high handling priority for four reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It can be triggered by a low-privileged local user and does not require root.&lt;/li&gt;
&lt;li&gt;Public PoC code is available, lowering the exploitation barrier.&lt;/li&gt;
&lt;li&gt;The potential targets are not ordinary files, but SSH host private keys and &lt;code&gt;/etc/shadow&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The fix requires a kernel patch and reboot; installing packages without rebooting is not enough.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your servers have multiple users, local shell access, shared hosting, CI runners, container hosts, student lab machines, bastion hosts, or any local users you do not fully trust, handle this first.&lt;/p&gt;
&lt;h2 id=&#34;what-the-vulnerability-is&#34;&gt;What the vulnerability is
&lt;/h2&gt;&lt;p&gt;Qualys disclosed details on oss-security on May 15, 2026. They had previously reported a Linux kernel &lt;code&gt;__ptrace_may_access()&lt;/code&gt; logic issue to &lt;code&gt;security@kernel.org&lt;/code&gt;, and the upstream fix had already been merged by Linus. Public exploit code then appeared, so Qualys posted the details to oss-security.&lt;/p&gt;
&lt;p&gt;The Linux kernel CVE team later assigned &lt;code&gt;CVE-2026-46333&lt;/code&gt;. The NVD page lists kernel.org as the source, and the description maps to the kernel commit &lt;code&gt;ptrace: slightly saner &#39;get_dumpable()&#39; logic&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In simple terms, the bug sits in a process exit path. When some privileged processes are exiting, ptrace-related access-check logic in the kernel may bypass a dumpable check that should have applied because the target task no longer has an &lt;code&gt;mm&lt;/code&gt;. An attacker can race a very narrow timing window and obtain file descriptors that the exiting privileged process still has open.&lt;/p&gt;
&lt;p&gt;That is why the issue is called &lt;code&gt;ssh-keysign-pwn&lt;/code&gt;: one public exploitation path uses &lt;code&gt;ssh-keysign&lt;/code&gt; to read SSH host private keys.&lt;/p&gt;
&lt;h2 id=&#34;why-ssh-host-private-keys-and-etcshadow-may-be-exposed&#34;&gt;Why SSH host private keys and /etc/shadow may be exposed
&lt;/h2&gt;&lt;p&gt;At its core, this is a local information disclosure issue. It abuses a window during privileged process exit where the memory descriptor is gone, but file descriptors have not yet been closed.&lt;/p&gt;
&lt;p&gt;The AlmaLinux advisory explains the risk clearly: if a privileged program opened sensitive files before dropping privileges, and an attacker successfully grabs the corresponding file descriptor during the exit window, those sensitive files may become readable.&lt;/p&gt;
&lt;p&gt;Two commonly discussed targets are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ssh-keysign&lt;/code&gt;: may involve SSH host private keys such as &lt;code&gt;/etc/ssh/ssh_host_*_key&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chage&lt;/code&gt;: may involve &lt;code&gt;/etc/shadow&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If SSH host private keys leak, an attacker may impersonate the host and undermine SSH host identity trust. If &lt;code&gt;/etc/shadow&lt;/code&gt; leaks, an attacker can crack password hashes offline and expand the compromise later.&lt;/p&gt;
&lt;p&gt;That is why this should be treated as high priority even though it is not a &amp;ldquo;direct root shell&amp;rdquo; bug.&lt;/p&gt;
&lt;h2 id=&#34;how-to-assess-exposure&#34;&gt;How to assess exposure
&lt;/h2&gt;&lt;p&gt;From the upstream perspective, this is a Linux kernel vulnerability. NVD records show the issue entered the NVD dataset on May 15, 2026, with no CVSS score assigned at that time.&lt;/p&gt;
&lt;p&gt;Distribution status should be checked against each vendor&amp;rsquo;s own advisory:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AlmaLinux 8, 9, and 10 published guidance and updated it on May 16, 2026 to say patched kernels had reached production repositories.&lt;/li&gt;
&lt;li&gt;Debian Security Tracker lists vulnerable and fixed states, plus fixed versions, for bullseye, bookworm, trixie, sid, and other branches.&lt;/li&gt;
&lt;li&gt;For other distributions, check the official security pages or repositories for Ubuntu, Red Hat, SUSE, Arch, Alpine, and so on.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do not judge safety only by the upstream kernel version. Distributions backport fixes, so the same upstream-looking version number may mean different patch states across distributions.&lt;/p&gt;
&lt;h2 id=&#34;which-machines-to-prioritize&#34;&gt;Which machines to prioritize
&lt;/h2&gt;&lt;p&gt;Prioritize remediation in this order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Multi-user servers and shared hosts.&lt;/li&gt;
&lt;li&gt;Bastion hosts, teaching machines, development machines, and other systems with normal shell accounts.&lt;/li&gt;
&lt;li&gt;CI runners, build machines, and hosting platform nodes.&lt;/li&gt;
&lt;li&gt;Container and virtualization hosts, especially where not-fully-trusted workloads coexist.&lt;/li&gt;
&lt;li&gt;Public service machines. The vulnerability needs local access, but the risk compounds once a web bug, RCE, weak password, or similar path gives an attacker a low-privileged foothold.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pure single-user desktop systems are lower risk, but they should still be updated. Local low-privileged code execution is common on desktops through browsers, developer tools, scripts, and third-party software.&lt;/p&gt;
&lt;h2 id=&#34;remediation-guidance&#34;&gt;Remediation guidance
&lt;/h2&gt;&lt;p&gt;The preferred fix is to install the fixed kernel supplied by your distribution and reboot.&lt;/p&gt;
&lt;p&gt;Commands differ by distribution, but the principle is the same:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Refresh package metadata.&lt;/li&gt;
&lt;li&gt;Install the kernel package containing the &lt;code&gt;CVE-2026-46333&lt;/code&gt; fix.&lt;/li&gt;
&lt;li&gt;Reboot into the new kernel.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;uname -r&lt;/code&gt; and the distribution security advisory to verify the running kernel is fixed.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The AlmaLinux advisory says fixed kernels are available in production repositories and users can run the usual &lt;code&gt;dnf upgrade&lt;/code&gt; and reboot. The Debian tracker also lists fixed versions for multiple branches.&lt;/p&gt;
&lt;p&gt;Important: if you only install a new kernel package but do not reboot, the old vulnerable kernel is still running.&lt;/p&gt;
&lt;h2 id=&#34;temporary-mitigation-tighten-ptrace_scope&#34;&gt;Temporary mitigation: tighten ptrace_scope
&lt;/h2&gt;&lt;p&gt;If you cannot reboot immediately, tighten Yama &lt;code&gt;ptrace_scope&lt;/code&gt; first.&lt;/p&gt;
&lt;p&gt;Qualys confirmed in a follow-up oss-security reply that setting &lt;code&gt;/proc/sys/kernel/yama/ptrace_scope&lt;/code&gt; to &lt;code&gt;2&lt;/code&gt; (admin-only attach) or &lt;code&gt;3&lt;/code&gt; (no attach) blocks the public exploitation paths they know about. They also noted that other theoretical exploitation paths may exist, so this is only a mitigation, not a fix.&lt;/p&gt;
&lt;p&gt;Temporary setting:&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.yama.ptrace_scope&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&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 setting:&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;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;kernel.yama.ptrace_scope = 3&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /etc/sysctl.d/99-ssh-keysign-pwn.conf
&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;&lt;code&gt;ptrace_scope=3&lt;/code&gt; disables ptrace attach and may affect debugging workflows such as &lt;code&gt;gdb&lt;/code&gt; and &lt;code&gt;strace -p&lt;/code&gt;. If production debugging is required, evaluate &lt;code&gt;2&lt;/code&gt;. Either way, schedule the kernel upgrade and reboot as soon as possible.&lt;/p&gt;
&lt;h2 id=&#34;should-ssh-host-keys-be-rotated&#34;&gt;Should SSH host keys be rotated?
&lt;/h2&gt;&lt;p&gt;Use a conservative approach if the machine had any of the following conditions around the disclosure window:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Untrusted local users.&lt;/li&gt;
&lt;li&gt;Shared hosting or container/CI multi-tenant environments.&lt;/li&gt;
&lt;li&gt;Web vulnerabilities, weak passwords, supply-chain scripts, or other paths that could give an attacker a local foothold.&lt;/li&gt;
&lt;li&gt;Suspicious local processes, unusual debugging behavior, or public PoC files in logs.&lt;/li&gt;
&lt;li&gt;Long exposure before patching.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Conservative handling includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rotate SSH host keys after patching and rebooting.&lt;/li&gt;
&lt;li&gt;Update known-host fingerprint management systems.&lt;/li&gt;
&lt;li&gt;Notify automation that depends on the host fingerprint.&lt;/li&gt;
&lt;li&gt;Review SSH connection alerts so legitimate fingerprint changes are not mistaken for man-in-the-middle attacks, and real risks are not ignored.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If &lt;code&gt;/etc/shadow&lt;/code&gt; may have leaked, also evaluate password resets, weak-password bans, and whether old hashes could be cracked offline.&lt;/p&gt;
&lt;h2 id=&#34;what-to-monitor&#34;&gt;What to monitor
&lt;/h2&gt;&lt;p&gt;The exploitation window is short, so traditional logs may not capture everything. Still, watch for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Files such as &lt;code&gt;ssh-keysign-pwn&lt;/code&gt;, &lt;code&gt;chage_pwn&lt;/code&gt;, or similar PoC artifacts in normal user directories.&lt;/li&gt;
&lt;li&gt;Suspicious compilation activity, such as unfamiliar C programs compiled in a short window.&lt;/li&gt;
&lt;li&gt;Signs of abnormal access to &lt;code&gt;/etc/ssh/ssh_host_*_key&lt;/code&gt; or &lt;code&gt;/etc/shadow&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Unusual &lt;code&gt;pidfd_getfd&lt;/code&gt;, &lt;code&gt;ptrace&lt;/code&gt;, or debugger-related activity.&lt;/li&gt;
&lt;li&gt;External reports of unexpected SSH host fingerprint changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These signals cannot prove exploitation occurred, and their absence cannot prove it did not. The real priorities remain patching, rebooting, credential rotation, and risk isolation.&lt;/p&gt;
&lt;h2 id=&#34;common-misconceptions&#34;&gt;Common misconceptions
&lt;/h2&gt;&lt;p&gt;First: this is not an OpenSSH remote vulnerability. The name includes &lt;code&gt;ssh-keysign&lt;/code&gt;, but the root cause is Linux kernel ptrace access-check logic, not the remote authentication path in &lt;code&gt;sshd&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Second: no local users does not mean no risk. The bug does require local execution, but real attack chains often obtain a low-privileged local foothold first through web services, CI, scripts, weak passwords, or container escape paths.&lt;/p&gt;
&lt;p&gt;Third: setting &lt;code&gt;ptrace_scope&lt;/code&gt; is not enough. It is a temporary mitigation, not the root fix. Kernel update and reboot are still required.&lt;/p&gt;
&lt;p&gt;Fourth: &amp;ldquo;no root shell&amp;rdquo; does not mean &amp;ldquo;no incident.&amp;rdquo; Exposure of SSH host private keys or &lt;code&gt;/etc/shadow&lt;/code&gt; can be enough to enable lateral movement, host impersonation, and offline password cracking.&lt;/p&gt;
&lt;h2 id=&#34;response-checklist&#34;&gt;Response checklist
&lt;/h2&gt;&lt;p&gt;Suggested order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Inventory affected Linux hosts, especially multi-user and shared environments.&lt;/li&gt;
&lt;li&gt;Check distribution security advisories and identify the fixed kernel version.&lt;/li&gt;
&lt;li&gt;Install the fixed kernel and reboot.&lt;/li&gt;
&lt;li&gt;For machines that cannot reboot immediately, set &lt;code&gt;kernel.yama.ptrace_scope=2&lt;/code&gt; or &lt;code&gt;3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;After remediation, verify the running kernel version.&lt;/li&gt;
&lt;li&gt;Rotate SSH host keys on high-risk machines.&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;/etc/shadow&lt;/code&gt; exposure is suspected, evaluate password resets and account audits.&lt;/li&gt;
&lt;li&gt;Check for public PoCs, unusual compilation, and suspicious local debugging behavior.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;ssh-keysign-pwn&lt;/code&gt; (&lt;code&gt;CVE-2026-46333&lt;/code&gt;) is a local information disclosure vulnerability rooted in Linux kernel &lt;code&gt;__ptrace_may_access()&lt;/code&gt; logic. It does not allow a remote attacker to break in directly and it does not directly grant a root shell, but it may let a low-privileged local user read high-value sensitive files, making it especially important in multi-user, shared hosting, CI, and container-host environments.&lt;/p&gt;
&lt;p&gt;The reliable fix is to upgrade to a distribution-provided fixed kernel and reboot. &lt;code&gt;ptrace_scope=2/3&lt;/code&gt; can be used as a temporary mitigation, but it does not replace patching. Critical hosts exposed during the risk window should also be evaluated for SSH host key rotation and password risk.&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.openwall.com/lists/oss-security/2026/05/15/2&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;oss-security: Qualys disclosure of the __ptrace_may_access() logic issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.openwall.com/lists/oss-security/2026/05/15/9&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;oss-security: Qualys confirms the CVE-2026-46333 identifier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.openwall.com/lists/oss-security/2026/05/15/8&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;oss-security: Qualys confirms ptrace_scope temporary mitigation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://nvd.nist.gov/vuln/detail/CVE-2026-46333&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;NVD: CVE-2026-46333&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://security-tracker.debian.org/tracker/CVE-2026-46333&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Debian Security Tracker: CVE-2026-46333&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://almalinux.org/he/blog/2026-05-15-ssh-keysign-pwn-cve-2026-46333/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;AlmaLinux: ssh-keysign-pwn (CVE-2026-46333) Patches Released&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/torvalds/linux/commit/31e62c2ebbfdc3fe3dbdf5e02c92a9dc67087a3a&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Linux upstream fix: ptrace get_dumpable() logic&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://www.knightli.com/en/2026/05/15/nginx-rift-cve-2026-42945/</link>
        <pubDate>Fri, 15 May 2026 17:55:42 +0800</pubDate>
        
        <guid>https://www.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>Dirty Frag, Copy Fail, and Fragnesia: Comparing Three Recent Linux Local Privilege Escalation Flaws</title>
        <link>https://www.knightli.com/en/2026/05/15/linux-lpe-dirty-frag-copy-fail-fragnesia-analysis/</link>
        <pubDate>Fri, 15 May 2026 13:24:04 +0800</pubDate>
        
        <guid>https://www.knightli.com/en/2026/05/15/linux-lpe-dirty-frag-copy-fail-fragnesia-analysis/</guid>
        <description>&lt;p&gt;Several high-profile Linux kernel local privilege escalation vulnerabilities have appeared recently: Dirty Frag, Copy Fail, and Fragnesia. They look like a single family of events because the end result is similar: a low-privilege local user may be able to become root.&lt;/p&gt;
&lt;p&gt;But from an operations perspective, they should not be treated as one vulnerability. Their entry modules, trigger paths, mitigation options, and patch timelines differ. A better way to understand them is this: they expose a shared risk around the complex boundary between the Linux page cache, &lt;code&gt;splice&lt;/code&gt;, socket buffers, and crypto paths.&lt;/p&gt;
&lt;p&gt;This post only covers risk and response analysis. It does not include reproducible exploitation steps.&lt;/p&gt;
&lt;h2 id=&#34;what-the-three-flaws-are&#34;&gt;What the Three Flaws Are
&lt;/h2&gt;&lt;h3 id=&#34;dirty-frag-cve-2026-43284&#34;&gt;Dirty Frag: CVE-2026-43284
&lt;/h3&gt;&lt;p&gt;Dirty Frag mainly points to a page-cache write issue in the Linux kernel networking path. Public write-ups usually discuss it together with two issues: the &lt;code&gt;xfrm-ESP&lt;/code&gt; side, CVE-2026-43284, and the &lt;code&gt;rxrpc&lt;/code&gt; side, CVE-2026-43500.&lt;/p&gt;
&lt;p&gt;CVE-2026-43284 is related to in-place decryption when ESP handles shared &lt;code&gt;skb&lt;/code&gt; fragments. The key point is not that an attacker directly modifies a disk file, but that the kernel can write to shared pages it should not modify, affecting file contents in the page cache.&lt;/p&gt;
&lt;p&gt;Operationally, remember that Dirty Frag reaches &lt;code&gt;esp4&lt;/code&gt;, &lt;code&gt;esp6&lt;/code&gt;, and &lt;code&gt;rxrpc&lt;/code&gt;, a set of kernel modules and networking subsystem paths. It is tied to IPsec, ESP, and RxRPC, so temporary mitigation also focuses on those modules.&lt;/p&gt;
&lt;h3 id=&#34;copy-fail-cve-2026-31431&#34;&gt;Copy Fail: CVE-2026-31431
&lt;/h3&gt;&lt;p&gt;Copy Fail is a Linux kernel local privilege escalation vulnerability disclosed by Theori / Xint Code. Its entry point is not the IPsec networking path, but the kernel userspace crypto API around &lt;code&gt;algif_aead&lt;/code&gt; / &lt;code&gt;AF_ALG&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Public explanations describe it as originating from an in-place optimization introduced in 2017. In some cases, the kernel failed to copy data as expected and instead placed page-cache pages into a writable destination path. An attacker can combine &lt;code&gt;AF_ALG&lt;/code&gt; with &lt;code&gt;splice()&lt;/code&gt; to perform a small controlled write to page-cache-backed pages.&lt;/p&gt;
&lt;p&gt;Its risk comes from strong exploitability and broad impact across mainstream distributions. Unlike Dirty Frag, Copy Fail&amp;rsquo;s temporary mitigation focuses on restricting or disabling &lt;code&gt;algif_aead&lt;/code&gt;, and on limiting &lt;code&gt;AF_ALG&lt;/code&gt; socket creation in container and CI environments.&lt;/p&gt;
&lt;h3 id=&#34;fragnesia-cve-2026-46300&#34;&gt;Fragnesia: CVE-2026-46300
&lt;/h3&gt;&lt;p&gt;Fragnesia is another Linux kernel local privilege escalation vulnerability disclosed by V12 Security, and it belongs to a similar attack surface as Dirty Frag. It is not the same bug as Dirty Frag, but it still revolves around IPsec ESP / &lt;code&gt;rxrpc&lt;/code&gt; related modules and page-cache write effects.&lt;/p&gt;
&lt;p&gt;AlmaLinux describes it as the third local-root issue in the same broad code area. The key problem is that &lt;code&gt;skb_try_coalesce()&lt;/code&gt; did not preserve the shared-fragment marker when coalescing socket buffer fragments, which could later let the XFRM ESP-in-TCP receive path decrypt in place over external page-cache pages.&lt;/p&gt;
&lt;p&gt;In short, Fragnesia is closer to Dirty Frag. Both revolve around &lt;code&gt;esp4&lt;/code&gt;, &lt;code&gt;esp6&lt;/code&gt;, &lt;code&gt;rxrpc&lt;/code&gt;, &lt;code&gt;skb&lt;/code&gt; fragments, and ESP decryption paths. Their temporary mitigations also overlap heavily.&lt;/p&gt;
&lt;h2 id=&#34;similarities-why-they-are-dangerous&#34;&gt;Similarities: Why They Are Dangerous
&lt;/h2&gt;&lt;p&gt;The common thread is not that the exact code locations are identical, but that the attack outcome and risk model are very similar.&lt;/p&gt;
&lt;p&gt;First, all three are local privilege escalation issues. Attackers usually need ordinary local code execution first, then they can attempt to become root. For a single-user desktop this is not remote one-click compromise; for multi-user servers, CI runners, container hosts, shared development machines, and VPS instances with exposed SSH, low-privilege entry points are not rare.&lt;/p&gt;
&lt;p&gt;Second, all three involve page-cache writes. Attackers may not permanently modify the file on disk; instead, they affect the in-memory page-cache copy. This makes traditional integrity checks less reliable: the disk hash can remain normal while the execution path reads polluted page-cache content.&lt;/p&gt;
&lt;p&gt;Third, they are closer to deterministic logic bugs than timing-sensitive race conditions. Public material repeatedly notes that these issues do not require winning a race condition. Defenders should not underestimate exploit reliability based on older assumptions.&lt;/p&gt;
&lt;p&gt;Fourth, they amplify the risk of container and automation environments. Low-privilege code inside containers, CI jobs, build scripts, or third-party plugins can turn a &amp;ldquo;local issue&amp;rdquo; into a platform-level issue if it can reach the relevant host kernel interfaces.&lt;/p&gt;
&lt;h2 id=&#34;differences-one-mitigation-does-not-cover-all&#34;&gt;Differences: One Mitigation Does Not Cover All
&lt;/h2&gt;&lt;p&gt;The biggest difference is the entry module.&lt;/p&gt;
&lt;p&gt;Copy Fail&amp;rsquo;s critical entry point is &lt;code&gt;algif_aead&lt;/code&gt; / &lt;code&gt;AF_ALG&lt;/code&gt;, part of the kernel userspace crypto API. Its temporary defense focuses on disabling or restricting &lt;code&gt;algif_aead&lt;/code&gt;, and using seccomp to block containers from creating &lt;code&gt;AF_ALG&lt;/code&gt; sockets.&lt;/p&gt;
&lt;p&gt;Dirty Frag&amp;rsquo;s critical entry point is &lt;code&gt;xfrm-ESP&lt;/code&gt; and &lt;code&gt;rxrpc&lt;/code&gt;. It is closer to protocol and socket buffer handling paths. Temporary defense typically considers disabling &lt;code&gt;esp4&lt;/code&gt;, &lt;code&gt;esp6&lt;/code&gt;, and &lt;code&gt;rxrpc&lt;/code&gt;, but that can affect IPsec, VPNs, tunnels, or related networking capabilities.&lt;/p&gt;
&lt;p&gt;Fragnesia sits in a similar region to Dirty Frag, but the concrete issue is that &lt;code&gt;skb_try_coalesce()&lt;/code&gt; did not preserve the shared-fragment marker. It is more like another branch of the Dirty Frag risk surface than a Copy Fail crypto API issue.&lt;/p&gt;
&lt;p&gt;So, fixing Copy Fail does not mean Dirty Frag and Fragnesia are covered. Likewise, disabling &lt;code&gt;esp4&lt;/code&gt; / &lt;code&gt;esp6&lt;/code&gt; does not automatically remove Copy Fail. Their patch state and mitigation strategy must be checked separately.&lt;/p&gt;
&lt;h2 id=&#34;how-to-judge-exposure&#34;&gt;How to Judge Exposure
&lt;/h2&gt;&lt;p&gt;For these vulnerabilities, do not judge only by distribution name or kernel major version. Distributions backport fixes, cloud vendors maintain their own kernel branches, and enterprise distributions may carry additional patches.&lt;/p&gt;
&lt;p&gt;A safer sequence is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Check the distribution security advisory and kernel package changelog.&lt;/li&gt;
&lt;li&gt;Verify whether the current kernel package fixes the relevant CVE.&lt;/li&gt;
&lt;li&gt;For cloud servers, container hosts, and CI nodes, also check cloud or platform advisories.&lt;/li&gt;
&lt;li&gt;For temporary mitigations, confirm whether the business depends on the affected module.&lt;/li&gt;
&lt;li&gt;After a kernel update, schedule a reboot and confirm the running kernel has changed.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The most common trap is &amp;ldquo;the package is updated, but the machine has not rebooted.&amp;rdquo; Kernel vulnerabilities are not like ordinary userspace service updates. Until the system boots into the new kernel, the old kernel may still be running.&lt;/p&gt;
&lt;h2 id=&#34;operational-priority&#34;&gt;Operational Priority
&lt;/h2&gt;&lt;p&gt;The systems that deserve the highest priority are not all Linux machines equally. Start where low-privilege code execution is most likely.&lt;/p&gt;
&lt;p&gt;Highest-priority environments include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multi-user login servers&lt;/li&gt;
&lt;li&gt;CI / CD runners&lt;/li&gt;
&lt;li&gt;Build and artifact packaging machines&lt;/li&gt;
&lt;li&gt;Container hosts and Kubernetes nodes&lt;/li&gt;
&lt;li&gt;Shared development machines&lt;/li&gt;
&lt;li&gt;Cloud servers and VPS instances exposing SSH&lt;/li&gt;
&lt;li&gt;Platforms running third-party scripts, plugins, or job queues&lt;/li&gt;
&lt;li&gt;Machines with web vulnerabilities, weak passwords, or historical compromise signals&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Closed, single-user machines with no external code execution entry point are still at risk if vulnerable, but they can usually be handled later.&lt;/p&gt;
&lt;h2 id=&#34;how-to-treat-temporary-mitigation&#34;&gt;How to Treat Temporary Mitigation
&lt;/h2&gt;&lt;p&gt;Temporary mitigation is not a replacement for a patch. Its value is reducing exposure when you cannot immediately reboot or are waiting for distribution packages.&lt;/p&gt;
&lt;p&gt;For Copy Fail, focus on &lt;code&gt;algif_aead&lt;/code&gt; and &lt;code&gt;AF_ALG&lt;/code&gt;. If the business does not use the kernel AF_ALG crypto interface, evaluate disabling the related module. In container environments, check seccomp policies first so untrusted workloads cannot freely create the relevant socket.&lt;/p&gt;
&lt;p&gt;For Dirty Frag and Fragnesia, focus on &lt;code&gt;esp4&lt;/code&gt;, &lt;code&gt;esp6&lt;/code&gt;, and &lt;code&gt;rxrpc&lt;/code&gt;. If the system does not depend on IPsec ESP, related VPNs, tunnels, or RxRPC, consider temporary disabling. Do not do this blindly in production because these modules may support real networking workloads.&lt;/p&gt;
&lt;p&gt;The final path is still a kernel update. Temporary mitigation can reduce attack surface, but it cannot prove the system is fully safe.&lt;/p&gt;
&lt;h2 id=&#34;what-these-three-flaws-tell-us&#34;&gt;What These Three Flaws Tell Us
&lt;/h2&gt;&lt;p&gt;The important warning is not just the number of CVEs. These flaws all cluster around high-complexity kernel paths: zero-copy, &lt;code&gt;splice&lt;/code&gt;, socket buffers, the page cache, crypto interfaces, and protocol-stack optimizations.&lt;/p&gt;
&lt;p&gt;These paths deliver performance, but their ownership boundaries are hard to maintain. Whether a fragment is shared, whether a page may be written in place, and whether an optimization truly only reduces copying all become security boundaries.&lt;/p&gt;
&lt;p&gt;For security and operations teams, the takeaways are practical:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Treat local privilege escalation as an amplifier for existing low-privilege entry points.&lt;/li&gt;
&lt;li&gt;Containers are not a natural isolation boundary for kernel vulnerabilities.&lt;/li&gt;
&lt;li&gt;File integrity checks cannot look only at disk contents.&lt;/li&gt;
&lt;li&gt;CI, build machines, and plugin platforms are high-priority assets.&lt;/li&gt;
&lt;li&gt;Kernel patching requires verifying both &amp;ldquo;installed&amp;rdquo; and &amp;ldquo;running&amp;rdquo; states.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;Dirty Frag, Copy Fail, and Fragnesia are all high-priority recent Linux local privilege escalation events, but they are not three names for one vulnerability.&lt;/p&gt;
&lt;p&gt;Copy Fail goes through the &lt;code&gt;algif_aead&lt;/code&gt; / &lt;code&gt;AF_ALG&lt;/code&gt; crypto API path. Dirty Frag goes through &lt;code&gt;xfrm-ESP&lt;/code&gt; and &lt;code&gt;rxrpc&lt;/code&gt;. Fragnesia, in a nearby Dirty Frag attack surface, again triggers page-cache write risk through &lt;code&gt;skb&lt;/code&gt; fragment marker handling.&lt;/p&gt;
&lt;p&gt;Operationally, the safest response is to update the kernel according to distribution advisories and reboot. For systems that cannot be updated immediately, evaluate temporary module disabling or tighter seccomp rules based on the actual vulnerability entry point. Prioritize multi-tenant systems, CI, container hosts, and shared development environments.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Theori Copy Fail notes: &lt;a class=&#34;link&#34; href=&#34;https://github.com/theori-io/copy-fail-CVE-2026-31431&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/theori-io/copy-fail-CVE-2026-31431&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CERT-EU Copy Fail advisory: &lt;a class=&#34;link&#34; href=&#34;https://cert.europa.eu/publications/security-advisories/2026-005/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://cert.europa.eu/publications/security-advisories/2026-005/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;AlmaLinux Dirty Frag notes: &lt;a class=&#34;link&#34; href=&#34;https://almalinux.org/blog/2026-05-07-dirty-frag/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://almalinux.org/blog/2026-05-07-dirty-frag/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;AlmaLinux Fragnesia notes: &lt;a class=&#34;link&#34; href=&#34;https://almalinux.org/blog/2026-05-13-fragnesia-cve-2026-46300/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://almalinux.org/blog/2026-05-13-fragnesia-cve-2026-46300/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;V12 Security Fragnesia PoC notes: &lt;a class=&#34;link&#34; href=&#34;https://github.com/v12-security/pocs/tree/main/fragnesia&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/v12-security/pocs/tree/main/fragnesia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Fragnesia (CVE-2026-46300): Impact and Mitigation for a Linux Kernel Local Privilege Escalation Flaw</title>
        <link>https://www.knightli.com/en/2026/05/15/linux-kernel-fragnesia-local-privilege-escalation/</link>
        <pubDate>Fri, 15 May 2026 13:18:01 +0800</pubDate>
        
        <guid>https://www.knightli.com/en/2026/05/15/linux-kernel-fragnesia-local-privilege-escalation/</guid>
        <description>&lt;p&gt;The Linux kernel has another local privilege escalation issue in the same broad attack surface as Dirty Frag: Fragnesia (CVE-2026-46300).&lt;/p&gt;
&lt;p&gt;According to V12 Security, Fragnesia is a Linux local privilege escalation vulnerability. An attacker does not need existing high privileges on the host. If they can execute local code, they may be able to abuse a logic flaw in the kernel&amp;rsquo;s XFRM ESP-in-TCP subsystem to modify read-only file contents through the page cache and eventually trigger a root shell.&lt;/p&gt;
&lt;p&gt;Source:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;V12 Security PoC notes: &lt;a class=&#34;link&#34; href=&#34;https://github.com/v12-security/pocs/blob/main/fragnesia/README.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/v12-security/pocs/blob/main/fragnesia/README.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This post does not cover reproducible exploitation steps. It focuses on the operational risk and response path.&lt;/p&gt;
&lt;h2 id=&#34;how-it-relates-to-dirty-frag&#34;&gt;How It Relates to Dirty Frag
&lt;/h2&gt;&lt;p&gt;V12 Security classifies Fragnesia as part of the Dirty Frag vulnerability class. It is not the same bug as Dirty Frag, but it lives in a related attack surface: Linux kernel XFRM ESP-in-TCP.&lt;/p&gt;
&lt;p&gt;XFRM is the Linux kernel framework for IPsec processing. ESP-in-TCP is related to carrying ESP encrypted traffic over TCP. Fragnesia comes from logic around shared page fragments and socket buffer coalescing: in some cases, the kernel can lose track of the fact that a fragment is still shared, leaving room for controlled writes.&lt;/p&gt;
&lt;p&gt;This resembles the broader Dirty Pipe / Dirty Frag family of page-cache write issues. The concrete code paths differ, but the effect again lands on the page-cache copy of a read-only file.&lt;/p&gt;
&lt;h2 id=&#34;why-the-risk-is-high&#34;&gt;Why the Risk Is High
&lt;/h2&gt;&lt;p&gt;Fragnesia is dangerous for three reasons.&lt;/p&gt;
&lt;p&gt;First, it is a local privilege escalation. Once an attacker can run ordinary user-level code on a system, they may be able to become root. That matters especially on multi-user servers, container hosts, CI runners, shared development machines, VPS instances, and systems exposing shell access.&lt;/p&gt;
&lt;p&gt;Second, it does not rely on a traditional race condition. V12&amp;rsquo;s notes describe a path that drives ESP-in-TCP processing over file-backed pages already spliced into a socket buffer, allowing byte-level influence over page-cache contents. That makes the issue more practical than a purely theoretical bug.&lt;/p&gt;
&lt;p&gt;Third, it changes the page cache, not the on-disk file. The public notes use &lt;code&gt;/usr/bin/su&lt;/code&gt; as an example target. After successful exploitation, the file on disk is not permanently modified; the modified copy lives in memory. Integrity checks that only compare disk hashes may miss this.&lt;/p&gt;
&lt;p&gt;That is the awkward part for administrators: the file can look unchanged, but executing the polluted page-cache copy of a target binary may still trigger privilege escalation.&lt;/p&gt;
&lt;h2 id=&#34;known-affected-scope&#34;&gt;Known Affected Scope
&lt;/h2&gt;&lt;p&gt;V12 Security states that kernels affected by Dirty Frag and missing the relevant May 13, 2026 patches are also affected by Fragnesia. Publicly tested environments include Ubuntu 22.04, Ubuntu 24.04, and kernels such as &lt;code&gt;6.8.0-111-generic&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;There are two important caveats.&lt;/p&gt;
&lt;p&gt;First, do not judge only by the distribution major version. Whether Ubuntu 22.04 or 24.04 is affected depends on the actual kernel patch state, not just the distribution name.&lt;/p&gt;
&lt;p&gt;Second, do not rely only on default AppArmor restrictions for unprivileged user namespaces. Ubuntu&amp;rsquo;s AppArmor restrictions can raise the bar, but the disclosure treats that as an additional bypass problem, not as a fix for the vulnerability itself.&lt;/p&gt;
&lt;p&gt;The reliable path is still to check distribution security advisories and kernel package updates.&lt;/p&gt;
&lt;h2 id=&#34;temporary-mitigation&#34;&gt;Temporary Mitigation
&lt;/h2&gt;&lt;p&gt;If a system cannot be upgraded immediately, first check whether it depends on the relevant protocol modules.&lt;/p&gt;
&lt;p&gt;V12 gives the same mitigation direction as Dirty Frag: if the system does not depend on IPsec ESP or RxRPC, administrators can consider disabling modules such as &lt;code&gt;esp4&lt;/code&gt;, &lt;code&gt;esp6&lt;/code&gt;, and &lt;code&gt;rxrpc&lt;/code&gt;. This can affect networking features, so production systems should not do it blindly. Confirm whether the environment uses IPsec, VPNs, tunnels, or related kernel functionality.&lt;/p&gt;
&lt;p&gt;A safer response order is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Check whether the distribution has published a kernel security update.&lt;/li&gt;
&lt;li&gt;Install the kernel patch and schedule a reboot first.&lt;/li&gt;
&lt;li&gt;If immediate upgrade is impossible, evaluate temporary module disabling.&lt;/li&gt;
&lt;li&gt;Prioritize multi-user systems and CI / build environments.&lt;/li&gt;
&lt;li&gt;Review unnecessary local accounts, shell access, container escape surface, and low-privilege execution entry points.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Disabling modules should not be treated as the final fix. It is only a way to reduce exposure while moving toward a patched kernel.&lt;/p&gt;
&lt;h2 id=&#34;if-exploitation-is-suspected&#34;&gt;If Exploitation Is Suspected
&lt;/h2&gt;&lt;p&gt;One key feature of Fragnesia is page-cache pollution. V12 notes that after exploitation, the target file&amp;rsquo;s page-cache copy may contain injected content, and later execution can still behave abnormally until the page is evicted or the system is rebooted.&lt;/p&gt;
&lt;p&gt;If exploitation is suspected, do at least the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preserve logs and audit records as soon as possible.&lt;/li&gt;
&lt;li&gt;Check recent abnormal local logins, low-privilege user activity, suspicious processes, and root shell traces.&lt;/li&gt;
&lt;li&gt;Clear the relevant page cache or reboot directly.&lt;/li&gt;
&lt;li&gt;Upgrade to a fixed kernel.&lt;/li&gt;
&lt;li&gt;Verify key binaries, but do not rely only on disk hashes.&lt;/li&gt;
&lt;li&gt;Rotate potentially exposed credentials and keys.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For production servers, it is better to treat this as a potential local privilege escalation incident, not merely as a routine patch event.&lt;/p&gt;
&lt;h2 id=&#34;which-machines-should-come-first&#34;&gt;Which Machines Should Come First
&lt;/h2&gt;&lt;p&gt;The highest priority is not every Linux machine equally. Start with systems where attackers are most likely to obtain low-privilege code execution.&lt;/p&gt;
&lt;p&gt;High-priority environments include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multi-user login servers&lt;/li&gt;
&lt;li&gt;CI / CD runners&lt;/li&gt;
&lt;li&gt;Build machines&lt;/li&gt;
&lt;li&gt;Shared development machines&lt;/li&gt;
&lt;li&gt;Container hosts&lt;/li&gt;
&lt;li&gt;VPS and cloud servers&lt;/li&gt;
&lt;li&gt;Edge nodes exposing SSH&lt;/li&gt;
&lt;li&gt;Platforms running third-party scripts or plugins&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Closed, single-user machines with no external code execution entry point are still affected if vulnerable, but their urgency is lower.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;Fragnesia matters not because it has a new name, but because it again pulls Linux local privilege escalation back into the difficult boundary between the page cache and kernel networking subsystems.&lt;/p&gt;
&lt;p&gt;For administrators, the important work is to confirm kernel patch status, understand whether ESP / RxRPC is in use, prioritize highly exposed machines, and remember that &amp;ldquo;the disk file is unchanged&amp;rdquo; does not mean &amp;ldquo;the system was unaffected.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;If a system is affected, the final answer is still to install the distribution&amp;rsquo;s kernel update as soon as possible. Temporary module disabling is only a bridge, not a replacement for the patch.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
