<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>安全 on KnightLi的博客</title>
        <link>https://knightli.com/tags/%E5%AE%89%E5%85%A8/</link>
        <description>Recent content in 安全 on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Sun, 17 May 2026 17:27:13 +0800</lastBuildDate><atom:link href="https://knightli.com/tags/%E5%AE%89%E5%85%A8/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Next.js 高危 SSRF 漏洞 CVE-2026-44578：影响范围与升级建议</title>
        <link>https://knightli.com/2026/05/17/nextjs-cve-2026-44578-websocket-ssrf/</link>
        <pubDate>Sun, 17 May 2026 17:27:13 +0800</pubDate>
        
        <guid>https://knightli.com/2026/05/17/nextjs-cve-2026-44578-websocket-ssrf/</guid>
        <description>&lt;p&gt;Next.js 在 2026 年 5 月披露了一个高危 SSRF 漏洞：CVE-2026-44578。&lt;/p&gt;
&lt;p&gt;根据 GitHub / Vercel 安全公告 &lt;code&gt;GHSA-c4j6-fc7j-m34r&lt;/code&gt; 和 NVD 记录，这个漏洞影响自托管的 Next.js 应用，前提是应用使用内置 Node.js server，并且暴露在可接收恶意 WebSocket upgrade 请求的网络环境中。攻击者可能让服务器代理请求到任意内部或外部地址，从而访问内部服务或云元数据端点。&lt;/p&gt;
&lt;p&gt;Vercel 托管的部署不受影响。修复版本是 &lt;code&gt;15.5.16&lt;/code&gt; 和 &lt;code&gt;16.2.5&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;先说结论&#34;&gt;先说结论
&lt;/h2&gt;&lt;p&gt;如果你在自己服务器、容器、Kubernetes、ECS、VPS、裸机或 PaaS 上自托管 Next.js，需要优先检查。&lt;/p&gt;
&lt;p&gt;受影响范围：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;next &amp;gt;= 13.4.13 &amp;lt; 15.5.16&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;next &amp;gt;= 16.0.0 &amp;lt; 16.2.5&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不受影响或风险较低的情况：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;部署在 Vercel 平台上的应用。&lt;/li&gt;
&lt;li&gt;已升级到 &lt;code&gt;15.5.16&lt;/code&gt;、&lt;code&gt;16.2.5&lt;/code&gt; 或更高版本。&lt;/li&gt;
&lt;li&gt;没有使用内置 Node.js server 暴露服务的场景。&lt;/li&gt;
&lt;li&gt;反向代理或负载均衡已经阻断不需要的 WebSocket upgrade 请求，并且出站访问也做了限制。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;推荐处置顺序：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先确认生产环境实际运行的 &lt;code&gt;next&lt;/code&gt; 版本。&lt;/li&gt;
&lt;li&gt;自托管应用尽快升级到修复版本。&lt;/li&gt;
&lt;li&gt;暂时无法升级时，在反向代理或负载均衡层阻断不需要的 WebSocket upgrade。&lt;/li&gt;
&lt;li&gt;限制应用服务器访问云元数据、内网管理面和敏感内部服务。&lt;/li&gt;
&lt;li&gt;排查近期异常 WebSocket upgrade 请求和内部访问日志。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;漏洞是什么&#34;&gt;漏洞是什么
&lt;/h2&gt;&lt;p&gt;CVE-2026-44578 是一个 Server-Side Request Forgery，也就是 SSRF 漏洞。&lt;/p&gt;
&lt;p&gt;SSRF 的核心风险是：攻击者不直接访问内部系统，而是诱导你的服务器替他发请求。服务器通常位于更靠近内网、云平台和内部服务的位置，所以一旦被当成代理使用，可能访问到外部攻击者本来碰不到的资源。&lt;/p&gt;
&lt;p&gt;这次 Next.js 的问题出在 WebSocket upgrade 处理路径。安全公告称，自托管应用如果使用内置 Node.js server，攻击者可以通过特制 WebSocket upgrade 请求，让服务器代理访问任意内部或外部目的地。&lt;/p&gt;
&lt;p&gt;风险点包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;内网 HTTP 服务。&lt;/li&gt;
&lt;li&gt;管理后台。&lt;/li&gt;
&lt;li&gt;云元数据地址。&lt;/li&gt;
&lt;li&gt;容器或集群内部服务。&lt;/li&gt;
&lt;li&gt;只允许服务器访问的内部 API。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个漏洞的 CVSS v3.1 评分为 &lt;code&gt;8.6 High&lt;/code&gt;，向量是：&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-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A: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;这意味着攻击面在网络侧，攻击复杂度低，不需要权限，也不需要用户交互，主要影响机密性。&lt;/p&gt;
&lt;h2 id=&#34;为什么自托管更危险&#34;&gt;为什么自托管更危险
&lt;/h2&gt;&lt;p&gt;这次公告明确提到：Vercel-hosted deployments are not affected。&lt;/p&gt;
&lt;p&gt;真正需要重点关注的是自托管部署。原因很简单：自托管应用的网络环境千差万别，有些直接暴露 origin server，有些在 Nginx、Traefik、Ingress、Cloudflare、ALB 或自建网关后面，有些运行在云主机、容器网络或 Kubernetes 集群里。&lt;/p&gt;
&lt;p&gt;如果这些环境没有限制出站访问，Next.js 进程可能看得到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;169.254.169.254&lt;/code&gt; 这类云元数据地址。&lt;/li&gt;
&lt;li&gt;内网 IP 段。&lt;/li&gt;
&lt;li&gt;只在 VPC 内暴露的服务。&lt;/li&gt;
&lt;li&gt;Redis、Elasticsearch、Prometheus、Grafana 等内部组件。&lt;/li&gt;
&lt;li&gt;Kubernetes Service、Pod 或管理端点。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以 SSRF 的危险不只在 Next.js 本身，而在它所在网络里能访问什么。&lt;/p&gt;
&lt;h2 id=&#34;如何判断是否受影响&#34;&gt;如何判断是否受影响
&lt;/h2&gt;&lt;p&gt;第一步，看 &lt;code&gt;next&lt;/code&gt; 版本。&lt;/p&gt;
&lt;p&gt;在项目目录里执行：&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;npm ls next
&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;/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;pnpm why next
&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;/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;cat package.json
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat package-lock.json
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat pnpm-lock.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat yarn.lock
&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;/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;&amp;gt;= 13.4.13 &amp;lt; 15.5.16
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;= 16.0.0 &amp;lt; 16.2.5
&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;/p&gt;
&lt;p&gt;重点关注这些情况：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;next start&lt;/code&gt; 运行生产服务。&lt;/li&gt;
&lt;li&gt;使用自定义 Node.js server 承载 Next.js。&lt;/li&gt;
&lt;li&gt;Docker 镜像里直接启动 Next.js server。&lt;/li&gt;
&lt;li&gt;Kubernetes / ECS / VPS / 裸机自托管。&lt;/li&gt;
&lt;li&gt;反向代理后面仍然直接暴露 Next.js origin。&lt;/li&gt;
&lt;li&gt;应用所在网络能访问内部服务或云元数据。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果应用部署在 Vercel，按官方公告不受这个漏洞影响。但依然建议保持 Next.js 版本更新，因为同一批版本里可能还修复了其他问题。&lt;/p&gt;
&lt;h2 id=&#34;应该升级到什么版本&#34;&gt;应该升级到什么版本
&lt;/h2&gt;&lt;p&gt;官方修复版本是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;15.5.16&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;16.2.5&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;升级示例：&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;npm install next@15.5.16
&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;或如果使用 16.x：&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;npm install next@16.2.5
&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;pnpm：&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;pnpm add next@15.5.16
&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;/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;pnpm add next@16.2.5
&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;/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;npm run build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run start
&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;或按你的 CI/CD 流程重新构建 Docker 镜像并发布。&lt;/p&gt;
&lt;p&gt;如果你的项目锁定在 14.x 或 15.x，不建议为了修漏洞仓促跨大版本到 16.x。更稳妥的做法是先升级到 &lt;code&gt;15.5.16&lt;/code&gt; 这一修复线，完成测试和发布后，再规划大版本升级。&lt;/p&gt;
&lt;h2 id=&#34;临时缓解措施&#34;&gt;临时缓解措施
&lt;/h2&gt;&lt;p&gt;如果暂时不能升级，安全公告给出的核心思路是：不要把 origin server 直接暴露给不可信网络；如果不需要 WebSocket upgrade，就在反向代理或负载均衡层阻断；同时尽量限制 origin 的出站访问。&lt;/p&gt;
&lt;p&gt;可以考虑这些缓解方向：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;不直接暴露 Next.js origin server。&lt;/li&gt;
&lt;li&gt;在 Nginx、Ingress、ALB、Cloudflare 等入口层过滤不需要的 WebSocket upgrade。&lt;/li&gt;
&lt;li&gt;如果业务不使用 WebSocket，直接拒绝带有 upgrade 语义的请求。&lt;/li&gt;
&lt;li&gt;对应用服务器做 egress 限制，禁止访问云元数据地址和敏感内网段。&lt;/li&gt;
&lt;li&gt;用云平台能力启用更安全的元数据访问模式，例如要求 token 的元数据服务。&lt;/li&gt;
&lt;li&gt;对管理后台、数据库、缓存、监控系统增加认证和网络隔离。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;注意，反向代理规则只是临时缓解，不应该替代升级。框架漏洞最终仍然要通过修复版本解决。&lt;/p&gt;
&lt;h2 id=&#34;运维排查重点&#34;&gt;运维排查重点
&lt;/h2&gt;&lt;p&gt;这个漏洞主要影响机密性，所以排查重点是“有没有被用来访问内部资源”。&lt;/p&gt;
&lt;p&gt;建议关注：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web 访问日志中异常的 &lt;code&gt;Upgrade&lt;/code&gt;、&lt;code&gt;Connection&lt;/code&gt;、&lt;code&gt;Host&lt;/code&gt;、路径和来源 IP。&lt;/li&gt;
&lt;li&gt;反向代理或负载均衡日志中异常的 WebSocket upgrade 请求。&lt;/li&gt;
&lt;li&gt;Next.js 服务附近的异常出站连接。&lt;/li&gt;
&lt;li&gt;云元数据服务访问日志或凭据使用记录。&lt;/li&gt;
&lt;li&gt;内网管理服务、监控系统、缓存、搜索服务的异常访问。&lt;/li&gt;
&lt;li&gt;IAM 临时凭据、访问密钥、token 是否有异常调用。&lt;/li&gt;
&lt;li&gt;容器或主机上是否出现异常进程、下载行为或横向移动迹象。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果怀疑被利用，建议按泄露场景处理：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;保留日志和现场。&lt;/li&gt;
&lt;li&gt;轮换可能暴露的云凭据、API key、数据库密码和 session secret。&lt;/li&gt;
&lt;li&gt;检查云账号最近的 API 调用。&lt;/li&gt;
&lt;li&gt;检查内网服务访问记录。&lt;/li&gt;
&lt;li&gt;重建受影响容器或主机。&lt;/li&gt;
&lt;li&gt;复查出站访问策略和元数据保护。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;这和-reactnextjs-rce-不是一回事&#34;&gt;这和 React/Next.js RCE 不是一回事
&lt;/h2&gt;&lt;p&gt;容易混淆的一点是，CVE-2026-44578 是 Next.js WebSocket upgrade SSRF，不是之前 React Server Components 相关的 RCE。&lt;/p&gt;
&lt;p&gt;它的核心影响是让服务器向攻击者指定的内部或外部地址发请求，主要风险是信息泄露和内部资源探测。&lt;/p&gt;
&lt;p&gt;而 React Server Components 相关 RCE 则属于代码执行风险，攻击后果和修复范围不同。&lt;/p&gt;
&lt;p&gt;所以排查时不要只看“Next.js 有漏洞”这个大标题，要把具体 CVE、影响版本、部署模式和修复版本对应起来。&lt;/p&gt;
&lt;h2 id=&#34;哪些团队要优先处理&#34;&gt;哪些团队要优先处理
&lt;/h2&gt;&lt;p&gt;优先级最高的是这些环境：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自托管 Next.js 生产站点。&lt;/li&gt;
&lt;li&gt;运行在云主机、容器、Kubernetes 或内网环境。&lt;/li&gt;
&lt;li&gt;应用服务器可以访问云元数据服务。&lt;/li&gt;
&lt;li&gt;应用服务器能访问内部管理后台、数据库、缓存或监控系统。&lt;/li&gt;
&lt;li&gt;直接暴露 &lt;code&gt;next start&lt;/code&gt; origin server。&lt;/li&gt;
&lt;li&gt;使用老版本 &lt;code&gt;next&lt;/code&gt;，且升级流程不清晰。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;优先级相对较低的是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;完全部署在 Vercel 的应用。&lt;/li&gt;
&lt;li&gt;已升级到修复版本的应用。&lt;/li&gt;
&lt;li&gt;origin server 不直接暴露，且入口层已经阻断不需要的 WebSocket upgrade。&lt;/li&gt;
&lt;li&gt;出站网络严格受控，无法访问敏感内网资源。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但“优先级较低”不等于可以不升级。Next.js 是高频暴露组件，框架版本长期落后会叠加更多风险。&lt;/p&gt;
&lt;h2 id=&#34;给开发团队的检查清单&#34;&gt;给开发团队的检查清单
&lt;/h2&gt;&lt;p&gt;可以按下面清单处理：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 确认所有仓库的 &lt;code&gt;next&lt;/code&gt; 版本。&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 查出所有自托管部署，不只看 Vercel 项目。&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 标记使用 &lt;code&gt;next start&lt;/code&gt; 或内置 Node.js server 的服务。&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 升级到 &lt;code&gt;15.5.16&lt;/code&gt;、&lt;code&gt;16.2.5&lt;/code&gt; 或更高版本。&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 重新构建并发布生产镜像。&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 在入口层阻断不需要的 WebSocket upgrade。&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 限制应用服务器访问云元数据和敏感内网段。&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 检查近期异常 upgrade 请求和出站访问。&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 轮换疑似暴露的凭据。&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 把 Next.js 安全更新纳入依赖更新流程。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结
&lt;/h2&gt;&lt;p&gt;CVE-2026-44578 是一个需要认真处理的 Next.js 高危 SSRF 漏洞。&lt;/p&gt;
&lt;p&gt;它不影响 Vercel 托管部署，但影响范围覆盖大量自托管 Next.js 应用：&lt;code&gt;13.4.13&lt;/code&gt; 到 &lt;code&gt;15.5.16&lt;/code&gt; 之前，以及 &lt;code&gt;16.0.0&lt;/code&gt; 到 &lt;code&gt;16.2.5&lt;/code&gt; 之前。漏洞触发点在 WebSocket upgrade 处理路径，攻击者可能让服务器代理访问内部或外部地址，进而暴露内网服务或云元数据端点。&lt;/p&gt;
&lt;p&gt;最直接的修复方式是升级到 &lt;code&gt;15.5.16&lt;/code&gt; 或 &lt;code&gt;16.2.5&lt;/code&gt;。临时缓解则是不要直接暴露 origin server，阻断不需要的 WebSocket upgrade，并限制应用服务器的出站访问。&lt;/p&gt;
&lt;p&gt;对运维团队来说，重点不是只看 CVE 分数，而是看你的 Next.js 服务所在网络能访问什么。SSRF 的真实风险，往往取决于服务器背后有哪些内网资源和云权限。&lt;/p&gt;
&lt;p&gt;参考链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/vercel/next.js/security/advisories/GHSA-c4j6-fc7j-m34r&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitHub Advisory：GHSA-c4j6-fc7j-m34r&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-44578&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;NVD：CVE-2026-44578&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://security.snyk.io/vuln/SNYK-JS-NEXT-16638682&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Snyk：SNYK-JS-NEXT-16638682&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Dirty Frag、Copy Fail 与 Fragnesia：近期三个 Linux 本地提权漏洞对比</title>
        <link>https://knightli.com/2026/05/15/linux-lpe-dirty-frag-copy-fail-fragnesia-analysis/</link>
        <pubDate>Fri, 15 May 2026 13:24:04 +0800</pubDate>
        
        <guid>https://knightli.com/2026/05/15/linux-lpe-dirty-frag-copy-fail-fragnesia-analysis/</guid>
        <description>&lt;p&gt;最近 Linux 内核连续出现几个高关注度的本地提权漏洞：Dirty Frag、Copy Fail 和 Fragnesia。它们看起来像一组“同类事件”，因为最终效果都很接近：低权限本地用户可能把权限提升到 root。&lt;/p&gt;
