<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Next.js on KnightLi Blog</title>
        <link>https://www.knightli.com/en/tags/next.js/</link>
        <description>Recent content in Next.js on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sun, 17 May 2026 23:07:38 +0800</lastBuildDate><atom:link href="https://www.knightli.com/en/tags/next.js/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>What Is Vercel AI SDK? A Unified Toolkit for TypeScript Developers Building AI Apps</title>
        <link>https://www.knightli.com/en/2026/05/17/vercel-ai-sdk-typescript-agent-toolkit/</link>
        <pubDate>Sun, 17 May 2026 23:07:38 +0800</pubDate>
        
        <guid>https://www.knightli.com/en/2026/05/17/vercel-ai-sdk-typescript-agent-toolkit/</guid>
        <description>&lt;p&gt;&lt;code&gt;vercel/ai&lt;/code&gt; is the open-source AI SDK maintained by Vercel.&lt;/p&gt;
&lt;p&gt;Its positioning is clear: it gives TypeScript developers a unified toolkit for building AI applications and AI Agents. It comes from the team behind Next.js, but it is not limited to Next.js. It also supports React, Svelte, Vue, Angular, and runtimes such as Node.js.&lt;/p&gt;
&lt;p&gt;Project link: &lt;a class=&#34;link&#34; href=&#34;https://github.com/vercel/ai&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/vercel/ai&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you are building a chat app, AI writing tool, RAG application, tool-calling Agent, streaming interface, or a product that needs to connect multiple model providers behind one application, Vercel AI SDK is worth a close look.&lt;/p&gt;
&lt;h2 id=&#34;the-core-problem-it-solves&#34;&gt;The Core Problem It Solves
&lt;/h2&gt;&lt;p&gt;When building AI apps today, one of the biggest headaches is not whether you can call a model. It is that different model providers have different APIs, streaming formats, tool-calling conventions, error behavior, and frontend state-management needs.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenAI has its own SDK and response formats.&lt;/li&gt;
&lt;li&gt;Anthropic has its own message structure.&lt;/li&gt;
&lt;li&gt;Google, xAI, Mistral, DeepSeek, Groq, and others all differ.&lt;/li&gt;
&lt;li&gt;Streaming output requires chunk handling.&lt;/li&gt;
&lt;li&gt;Tool calling requires structured requests initiated by the model.&lt;/li&gt;
&lt;li&gt;Chat UI also needs messages, loading states, cancellation, retry, and error display.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If every provider gets its own handwritten adapter, the project becomes complex very quickly.&lt;/p&gt;
&lt;p&gt;Vercel AI SDK tries to hide those differences behind a unified API. Developers write the app against one interface and connect different models through Providers.&lt;/p&gt;
&lt;h2 id=&#34;unified-provider-architecture&#34;&gt;Unified Provider Architecture
&lt;/h2&gt;&lt;p&gt;One key feature of Vercel AI SDK is that it is provider-agnostic. It is not tied to one model vendor.&lt;/p&gt;
&lt;p&gt;It can access OpenAI, Anthropic, Google, and other model providers through a unified API. The project README also notes that AI SDK uses Vercel AI Gateway by default, making it easier to reach multiple mainstream providers.&lt;/p&gt;
&lt;p&gt;That is useful in real engineering projects.&lt;/p&gt;
&lt;p&gt;Many AI products eventually depend on more than one model:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Some tasks need strong reasoning models.&lt;/li&gt;
&lt;li&gt;Some tasks need cheap, fast models.&lt;/li&gt;
&lt;li&gt;Some tasks require multimodal models.&lt;/li&gt;
&lt;li&gt;Some tasks require long context.&lt;/li&gt;
&lt;li&gt;Some tasks require local or private deployment.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A unified provider architecture makes model switching, gray releases, cost control, and fallback strategies easier.&lt;/p&gt;
&lt;h2 id=&#34;streaming-output-is-key-to-frontend-ux&#34;&gt;Streaming Output Is Key to Frontend UX
&lt;/h2&gt;&lt;p&gt;One major UX difference between AI apps and traditional APIs is that responses can be long.&lt;/p&gt;
&lt;p&gt;If users must wait for a full answer before seeing anything, chat tools, writing tools, and coding assistants feel slow. Streaming output lets text appear gradually, so users see progress sooner.&lt;/p&gt;
&lt;p&gt;Vercel AI SDK provides fairly complete abstractions for streaming generation. Developers do not need to handle low-level event streams from scratch. They can use the SDK&amp;rsquo;s generation and streaming APIs to connect model output to frontend UI.&lt;/p&gt;
&lt;p&gt;This is especially convenient for Next.js and React applications.&lt;/p&gt;
&lt;p&gt;An AI chat interface looks simple, but in practice it must handle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Message lists.&lt;/li&gt;
&lt;li&gt;User input.&lt;/li&gt;
&lt;li&gt;Server requests.&lt;/li&gt;
&lt;li&gt;Streaming token display.&lt;/li&gt;
&lt;li&gt;Loading states.&lt;/li&gt;
&lt;li&gt;Error states.&lt;/li&gt;
&lt;li&gt;Stopping generation.&lt;/li&gt;
&lt;li&gt;Regeneration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are exactly the kinds of repetitive work AI SDK tries to reduce.&lt;/p&gt;
&lt;h2 id=&#34;tool-calling-and-agent-scenarios&#34;&gt;Tool Calling and Agent Scenarios
&lt;/h2&gt;&lt;p&gt;As AI apps move from &amp;ldquo;chatting&amp;rdquo; to &amp;ldquo;doing things&amp;rdquo;, tool calling becomes increasingly important.&lt;/p&gt;
&lt;p&gt;The model may need to call external functions instead of only returning natural language:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Query a database.&lt;/li&gt;
&lt;li&gt;Search documents.&lt;/li&gt;
&lt;li&gt;Call business APIs.&lt;/li&gt;
&lt;li&gt;Read order status.&lt;/li&gt;
&lt;li&gt;Generate charts.&lt;/li&gt;
&lt;li&gt;Create calendar events.&lt;/li&gt;
&lt;li&gt;Modify project files.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vercel AI SDK supports tool-calling capabilities, allowing developers to define tools, parameters, and execution logic, then let the model request those tools when appropriate.&lt;/p&gt;
&lt;p&gt;This is one reason it has evolved from a &amp;ldquo;chat UI SDK&amp;rdquo; into a broader toolkit for AI apps and Agents.&lt;/p&gt;
&lt;p&gt;Still, tool calling is not magic. Real projects must also handle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Parameter validation.&lt;/li&gt;
&lt;li&gt;Permission boundaries.&lt;/li&gt;
&lt;li&gt;Tool-call logs.&lt;/li&gt;
&lt;li&gt;Idempotency.&lt;/li&gt;
&lt;li&gt;Timeouts and retries.&lt;/li&gt;
&lt;li&gt;Human confirmation.&lt;/li&gt;
&lt;li&gt;Restrictions for sensitive actions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI SDK can help with interfaces and flow, but developers still need to design the safety boundaries.&lt;/p&gt;
&lt;h2 id=&#34;ui-integration&#34;&gt;UI Integration
&lt;/h2&gt;&lt;p&gt;Vercel AI SDK is friendly to frontend frameworks.&lt;/p&gt;
&lt;p&gt;It provides not only core generation APIs, but also abstractions around chat, completion, message state, and streaming UI. For teams using Next.js and React, this can remove a lot of boilerplate.&lt;/p&gt;
&lt;p&gt;But it is not only for Vercel deployments.&lt;/p&gt;
&lt;p&gt;If your project is built with TypeScript, or your backend runs on Node.js, AI SDK can still serve as the model-calling and streaming layer. Whether you deploy to Vercel depends on your architecture, team habits, and infrastructure choices.&lt;/p&gt;
&lt;h2 id=&#34;skill-for-coding-agents&#34;&gt;Skill for Coding Agents
&lt;/h2&gt;&lt;p&gt;The &lt;code&gt;vercel/ai&lt;/code&gt; README includes an interesting suggestion: if you use coding agents such as Claude Code or Cursor, you can add the AI SDK skill to your repository.&lt;/p&gt;
&lt;p&gt;The example command is:&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;npx skills add vercel/ai
&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;This shows that Vercel understands AI SDK users are not only human developers, but also coding agents.&lt;/p&gt;
&lt;p&gt;When an agent modifies a project that uses AI SDK, a dedicated skill in the repository can help it understand SDK conventions, common APIs, project structure, and best practices, reducing the chance of messy code changes.&lt;/p&gt;
&lt;p&gt;This direction is worth watching.&lt;/p&gt;
&lt;p&gt;In the future, open-source projects may provide not only README files and docs, but also structured skill instructions for AI coding agents. For complex SDKs, that could become a new developer-experience entry point.&lt;/p&gt;
&lt;h2 id=&#34;suitable-projects&#34;&gt;Suitable Projects
&lt;/h2&gt;&lt;p&gt;Vercel AI SDK is a good fit for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI chat apps based on Next.js or React.&lt;/li&gt;
&lt;li&gt;Writing, Q&amp;amp;A, support, and coding assistants that need streaming output.&lt;/li&gt;
&lt;li&gt;AI products that need multiple model providers.&lt;/li&gt;
&lt;li&gt;Teams building quick RAG or document Q&amp;amp;A prototypes.&lt;/li&gt;
&lt;li&gt;Apps that need tool calling, function calling, or lightweight Agent capabilities.&lt;/li&gt;
&lt;li&gt;Teams already using TypeScript and Node.js.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is especially suitable for frontend and full-stack developers. The hard part of many AI apps is not only calling a model, but turning model output into a stable, smooth, interactive product experience.&lt;/p&gt;
&lt;h2 id=&#34;what-it-is-not-for&#34;&gt;What It Is Not For
&lt;/h2&gt;&lt;p&gt;If your project is mainly a Python backend, deep-learning training workflow, model fine-tuning system, or low-level inference service, Vercel AI SDK may not be the core tool.&lt;/p&gt;
&lt;p&gt;It is an application-layer SDK, not a model-training framework.&lt;/p&gt;
&lt;p&gt;If you need to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Train your own model.&lt;/li&gt;
&lt;li&gt;Manage GPU inference clusters.&lt;/li&gt;
&lt;li&gt;Run low-level batch inference.&lt;/li&gt;
&lt;li&gt;Deeply control tokenizer behavior, KV cache, quantization, and inference engines.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then you should look at PyTorch, vLLM, SGLang, TensorRT-LLM, llama.cpp, or cloud inference services.&lt;/p&gt;
&lt;p&gt;Vercel AI SDK is closer to the application layer that connects model capabilities to products.&lt;/p&gt;
&lt;h2 id=&#34;what-to-watch-for&#34;&gt;What to Watch For
&lt;/h2&gt;&lt;p&gt;First, do not assume a unified API means all providers are identical.&lt;/p&gt;
&lt;p&gt;Different providers still differ in capabilities, context length, tool-calling formats, streaming details, error types, and pricing. A unified SDK reduces engineering friction, but it does not erase model differences.&lt;/p&gt;
&lt;p&gt;Second, control costs.&lt;/p&gt;
&lt;p&gt;Once an AI app is online, streaming chats, retries, tool calls, RAG retrieval, and multi-model fallbacks can all increase cost. Rate limits, caching, logs, and budget monitoring are necessary.&lt;/p&gt;
&lt;p&gt;Third, handle safety boundaries.&lt;/p&gt;
&lt;p&gt;If a model can call tools, you must restrict what those tools can do. Do not let the model directly execute high-risk operations, and do not expose secrets, database write permissions, or production operations to it without controls.&lt;/p&gt;
&lt;p&gt;Fourth, keep observability.&lt;/p&gt;
&lt;p&gt;When an AI app fails, frontend errors are not enough. You need to know the user input, selected model, tool calls, response time, token usage, error type, and final output.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;vercel/ai&lt;/code&gt; is not a new model, and it is not just a chat component.&lt;/p&gt;
&lt;p&gt;It is closer to infrastructure for TypeScript AI application development: unified Providers, streaming output, tool calling, frontend state management, and Agent scenarios all live inside one open-source SDK.&lt;/p&gt;
&lt;p&gt;For teams already using Next.js, React, TypeScript, and Node.js, it can significantly reduce the engineering cost of going from &amp;ldquo;the model API runs&amp;rdquo; to &amp;ldquo;the product experience works&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;But it is not a universal layer. Model selection, permission design, cost control, logging, monitoring, and business safety still belong to the developer.&lt;/p&gt;
&lt;p&gt;If you want to build AI applications rather than train models, Vercel AI SDK is a toolkit worth trying early.&lt;/p&gt;
&lt;h2 id=&#34;references&#34;&gt;References
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/vercel/ai&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;vercel/ai GitHub repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ai-sdk.dev/docs/introduction&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;AI SDK Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://vercel.com/blog/introducing-the-vercel-ai-sdk/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Vercel: Introducing the Vercel AI SDK&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Next.js High-Severity SSRF CVE-2026-44578: Impact Scope and Upgrade Guidance</title>
        <link>https://www.knightli.com/en/2026/05/17/nextjs-cve-2026-44578-websocket-ssrf/</link>
        <pubDate>Sun, 17 May 2026 17:27:13 +0800</pubDate>
        
        <guid>https://www.knightli.com/en/2026/05/17/nextjs-cve-2026-44578-websocket-ssrf/</guid>
        <description>&lt;p&gt;Next.js disclosed a high-severity SSRF vulnerability in May 2026: CVE-2026-44578.&lt;/p&gt;
