Zum Inhalt springen
← Alle Artikel

Security nach Plan: was der September für Next.js brachte

06. Okt. 2026 · Web-Entwicklung · 6 min

·Von Dimitri Pisarev

Next.js hat im September zwei Security-Releases ausgeliefert. Das erste kam außer der Reihe am 22. September: eine kritische Remote Code Execution in der Node.js-Variante von ImageResponse aus next/og, deren Ursache im SVG-Renderer Satori liegt, behoben in 16.3.6 mit Härtung in 15.5.26 (Release-Post). Das zweite lief nach Plan: angekündigt am 23. September mit einer Woche Vorlauf, erschienen am 30. September als 16.3.8 und 15.5.27, mit exakt sieben Advisories, einem hohen, fünf mittleren und einem niedrigen (September 2026 Security Release).

Diese Seite lief bis heute Morgen auf 16.3.5, mitten im betroffenen Bereich, und ihre Social-Preview-Bilder rendern über genau die Komponente, die der kritische Hinweis nennt: ImageResponse auf der Node-Runtime. Der Out-of-Band-Patch erschien am 22. September. Meiner kam vierzehn Tage später, eingelassen in das planmäßige Release, das heute Morgen ein Agent hier eingespielt hat. Vierzehn Tage bei einer bekannten kritischen Lücke. Der Kalender soll dieses Fenster verkleinern. Das funktioniert nur, wenn jemand auf das Datum reagiert.

Welche der acht Advisories trifft deine Konfiguration?#

Die Septemberbilanz steht bei acht: die Satori-Kritische vom 22. September und sieben weitere Advisories vom 30. Sechs Einträge tragen eine CVE-Nummer. Die Satori-Kritische und ein use cache-Medium existieren nur unter GHSA-Kennungen. Der Schweregrad schreibt die Schlagzeile. Die Bedingungsspalte entscheidet, wessen Problem jeder Eintrag ist.

AdvisoryWann der Fall eintrittWas zu tun ist
GHSA-vcvr-r3jv-pc5j, kritisch, 22. SeptemberNode-ImageResponse aus next/og, 16.2.0 bis 16.3.5. Edge und 15.x sind nicht betroffen16.3.6 oder neuer
CVE-2026-94483 / GHSA-cjq9-62q9-8jv4, hochSSRF in der Bildoptimierung über eine angreiferkontrollierte, allow-gelistete Remote-URLimages.remotePatterns prüfen, dann Patch einspielen
CVE-2026-94543 / GHSA-4jqv-mc3x-m676, mittelCache-Poisoning von SSG- und ISR-Seiten, nur beim selbst gehosteten Pages Router16.3.8 oder 15.5.27
CVE-2026-94484 / GHSA-mcj8-r9mp-w47p, mittelRoot-Level-Catch-all plus SSG oder ISR: Inhaltsersetzung, persistenter DoSDerselbe Patch, dazu den Routenbaum durchsuchen
CVE-2026-94485 / GHSA-f87g-xv8r-7p7x, mittelMetadata-Image-Routen ignorieren dynamicParams, nur Webpack-BuildsTurbopack oder der Patch
GHSA-h694-7cp9-m8p3, mittelVerschachteltes use cache leakt über Root-Parameterwerte hinweg, bei aktiven Cache Components16.3.8
CVE-2026-94544 / GHSA-3w37-wq28-93x7, mittelEin ausstehendes use cache-Fill leakt Draft-Mode-Inhalte in öffentliche Seiten16.3.8
CVE-2026-94486 / GHSA-39w2-rjm5-chcv, niedrigMCP-Endpunkt des Dev-Servers leakt Pfade und Snippets, nur unter next devPatch einspielen, Dev-Server nicht mehr nach außen exponieren

Das Kleingedruckte zum 15.5-Wartungszweig: 15.5.27 erhält drei der sieben Fixes, die beiden Cache-Poisonings und den Metadata-Image-Bypass (Release Notes), während die use cache-Advisories und der Dev-Endpunkt auf der 15.5-Linie nicht existieren. Der Post zum hohen SSRF liefert die klarste Grenze: „If no images.remotePatterns are configured, your application is not affected.“

Der Zeitplan ist drei Monate alt#

Der Programm-Post erschien am 13. Juli. „These were infrequent, but came with no advance notice and caused disruption for our users“, schrieb das Team über die alten Ad-hoc-Patches, und stellte auf monatliche Vorankündigungen um, jede mit Datum und maximalem Schweregrad. Der erste Zyklus erschien noch im selben Juli mit Fixes für 4 hohe und 5 mittlere Schwachstellen (Programm-Post). August kündigte den 26. an und veröffentlichte einen Tag früher, am 25. (Update-Post).

September brachte den dritten Zyklus und das erste Out-of-Band-Release eine Woche vor dem planmäßigen: Der Satori-Fix wurde am 22. September angekündigt und veröffentlicht, drei Stunden zwischen den beiden Schritten, der geplante Release folgte mit Ankündigung am 23. für den 30. (Ankündigung). Die Woche verbog sich trotzdem öffentlich. 16.3.7 erschien am 29. September als reiner Bugfix-Backport, ein Addendum verlegte den Security-Inhalt auf 16.3.8 und 15.5.27, und das Versprechen schrumpfte: „This release now addresses seven vulnerabilities instead of nine. The remaining two (one critical, one high) are pending upstream coordination and will be addressed in a later Next.js release.“ Stand heute, 6. Oktober, ist keiner von beiden erschienen.