&lt;p&gt;但从运维处置角度看，不能把它们混成一个漏洞。三者的入口模块、触发路径、缓解方式和补丁节奏都不同。更准确的理解是：它们暴露了 Linux 内核在“页缓存、splice、socket buffer、加密路径”这些复杂交界处的共同风险。&lt;/p&gt;
&lt;p&gt;本文只做风险和处置分析，不展开可复现利用步骤。&lt;/p&gt;
&lt;h2 id=&#34;三个漏洞分别是什么&#34;&gt;三个漏洞分别是什么
&lt;/h2&gt;&lt;h3 id=&#34;dirty-fragcve-2026-43284&#34;&gt;Dirty Frag：CVE-2026-43284
&lt;/h3&gt;&lt;p&gt;Dirty Frag 主要指向 Linux 内核网络路径里的页缓存写入问题。公开资料中，它通常和两个问题一起讨论：&lt;code&gt;xfrm-ESP&lt;/code&gt; 侧的 CVE-2026-43284，以及 &lt;code&gt;rxrpc&lt;/code&gt; 侧的 CVE-2026-43500。&lt;/p&gt;
&lt;p&gt;其中 CVE-2026-43284 与 ESP 处理共享 &lt;code&gt;skb&lt;/code&gt; fragment 时的原地解密有关。问题的关键不是攻击者直接修改磁盘文件，而是让内核在不该写的共享页上发生写入，进而影响页缓存里的文件内容。&lt;/p&gt;
&lt;p&gt;运维上最需要记住的是：Dirty Frag 触达的是 &lt;code&gt;esp4&lt;/code&gt;、&lt;code&gt;esp6&lt;/code&gt;、&lt;code&gt;rxrpc&lt;/code&gt; 这一组内核模块和网络子系统路径。它和 IPsec、ESP、RxRPC 相关，临时缓解也会围绕这些模块展开。&lt;/p&gt;
&lt;h3 id=&#34;copy-failcve-2026-31431&#34;&gt;Copy Fail：CVE-2026-31431
&lt;/h3&gt;&lt;p&gt;Copy Fail 是 Theori / Xint Code 披露的 Linux 内核本地提权漏洞。它的入口不在 IPsec 网络路径，而在内核用户态加密 API 的 &lt;code&gt;algif_aead&lt;/code&gt; / &lt;code&gt;AF_ALG&lt;/code&gt; 相关路径。&lt;/p&gt;
&lt;p&gt;公开说明中提到，它源于 2017 年引入的一处原地优化：某些情况下，内核没有按预期复制数据，而是把页缓存页放进可写目标路径里。攻击者可以借助 &lt;code&gt;AF_ALG&lt;/code&gt; 与 &lt;code&gt;splice()&lt;/code&gt; 组合，对页缓存支持的页面做小范围可控写入。&lt;/p&gt;
&lt;p&gt;它的风险点在于可利用性很强，而且影响面跨多个主流发行版。和 Dirty Frag 不同，Copy Fail 的临时缓解重点是限制或禁用 &lt;code&gt;algif_aead&lt;/code&gt;，以及在容器和 CI 环境中限制 &lt;code&gt;AF_ALG&lt;/code&gt; socket。&lt;/p&gt;
&lt;h3 id=&#34;fragnesiacve-2026-46300&#34;&gt;Fragnesia：CVE-2026-46300
&lt;/h3&gt;&lt;p&gt;Fragnesia 是 V12 Security 披露的另一个 Linux 内核本地提权漏洞，和 Dirty Frag 属于相近攻击面。它不是 Dirty Frag 的同一个 bug，但仍然围绕 IPsec ESP / &lt;code&gt;rxrpc&lt;/code&gt; 相关模块，以及页缓存写入效果展开。&lt;/p&gt;
&lt;p&gt;AlmaLinux 的说明把它定位为同一代码区域里的第三个本地 root 问题。其关键点在于 &lt;code&gt;skb_try_coalesce()&lt;/code&gt; 在合并 socket buffer 片段时没有正确保留共享 fragment 标记，导致后续 XFRM ESP-in-TCP 接收路径可能在外部页缓存页上做原地解密。&lt;/p&gt;
&lt;p&gt;也就是说，Fragnesia 和 Dirty Frag 更接近：两者都绕着 &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; fragment、ESP 解密路径转。它们的临时缓解也高度重叠。&lt;/p&gt;
&lt;h2 id=&#34;相同点为什么都危险&#34;&gt;相同点：为什么都危险
&lt;/h2&gt;&lt;p&gt;这三个漏洞的共同点不是“代码位置完全一样”，而是攻击结果和风险模型非常像。&lt;/p&gt;
&lt;p&gt;第一，它们都是本地提权。攻击者通常需要先在机器上获得普通用户代码执行能力，然后再把权限提升到 root。对单用户桌面来说，它不是远程一键入侵；但对多用户服务器、CI runner、容器宿主机、共享开发机和暴露 SSH 的 VPS 来说，低权限入口并不罕见。&lt;/p&gt;
&lt;p&gt;第二，它们都和页缓存写入有关。攻击者不一定永久改写磁盘文件，而是影响内存中的页缓存副本。这会让传统文件完整性检查变得不够可靠：磁盘 hash 可能正常，但执行路径读到的页缓存内容已经被污染。&lt;/p&gt;
&lt;p&gt;第三，它们都偏向确定性逻辑漏洞，而不是传统意义上很吃时序的竞争条件。公开资料多次强调这类漏洞不依赖赢得 race condition。对防守方来说，这意味着“利用成功率”不能按老经验低估。&lt;/p&gt;
&lt;p&gt;第四，它们都放大了容器和自动化执行环境的风险。容器内的低权限代码、CI 任务、构建脚本、第三方插件，一旦能触达宿主内核相关接口，就可能把漏洞从“本地问题”变成“平台问题”。&lt;/p&gt;
&lt;h2 id=&#34;不同点不要用一个补丁思路套全部&#34;&gt;不同点：不要用一个补丁思路套全部
&lt;/h2&gt;&lt;p&gt;三者最大的区别在入口模块。&lt;/p&gt;
&lt;p&gt;Copy Fail 的关键入口是 &lt;code&gt;algif_aead&lt;/code&gt; / &lt;code&gt;AF_ALG&lt;/code&gt;，属于内核用户态加密 API。它的临时防护重点是禁用或限制 &lt;code&gt;algif_aead&lt;/code&gt;，以及用 seccomp 阻断容器里创建 &lt;code&gt;AF_ALG&lt;/code&gt; socket。&lt;/p&gt;
&lt;p&gt;Dirty Frag 的关键入口在 &lt;code&gt;xfrm-ESP&lt;/code&gt; 和 &lt;code&gt;rxrpc&lt;/code&gt;。它更接近网络协议和 socket buffer 处理路径，临时防护通常会考虑禁用 &lt;code&gt;esp4&lt;/code&gt;、&lt;code&gt;esp6&lt;/code&gt;、&lt;code&gt;rxrpc&lt;/code&gt;。但这可能影响 IPsec、VPN、隧道或相关网络能力。&lt;/p&gt;
&lt;p&gt;Fragnesia 的入口也在 Dirty Frag 相近区域，但具体问题落在 &lt;code&gt;skb_try_coalesce()&lt;/code&gt; 没有保留共享 fragment 标记。它更像是 Dirty Frag 风险面里的另一个分支，而不是 Copy Fail 的加密 API 问题。&lt;/p&gt;
&lt;p&gt;所以，不能因为已经处理了 Copy Fail，就认为 Dirty Frag 和 Fragnesia 也被覆盖；也不能因为禁用了 &lt;code&gt;esp4&lt;/code&gt; / &lt;code&gt;esp6&lt;/code&gt;，就认为 Copy Fail 自动消失。它们需要分别确认补丁状态和缓解策略。&lt;/p&gt;
&lt;h2 id=&#34;影响范围该怎么判断&#34;&gt;影响范围该怎么判断
&lt;/h2&gt;&lt;p&gt;判断这类漏洞是否受影响，不要只看发行版名字，也不要只看内核大版本号。发行版会回合补丁，云厂商会维护自己的内核分支，企业发行版还可能有额外 backport。&lt;/p&gt;
&lt;p&gt;更稳妥的顺序是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先看发行版安全公告和内核包 changelog。&lt;/li&gt;
&lt;li&gt;再核对 CVE 是否已被当前内核包修复。&lt;/li&gt;
&lt;li&gt;对云主机、容器宿主机和 CI 节点，额外关注云厂商或平台方公告。&lt;/li&gt;
&lt;li&gt;对临时缓解，确认业务是否依赖对应模块。&lt;/li&gt;
&lt;li&gt;完成内核升级后安排重启，确保实际运行内核已经切换。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这一步最容易踩坑的是“包已经更新，但机器还没重启”。内核漏洞不是普通用户态服务升级，安装新包之后，旧内核仍可能继续运行。&lt;/p&gt;
&lt;h2 id=&#34;运维优先级&#34;&gt;运维优先级
&lt;/h2&gt;&lt;p&gt;这些漏洞最该优先处理的机器，不是“所有 Linux 平均排队”，而是低权限代码最容易出现的地方。&lt;/p&gt;
&lt;p&gt;优先级最高的环境包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多用户登录服务器&lt;/li&gt;
&lt;li&gt;CI / CD runner&lt;/li&gt;
&lt;li&gt;构建机和制品打包机&lt;/li&gt;
&lt;li&gt;容器宿主机和 Kubernetes 节点&lt;/li&gt;
&lt;li&gt;共享开发机&lt;/li&gt;
&lt;li&gt;暴露 SSH 的云主机和 VPS&lt;/li&gt;
&lt;li&gt;运行第三方脚本、插件、任务队列的平台&lt;/li&gt;
&lt;li&gt;有 Web 漏洞、弱口令或历史入侵痕迹的机器&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;相对封闭、单用户、没有外部代码执行入口的机器，风险仍然存在，但处置顺序可以排在后面。&lt;/p&gt;
&lt;h2 id=&#34;临时缓解应该怎么理解&#34;&gt;临时缓解应该怎么理解
&lt;/h2&gt;&lt;p&gt;临时缓解不是补丁替代品。它的价值是帮你在无法立刻重启或等待发行版补丁时降低暴露面。&lt;/p&gt;
&lt;p&gt;对 Copy Fail，重点关注 &lt;code&gt;algif_aead&lt;/code&gt; 和 &lt;code&gt;AF_ALG&lt;/code&gt;。如果业务没有使用内核 AF_ALG 加密接口，可以评估禁用相关模块；容器环境则应优先检查 seccomp 策略，避免不受信任工作负载随意创建对应 socket。&lt;/p&gt;
&lt;p&gt;对 Dirty Frag 和 Fragnesia，重点关注 &lt;code&gt;esp4&lt;/code&gt;、&lt;code&gt;esp6&lt;/code&gt;、&lt;code&gt;rxrpc&lt;/code&gt;。如果系统不依赖 IPsec ESP、相关 VPN、隧道或 RxRPC，可以评估临时禁用。但生产环境不要盲目执行，因为这些模块可能影响真实网络业务。&lt;/p&gt;
&lt;p&gt;最终仍然要回到内核更新。临时缓解只能减少攻击面，不能证明系统已经彻底安全。&lt;/p&gt;
&lt;h2 id=&#34;这三个漏洞说明了什么&#34;&gt;这三个漏洞说明了什么
&lt;/h2&gt;&lt;p&gt;这组漏洞真正值得警惕的地方，不只是 CVE 数量，而是它们都集中在内核高复杂度路径：零拷贝、splice、socket buffer、页缓存、加密接口、协议栈优化。&lt;/p&gt;
&lt;p&gt;这些路径的共同特点是性能收益很大，但所有权边界也更难维护。一个 fragment 是否共享、一个页面是否还能原地写、一个优化是否真的只是减少复制，都会变成安全边界的一部分。&lt;/p&gt;
&lt;p&gt;对安全团队和运维团队来说，结论很实际：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;本地提权漏洞要按“已有低权限入口会被放大”处理。&lt;/li&gt;
&lt;li&gt;容器不是内核漏洞的天然隔离边界。&lt;/li&gt;
&lt;li&gt;文件完整性检查不能只看磁盘内容。&lt;/li&gt;
&lt;li&gt;CI、构建机、插件平台要当成高优先级资产。&lt;/li&gt;
&lt;li&gt;内核补丁需要验证“已安装”和“已运行”两个状态。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;小结&#34;&gt;小结
&lt;/h2&gt;&lt;p&gt;Dirty Frag、Copy Fail 和 Fragnesia 都是近期 Linux 本地提权风险里的高优先级事件，但它们不是同一个漏洞的三个名字。&lt;/p&gt;
&lt;p&gt;Copy Fail 走的是 &lt;code&gt;algif_aead&lt;/code&gt; / &lt;code&gt;AF_ALG&lt;/code&gt; 加密接口路径；Dirty Frag 走的是 &lt;code&gt;xfrm-ESP&lt;/code&gt; 与 &lt;code&gt;rxrpc&lt;/code&gt; 相关路径；Fragnesia 则在 Dirty Frag 相近攻击面上，通过 &lt;code&gt;skb&lt;/code&gt; fragment 标记处理问题再次触发页缓存写入风险。&lt;/p&gt;
&lt;p&gt;处置上，最稳妥的做法是：按发行版公告升级内核并重启；对无法立即升级的系统，分别按漏洞入口评估临时禁用模块或收紧 seccomp；对多租户、CI、容器宿主机和共享开发环境优先处理。&lt;/p&gt;
&lt;p&gt;参考资料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Theori Copy Fail 说明：&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 安全公告：&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 说明：&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 说明：&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 说明：&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)：Linux 内核本地提权漏洞影响与缓解</title>
        <link>https://knightli.com/2026/05/15/linux-kernel-fragnesia-local-privilege-escalation/</link>
        <pubDate>Fri, 15 May 2026 13:18:01 +0800</pubDate>
        
        <guid>https://knightli.com/2026/05/15/linux-kernel-fragnesia-local-privilege-escalation/</guid>
        <description>&lt;p&gt;Linux 内核最近又曝出一个和 Dirty Frag 同一类攻击面相关的本地提权漏洞：Fragnesia (CVE-2026-46300)。&lt;/p&gt;