&lt;p&gt;According to the GitHub / Vercel advisory &lt;code&gt;GHSA-c4j6-fc7j-m34r&lt;/code&gt; and the NVD record, the issue affects self-hosted Next.js applications that use the built-in Node.js server and are exposed to malicious WebSocket upgrade requests. An attacker may cause the server to proxy requests to arbitrary internal or external destinations, exposing internal services or cloud metadata endpoints.&lt;/p&gt;
&lt;p&gt;Vercel-hosted deployments are not affected. The fixed versions are &lt;code&gt;15.5.16&lt;/code&gt; and &lt;code&gt;16.2.5&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;short-version&#34;&gt;Short Version
&lt;/h2&gt;&lt;p&gt;If you run Next.js on your own servers, containers, Kubernetes, ECS, VPS, bare metal, or a self-managed PaaS, check this first.&lt;/p&gt;
&lt;p&gt;Affected ranges:&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;Unaffected or lower-risk cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Applications deployed on Vercel.&lt;/li&gt;
&lt;li&gt;Applications upgraded to &lt;code&gt;15.5.16&lt;/code&gt;, &lt;code&gt;16.2.5&lt;/code&gt;, or later.&lt;/li&gt;
&lt;li&gt;Deployments that do not expose the built-in Node.js server.&lt;/li&gt;
&lt;li&gt;Environments where reverse proxies or load balancers already block unnecessary WebSocket upgrades and outbound access is restricted.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Recommended response order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Confirm the &lt;code&gt;next&lt;/code&gt; version actually running in production.&lt;/li&gt;
&lt;li&gt;Upgrade self-hosted applications to a patched version as soon as possible.&lt;/li&gt;
&lt;li&gt;If you cannot upgrade immediately, block unnecessary WebSocket upgrades at the reverse proxy or load balancer.&lt;/li&gt;
&lt;li&gt;Restrict application servers from reaching cloud metadata, internal admin panels, and sensitive internal services.&lt;/li&gt;
&lt;li&gt;Review recent WebSocket upgrade requests and internal access logs.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;what-the-vulnerability-is&#34;&gt;What the Vulnerability Is
&lt;/h2&gt;&lt;p&gt;CVE-2026-44578 is a Server-Side Request Forgery vulnerability, or SSRF.&lt;/p&gt;
&lt;p&gt;The core risk of SSRF is that an attacker does not access internal systems directly. Instead, they make your server send requests on their behalf. Servers often sit closer to private networks, cloud platforms, and internal services, so if a server becomes a proxy, it may reach resources the attacker could not otherwise access.&lt;/p&gt;
&lt;p&gt;In this Next.js case, the issue is in the WebSocket upgrade handling path. The advisory says that self-hosted applications using the built-in Node.js server can be made to proxy requests to arbitrary internal or external destinations through crafted WebSocket upgrade requests.&lt;/p&gt;
&lt;p&gt;Risk areas include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Internal HTTP services.&lt;/li&gt;
&lt;li&gt;Admin panels.&lt;/li&gt;
&lt;li&gt;Cloud metadata endpoints.&lt;/li&gt;
&lt;li&gt;Container or cluster-internal services.&lt;/li&gt;
&lt;li&gt;Internal APIs that only the server can reach.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The CVSS v3.1 score is &lt;code&gt;8.6 High&lt;/code&gt;, with this vector:&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;That means the attack is network reachable, low complexity, requires no privileges or user interaction, and primarily affects confidentiality.&lt;/p&gt;
&lt;h2 id=&#34;why-self-hosting-is-riskier&#34;&gt;Why Self-Hosting Is Riskier
&lt;/h2&gt;&lt;p&gt;The advisory explicitly states that Vercel-hosted deployments are not affected.&lt;/p&gt;
&lt;p&gt;The focus is self-hosted deployments. Their network environments vary widely: some expose the origin server directly, some sit behind Nginx, Traefik, Ingress, Cloudflare, ALB, or a custom gateway, and some run in cloud VMs, container networks, or Kubernetes clusters.&lt;/p&gt;
&lt;p&gt;If outbound traffic is not restricted, the Next.js process may be able to reach:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cloud metadata addresses such as &lt;code&gt;169.254.169.254&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Private IP ranges.&lt;/li&gt;
&lt;li&gt;Services exposed only inside a VPC.&lt;/li&gt;
&lt;li&gt;Internal Redis, Elasticsearch, Prometheus, Grafana, and similar components.&lt;/li&gt;
&lt;li&gt;Kubernetes Services, Pods, or management endpoints.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the danger is not only in Next.js itself. It depends on what the Next.js server can access from its network position.&lt;/p&gt;
&lt;h2 id=&#34;how-to-check-exposure&#34;&gt;How to Check Exposure
&lt;/h2&gt;&lt;p&gt;First, check the &lt;code&gt;next&lt;/code&gt; version.&lt;/p&gt;
&lt;p&gt;Run this in the project directory:&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;Or:&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;You can also inspect:&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;If the version falls in these ranges, you need to act:&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;Second, check the deployment model.&lt;/p&gt;
&lt;p&gt;Pay close attention to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Production services started with &lt;code&gt;next start&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Custom Node.js servers hosting Next.js.&lt;/li&gt;
&lt;li&gt;Docker images that start a Next.js server directly.&lt;/li&gt;
&lt;li&gt;Kubernetes / ECS / VPS / bare-metal self-hosting.&lt;/li&gt;
&lt;li&gt;A Next.js origin still reachable behind a reverse proxy.&lt;/li&gt;
&lt;li&gt;Application networks that can reach internal services or cloud metadata.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the application is deployed on Vercel, the official advisory says it is not affected by this vulnerability. Still, keep Next.js updated, because adjacent releases may contain other security fixes.&lt;/p&gt;
&lt;h2 id=&#34;what-version-to-upgrade-to&#34;&gt;What Version to Upgrade To
&lt;/h2&gt;&lt;p&gt;The official patched versions are:&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;Upgrade example:&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;Or, if you are on 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;Or:&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;Then rebuild and redeploy:&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;Or follow your CI/CD process to rebuild and publish the Docker image.&lt;/p&gt;
&lt;p&gt;If your project is pinned to 14.x or 15.x, do not rush into a major upgrade to 16.x just for this fix. A safer path is to upgrade to the &lt;code&gt;15.5.16&lt;/code&gt; patch line first, test and release, then plan a major-version migration separately.&lt;/p&gt;
&lt;h2 id=&#34;temporary-mitigations&#34;&gt;Temporary Mitigations
&lt;/h2&gt;&lt;p&gt;If you cannot upgrade immediately, the advisory&amp;rsquo;s core guidance is: do not expose the origin server directly to untrusted networks; block WebSocket upgrades at the reverse proxy or load balancer if they are not required; and restrict outbound access from the origin where possible.&lt;/p&gt;
&lt;p&gt;Consider these mitigations:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Do not expose the Next.js origin server directly.&lt;/li&gt;
&lt;li&gt;Filter unnecessary WebSocket upgrades at Nginx, Ingress, ALB, Cloudflare, or similar entry points.&lt;/li&gt;
&lt;li&gt;If the business does not use WebSockets, reject requests with upgrade semantics.&lt;/li&gt;
&lt;li&gt;Apply egress restrictions to block access to cloud metadata and sensitive internal ranges.&lt;/li&gt;
&lt;li&gt;Use safer cloud metadata modes where available, such as token-required metadata services.&lt;/li&gt;
&lt;li&gt;Add authentication and network isolation around admin panels, databases, caches, and monitoring systems.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Reverse proxy rules are temporary mitigations, not a replacement for upgrading. Framework vulnerabilities should ultimately be fixed by moving to patched versions.&lt;/p&gt;
&lt;h2 id=&#34;operational-review&#34;&gt;Operational Review
&lt;/h2&gt;&lt;p&gt;Because this issue mainly affects confidentiality, the key question is whether the server was used to reach internal resources.&lt;/p&gt;
&lt;p&gt;Review:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web logs for abnormal &lt;code&gt;Upgrade&lt;/code&gt;, &lt;code&gt;Connection&lt;/code&gt;, &lt;code&gt;Host&lt;/code&gt;, paths, and source IPs.&lt;/li&gt;
&lt;li&gt;Reverse proxy or load balancer logs for unusual WebSocket upgrade requests.&lt;/li&gt;
&lt;li&gt;Abnormal outbound connections near the Next.js service.&lt;/li&gt;
&lt;li&gt;Cloud metadata access logs or credential usage records.&lt;/li&gt;
&lt;li&gt;Unusual access to internal admin services, monitoring, caches, or search systems.&lt;/li&gt;
&lt;li&gt;Abnormal IAM temporary credential, access key, or token usage.&lt;/li&gt;
&lt;li&gt;Suspicious processes, downloads, or lateral movement on containers or hosts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If exploitation is suspected:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preserve logs and evidence.&lt;/li&gt;
&lt;li&gt;Rotate potentially exposed cloud credentials, API keys, database passwords, and session secrets.&lt;/li&gt;
&lt;li&gt;Review recent cloud account API calls.&lt;/li&gt;
&lt;li&gt;Check internal service access records.&lt;/li&gt;
&lt;li&gt;Rebuild affected containers or hosts.&lt;/li&gt;
&lt;li&gt;Revisit egress controls and metadata protection.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;not-the-same-as-the-reactnextjs-rce&#34;&gt;Not the Same as the React/Next.js RCE
&lt;/h2&gt;&lt;p&gt;One common source of confusion: CVE-2026-44578 is a Next.js WebSocket upgrade SSRF, not the earlier React Server Components RCE.&lt;/p&gt;
&lt;p&gt;Its core impact is making the server request attacker-chosen internal or external addresses. The main risk is information exposure and internal resource probing.&lt;/p&gt;
&lt;p&gt;React Server Components RCE issues are code execution risks, with different consequences and patch ranges.&lt;/p&gt;
&lt;p&gt;So do not stop at the headline &amp;ldquo;Next.js has a vulnerability.&amp;rdquo; Map the exact CVE to the affected versions, deployment model, and fixed versions.&lt;/p&gt;
&lt;h2 id=&#34;teams-that-should-prioritize-this&#34;&gt;Teams That Should Prioritize This
&lt;/h2&gt;&lt;p&gt;Highest priority:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Self-hosted Next.js production sites.&lt;/li&gt;
&lt;li&gt;Deployments on cloud VMs, containers, Kubernetes, or internal networks.&lt;/li&gt;
&lt;li&gt;Application servers that can access cloud metadata services.&lt;/li&gt;
&lt;li&gt;Application servers that can reach internal admin panels, databases, caches, or monitoring systems.&lt;/li&gt;
&lt;li&gt;Directly exposed &lt;code&gt;next start&lt;/code&gt; origin servers.&lt;/li&gt;
&lt;li&gt;Older &lt;code&gt;next&lt;/code&gt; versions with unclear upgrade ownership.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lower priority:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Applications fully deployed on Vercel.&lt;/li&gt;
&lt;li&gt;Applications already upgraded to patched versions.&lt;/li&gt;
&lt;li&gt;Origins not directly exposed, with entry layers blocking unnecessary WebSocket upgrades.&lt;/li&gt;
&lt;li&gt;Strict outbound network control preventing access to sensitive internal resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lower priority does not mean &amp;ldquo;do not upgrade.&amp;rdquo; Next.js is a high-exposure framework, and long-stale framework versions accumulate risk quickly.&lt;/p&gt;
&lt;h2 id=&#34;developer-checklist&#34;&gt;Developer Checklist
&lt;/h2&gt;&lt;p&gt;Use this checklist:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Confirm the &lt;code&gt;next&lt;/code&gt; version in every repository.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Identify all self-hosted deployments, not only Vercel projects.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Mark services using &lt;code&gt;next start&lt;/code&gt; or the built-in Node.js server.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Upgrade to &lt;code&gt;15.5.16&lt;/code&gt;, &lt;code&gt;16.2.5&lt;/code&gt;, or later.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Rebuild and publish production images.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Block unnecessary WebSocket upgrades at the entry layer.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Restrict application server access to cloud metadata and sensitive internal ranges.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Review recent abnormal upgrade requests and outbound access.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Rotate credentials that may have been exposed.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Add Next.js security updates to the dependency update process.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;CVE-2026-44578 is a high-severity Next.js SSRF vulnerability that deserves prompt attention.&lt;/p&gt;
&lt;p&gt;It does not affect Vercel-hosted deployments, but it covers a broad range of self-hosted Next.js applications: from &lt;code&gt;13.4.13&lt;/code&gt; up to before &lt;code&gt;15.5.16&lt;/code&gt;, and from &lt;code&gt;16.0.0&lt;/code&gt; up to before &lt;code&gt;16.2.5&lt;/code&gt;. The trigger is the WebSocket upgrade handling path. An attacker may cause the server to proxy requests to internal or external addresses, potentially exposing internal services or cloud metadata endpoints.&lt;/p&gt;
&lt;p&gt;The direct fix is to upgrade to &lt;code&gt;15.5.16&lt;/code&gt; or &lt;code&gt;16.2.5&lt;/code&gt;. Temporary mitigations are to avoid exposing the origin server directly, block unnecessary WebSocket upgrades, and restrict outbound access from the application server.&lt;/p&gt;
&lt;p&gt;For operations teams, the important point is not only the CVE score. It is what your Next.js server can reach from its network position. With SSRF, the real impact often depends on internal resources and cloud permissions behind the server.&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://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>
        
    </channel>
</rss>