So lief das Upgrade auf dieser Seite#

Diese Seite ist der Next.js-16-Build aus dem Lighthouse-100-Post: statisch vorgerendert, exakt gepinnt, von Hand mit docker compose auf einen VPS ausgerollt. Das Upgrade lief heute Morgen, von 16.3.5 auf 16.3.8, gefahren von einem Agenten, und der Weg liegt im Paket selbst: ein next upgrade-Befehl und Dokumentation in node_modules. „Agents always have access to docs that match your installed version, with no network request or external lookup required.“ Der Versions-16-Guide verlangt danach eine Verifikation zur Laufzeit.

$ npm install --save-exact next@16.3.8
$ npx next --version
Next.js v16.3.8

Der Rest passt in einen Satz: eine Versionszeile in package.json, die Lockfile, 32 Tests über 4 Dateien grün, der Produktions-Build beim ersten Lauf sauber, keine Quelldatei berührt. Smoke-Checks über die Startseite, einen Artikel und beide Feed-Formate lieferten 200. Ein Security-Patch im selben Major-Release sollte genau so langweilig sein.

Die Tabelle gegen dieses Repository#

Ich habe die Bedingungsspalte gegen dieses Repo durchlaufen. next.config.ts setzt keine images.remotePatterns. Der hohe SSRF hat keine Angriffsfläche. Pages Router fehlt, ein Root-Level-Catch-all fehlt, beide Cache-Poisoning-Medien verfehlen das Projekt. Cache Components und Draft Mode sind nicht aktiv, damit gehen beide use cache-Advisories ebenfalls leer aus. Builds laufen seit Next.js 16 standardmäßig mit Turbopack, was den Webpack-only-Metadata-Bypass gegenstandslos macht. Mein Catch-all liegt unter dem Locale-Segment. Die Meldung nennt Root-Level. Kein Treffer.

Der einzige Berührungspunkt ist der niedrige Eintrag: „Only applications run with next dev are affected. Production deployments do not serve this endpoint.“ Er gilt für meine Dev-Sessions. Die ausgerollte Seite betreibt den Endpunkt nie.

Note

Dieser Advisory-Endpunkt ist etwas anderes als eine öffentliche MCP-Route im Deployment. Die eigene /api/mcp-Route dieser Seite läuft in der Produktion.

Keiner dieser Befunde macht die Tabelle zur optionalen Lektüre. Diese Seite ist selbst gehostet, liegt hinter Cloudflare, liefert statisch generierte Seiten aus und betreibt eine opengraph-image-Route mit dynamicParams auf false. Der hohe SSRF wiederholt dieselbe Lektion zu Vertrauensgrenzen wie in meinem Post zu Agent-Fetch-Guards: Das allow-gelistete URL-Pattern ist der Weg, den die Anfrage nimmt. Zwei mittlere Einträge beschreiben Flächen, die genau einen Refactor entfernt sind: Ein Root-Level-Catch-all erzeugt die erste, Cache Components aktiviert das use cache-Paar. Die Bedingungsspalte misst Abstand, und der Abstand schrumpft ohne Ankündigung.

Der Config-Check in fünf Minuten#

Lass ihn über dein Repo laufen, bevor die nächste Ankündigung landet:

  • Version: npx next --version. 16.3.8 oder 15.5.27, oder ein schriftlicher Grund, warum nicht. Der Netlify-Changelog sagt dasselbe (Changelog).
  • remotePatterns: Steht images.remotePatterns in der next.config, bleibt der hohe SSRF dein Problem, bis jedes einzelne Pattern geprüft ist.
  • Pages Router, selbst gehostet: Beide Cache-Poisoning-Medien treffen dich. Die lauteste Kombination hier ist ein Root-Level-Catch-all über SSG oder ISR.
  • Cache Components: Der Draft-Leak-Hinweis passt wörtlich auf use cache plus Draft-Mode-Previews, die entwurfsabhängige Inhalte ausliefern.
  • Build-Tool: Webpack plus opengraph-image- oder twitter-image-Routen öffnet den Metadata-Bypass.
  • Dev-Gewohnheiten: Eine next dev-Session, die dein Browser aus einem anderen Tab erreicht, ist die gesamte Angriffsfläche des niedrigen Eintrags. Dev-Server gehören nicht auf geteilte Interfaces.

Zwei der ursprünglich angekündigten neun Advisories, ein kritischer und ein hoher, sind am 14. Oktober im Out-of-Band-Release im Oktober erschienen, neben einer neuen kritischen Lücke in der Bild-Pipeline. Das Programm verspricht eine monatliche Vorankündigung, die nächste bringt die Hausaufgaben mit. Der 30. September liegt hinter allen. Die einzige verbleibende Variable ist die Version auf deiner Maschine. npx next --version.