&lt;p&gt;根据 V12 Security 的披露，Fragnesia 是一个 Linux 本地提权漏洞。攻击者不需要宿主机已有高权限，只要能在本地执行代码，就可能借助内核 XFRM ESP-in-TCP 子系统中的逻辑缺陷，把只读文件的页缓存内容按字节改写，最终触发 root shell。&lt;/p&gt;
&lt;p&gt;原始资料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;V12 Security PoC 说明：&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;这篇不展开可复现利用步骤，只整理运维侧需要知道的风险点和处置思路。&lt;/p&gt;
&lt;h2 id=&#34;它和-dirty-frag-是什么关系&#34;&gt;它和 Dirty Frag 是什么关系
&lt;/h2&gt;&lt;p&gt;V12 Security 在说明中把 Fragnesia 归到 Dirty Frag 漏洞类别里。它不是 Dirty Frag 本身的同一个 bug，而是同一攻击面上的另一个问题：Linux 内核的 XFRM ESP-in-TCP。&lt;/p&gt;
&lt;p&gt;XFRM 是 Linux 内核里处理 IPsec 的框架。ESP-in-TCP 则和通过 TCP 承载 ESP 加密流量有关。Fragnesia 的问题出在共享页碎片和 socket buffer 合并过程中的逻辑处理：某些情况下，内核会“忘记”某个 fragment 仍然是共享状态，从而留下可控写入空间。&lt;/p&gt;
&lt;p&gt;这类问题让人联想到 Dirty Pipe / Dirty Frag 这一类页缓存写入漏洞。共同点不是具体代码完全相同，而是都把攻击效果落到了页缓存里的只读文件副本上。&lt;/p&gt;
&lt;h2 id=&#34;风险为什么高&#34;&gt;风险为什么高
&lt;/h2&gt;&lt;p&gt;Fragnesia 的危险之处有三个。&lt;/p&gt;
&lt;p&gt;第一，它是本地提权。只要攻击者已经能在系统上运行普通用户代码，就可能把权限提升到 root。对多用户服务器、容器宿主机、CI runner、共享开发机、VPS 和暴露 Shell 的环境来说，这类漏洞比普通桌面更敏感。&lt;/p&gt;
&lt;p&gt;第二，它不依赖传统竞争条件。V12 的说明中提到，该漏洞通过构造 ESP-in-TCP 处理流程，让内核把加密流处理到已经 splice 进 socket buffer 的文件页上，进而按字节影响页缓存内容。这意味着风险不只是“理论上可能”，而是研究团队已经验证了稳定利用路径。&lt;/p&gt;
&lt;p&gt;第三，它改的是页缓存，不是磁盘文件。公开说明里的示例目标是 &lt;code&gt;/usr/bin/su&lt;/code&gt;。利用成功后，磁盘上的文件并不会被永久改写，改动存在于内存页缓存中。很多只检查磁盘文件 hash 或完整性的巡检流程，可能看不出异常。&lt;/p&gt;
&lt;p&gt;这也是它对管理员麻烦的地方：系统看起来文件没变，但一旦执行被污染页缓存里的目标二进制，就可能触发提权效果。&lt;/p&gt;
&lt;h2 id=&#34;已知影响范围&#34;&gt;已知影响范围
&lt;/h2&gt;&lt;p&gt;V12 Security 的说明称，受 Dirty Frag 影响且没有应用 2026 年 5 月 13 日相关补丁的内核，也会受 Fragnesia 影响。公开验证环境包括 Ubuntu 22.04、Ubuntu 24.04，以及 &lt;code&gt;6.8.0-111-generic&lt;/code&gt; 这类内核版本。&lt;/p&gt;
&lt;p&gt;这里要注意两个点。&lt;/p&gt;
&lt;p&gt;第一，不要只看发行版大版本。Ubuntu 22.04 / 24.04 是否受影响，最终取决于内核补丁状态，而不是发行版名字。&lt;/p&gt;
&lt;p&gt;第二，不要只看有没有默认 AppArmor 限制。Ubuntu 对非特权用户命名空间的 AppArmor 限制可以提高门槛，但披露方明确把它视为额外绕过问题，不是漏洞本体的根治方式。&lt;/p&gt;
&lt;p&gt;真正可靠的判断方式，仍然是查看发行版安全公告和内核包更新。&lt;/p&gt;
&lt;h2 id=&#34;临时缓解思路&#34;&gt;临时缓解思路
&lt;/h2&gt;&lt;p&gt;如果系统暂时不能立刻升级内核，可以先评估是否依赖相关协议模块。&lt;/p&gt;
&lt;p&gt;V12 给出的缓解方向与 Dirty Frag 相同：如果系统不依赖 IPsec ESP 或 RxRPC，可以禁用相关模块，例如 &lt;code&gt;esp4&lt;/code&gt;、&lt;code&gt;esp6&lt;/code&gt;、&lt;code&gt;rxrpc&lt;/code&gt;。这类操作会影响相关网络能力，生产环境不要盲目执行，应该先确认业务是否使用 IPsec、VPN、隧道或相关内核功能。&lt;/p&gt;
&lt;p&gt;更稳妥的处置顺序是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;确认发行版是否已经发布内核安全更新。&lt;/li&gt;
&lt;li&gt;优先安装内核补丁并安排重启。&lt;/li&gt;
&lt;li&gt;如果无法立即升级，再评估临时禁用相关模块。&lt;/li&gt;
&lt;li&gt;对多用户系统和 CI / 构建环境优先处理。&lt;/li&gt;
&lt;li&gt;检查是否开放非必要本地账号、Shell、容器逃逸面和低权限执行入口。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这里不要把禁用模块当作最终修复。它更像临时降低暴露面。&lt;/p&gt;
&lt;h2 id=&#34;如果怀疑已经被利用&#34;&gt;如果怀疑已经被利用
&lt;/h2&gt;&lt;p&gt;Fragnesia 的一个特点是页缓存污染。V12 在说明中强调，利用后目标文件在页缓存中的副本可能含有注入内容，后续执行仍可能触发异常行为，直到页面被驱逐或系统重启。&lt;/p&gt;
&lt;p&gt;如果怀疑系统已经被利用，至少要做几件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;尽快保留现场日志和审计记录。&lt;/li&gt;
&lt;li&gt;检查近期异常本地登录、低权限用户活动、可疑进程和 root shell 痕迹。&lt;/li&gt;
&lt;li&gt;清理相关页缓存或直接重启。&lt;/li&gt;
&lt;li&gt;升级到已修复内核。&lt;/li&gt;
&lt;li&gt;对关键二进制做完整性检查，但不要只依赖磁盘 hash。&lt;/li&gt;
&lt;li&gt;轮换可能已经暴露的凭据和密钥。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果是生产服务器，更建议把它当作一次潜在本地提权事件处理，而不是只当作普通补丁升级。&lt;/p&gt;
&lt;h2 id=&#34;运维侧该优先看哪些机器&#34;&gt;运维侧该优先看哪些机器
&lt;/h2&gt;&lt;p&gt;这类漏洞优先级最高的不是所有 Linux 机器平均处理，而是先看攻击者最容易拿到低权限代码执行的地方。&lt;/p&gt;
&lt;p&gt;优先级较高的环境包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多用户登录服务器&lt;/li&gt;
&lt;li&gt;CI / CD runner&lt;/li&gt;
&lt;li&gt;构建机&lt;/li&gt;
&lt;li&gt;共享开发机&lt;/li&gt;
&lt;li&gt;容器宿主机&lt;/li&gt;
&lt;li&gt;VPS 和云主机&lt;/li&gt;
&lt;li&gt;暴露 SSH 的边缘节点&lt;/li&gt;
&lt;li&gt;运行第三方脚本或插件的平台&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;相对封闭、单用户、没有外部代码执行入口的机器，风险仍然存在，但紧急程度可以低一些。&lt;/p&gt;
&lt;h2 id=&#34;小结&#34;&gt;小结
&lt;/h2&gt;&lt;p&gt;Fragnesia 值得关注，不是因为它名字新，而是因为它再次把 Linux 本地提权问题拉回到页缓存和内核网络子系统这一类复杂交界处。&lt;/p&gt;
&lt;p&gt;对管理员来说，最重要的不是研究利用细节，而是确认内核补丁状态、评估是否依赖 ESP / RxRPC、对高暴露机器优先升级，并理解“磁盘文件没变”不等于“系统没有被影响”。&lt;/p&gt;
&lt;p&gt;如果系统受影响，最终答案仍然是尽快安装发行版提供的内核更新。临时禁用模块只能算过渡措施，不能替代补丁。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
