---
title: "Node.js Juni 2026 Sicherheitsrelease: 12 CVEs über v22.23.0, v24.17.0 und v26.3.1, mit zwei High-Severity TLS- und Crypto-Fixes"
description: "Am 18. Juni 2026 hat das Node.js-Projekt koordinierte Sicherheitsreleases für die v22 „Jod" LTS, die v24 „Krypton" LTS und die v26 Current-Linie veröffentlicht. Der Drop schließt 12 CVEs, darunter zwei mit High-Bewertung: CVE-2026-48618 (TLS-Hostname-Normalisierung für Server-Identity-Checks) und CVE-2026-48933 (WebCrypto-Cipher-Output-Längen-Guard). Außerdem an Bord: OpenSSL 3.5.7, undici 8.5.0 auf v26, llhttp 9.4.2 und nghttp2 1.69.0 (semver-major) auf v22 und v24."
date: 2026-06-18
image: "/images/heroes/2026-06-18--node-js-june-2026-security-releases.png"
author: lschvn
tags: ["security", "runtimes", "tooling"]
tldr:
  - "Node.js hat am 18. Juni 2026 [v22.23.0](https://github.com/nodejs/node/releases/tag/v22.23.0) (LTS „Jod"), [v24.17.0](https://github.com/nodejs/node/releases/tag/v24.17.0) (LTS „Krypton") und [v26.3.1](https://github.com/nodejs/node/releases/tag/v26.3.1) (Current) veröffentlicht und damit 12 CVEs über die drei aktiven Release-Linien geschlossen. Der koordinierte Drop ist ein Sicherheitsrelease auf jeder Linie, wobei v26 zusätzlich die kleinen Feature-Patches mitnimmt, die auf v26.3.0 folgen, aber noch nicht unter dem vorherigen Embargo standen."
  - "Die zwei High-Severity-Fixes sind CVE-2026-48618 (TLS-Hostname-Normalisierung für Server-Identity-Checks) und CVE-2026-48933 (WebCrypto-Cipher-Output-Längen-Guard, der Angreifern erlauben konnte, Cipher-Output außerhalb der erwarteten Grenzen zu beobachten oder zu korrumpieren). Beide wurden von Matteo Collina beziehungsweise Filip Skokan eingereicht und gefixt, und die Commit-Liste von v26.3.1 zeigt die kanonischen Patches, die auf alle drei Linien zurückportiert wurden."
  - "Das Medium-Bundle deckt Proxy-Credential-Leakage in HTTP-CONNECT-Tunnel-Fehlern, unbegrenztes `originSet`-Wachstum in http2, case-sensitives SNI-Context-Matching, eingebettete NUL-Bytes in DNS-Hostnames, Session-Reuse ohne Bindung an den authentifizierten TLS-Host und einen nghttp2-Integrationsfix ab, der mit dem nghttp2-1.69.0-Semver-Major-Bump auf den LTS-Linien ausgeliefert wird. Das Low-Bundle ist Permission-Model-Hardening: `process.chdir` auf writereport, FileHandle.utimes-Disable, Response-Queue-Poisoning in `http.Agent` und eine net-Scope-Wache für pipe open und chmod auf v26."
faq:
  - question: "Auf welche Node.js-Versionen sollte ich heute aktualisieren?"
    answer: "Aktualisieren Sie auf v22.23.0, v24.17.0 oder v26.3.1, je nach Release-Linie. v22 „Jod" und v24 „Krypton" sind die aktiven LTS-Linien, v26 ist Current, und v20 ist aus dem aktiven LTS-Zyklus raus (es bekommt weiterhin Security-Patches, ist aber nicht mehr die empfohlene LTS). Wer noch auf v18 sitzt, sollte die Migration planen: v18 hat die aktive LTS im April 2025 verlassen und ist nur noch im Maintenance-Support."
  - question: "Was ist CVE-2026-48618 und wer ist betroffen?"
    answer: "CVE-2026-48618 ist der TLS-Hostname-Normalisierungsfix für Server-Identity-Checks, mit High-Bewertung. Vor dem Fix verglich der Server-Identity-Check in `tls` eine normalisierte Form des Hosts gegen einen nicht normalisierten SNI oder Zertifikat-Subject, sodass ein sorgfältig konstruierter Hostname den Check umgehen und sich an einen Virtual Host binden konnte, den der Client gar nicht erreichen wollte. Der Patch von Matteo Collina normalisiert den Hostnamen einheitlich auf SNI-Seite, Certificate-SAN-Seite und URL-Seite der ursprünglichen Client-Anfrage, was den Bypass schließt und Node mit dem Verhalten von OpenSSL 3.x und dem WHATWG-URL-Parser in Einklang bringt."
  - question: "Was ist CVE-2026-48933 (WebCrypto-Cipher-Output-Länge)?"
    answer: "CVE-2026-48933 ist der WebCrypto-Cipher-Output-Längen-Guard, ebenfalls mit High-Bewertung. Die Pfade `SubtleCrypto.encrypt` und `SubtleCrypto.decrypt` akzeptieren bei bestimmten Algorithmen (vor allem AES-CTR und AES-CBC, wenn der Aufrufer einen Counter- oder Tag-getrimmten Output anfordert) einen `length`-Parameter, und der vorherige Codepfad hat die angeforderte Länge nicht immer gegen den tatsächlich vom darunterliegenden OpenSSL-Aufruf produzierten Buffer durchgesetzt. Ein bösartiger oder fehlerhafter Aufrufer konnte eine `length` über die Cipher-Ausgabe hinaus übergeben und entweder über den vorgesehenen Buffer hinaus lesen oder, je nach Algorithmus, Bytes beobachten, die eigentlich hätten getrimmt werden sollen. Filip Skokans Fix clampet den zurückgegebenen Output auf die angeforderte Länge und validiert die Eingabelänge auf der Encrypt-Seite, was die Read-Past-End- und Write-Past-End-Fälle schließt."
  - question: "Warum sind acht der zwölf CVEs als Medium oder Low gelistet, die Schlagzeile aber trotzdem „Sicherheitsrelease"?"
    answer: "Koordinierte Sicherheitsreleases bei Node.js folgen der Projektpolitik, jede CVE, deren Embargo am selben Tag fällt, zu bündeln, nicht nur die schwersten. Die zwei Highs sind die Schlagzeile, aber schon ein einzelnes Medium wie CVE-2026-48619 (unbegrenztes `originSet`-Wachstum in http2) lässt sich mit einer einzigen TCP-Verbindung in einen effektiven Denial-of-Service gegen einen HTTP/2-Server verwandeln, also sind Mediums keine optionalen Patches. Die vier Lows sind hauptsächlich Lücken im Permission-Modell, aber sie betreffen nur Code, der auf `--permission` oder `--experimental-permission` opt-in ist, daher ist die unmittelbare Dringlichkeit geringer. Der Release heißt Security-Release, weil jede Linie aus einem einzigen Embargo-Commit-Set neu gebaut wird."
  - question: "Gibt es in diesem Drop auch nicht-sicherheitsrelevante Änderungen?"
    answer: "Ja, drei Dependency-Updates kommen parallel zu den Security-Fixes. OpenSSL geht auf 3.5.7 über alle drei Linien. `undici` geht auf 8.5.0 auf v26, 7.28.0 auf v24 und 6.27.0 auf v22, was den mitgelieferten Fetch-Client aktuell hält. `llhttp` geht auf 9.4.2 auf allen Linien. Auf den LTS-Linien v22 und v24 springt `nghttp2` auf 1.69.0, was in der Node-Commit-Message als SEMVER-MAJOR getaggt ist, weil die Integration Breaking Changes von Upstream enthält (ein CVE-2026-48937-Follow-up wurde im selben Release geliefert, um diese zu absorbieren). Die v26-Linie behält nghttp2 auf ihrer 26.2.0-Basis."
  - question: "Ich nutze das `--permission`-Flag. Was ändert sich für mich?"
    answer: "Drei der vier Low-Severity-CVEs sind Permission-Model-Hardening, und sie betreffen Sie konkret, weil Sie sich für das experimentelle Permission-System entschieden haben. CVE-2026-48617 sorgt dafür, dass `process.chdir` korrekt mit `--allow-fs-read` und `--allow-fs-write` auf dem writereport-Pfad kooperiert. CVE-2026-48935 deaktiviert `FileHandle.utimes`, wenn das Permission-Modell aktiv ist, weil der zugrundeliegende `utimes`-Syscall nicht auf der Allow-List stand und als Seitenkanal zum Auslesen des Filesystems missbraucht werden konnte. CVE-2026-48936 (nur v26) zieht den net-Scope um `pipe(2)` und `chmod(2)` enger. Nichts davon ist breaking für Code, der die Permission-Flags nicht nutzt, aber es zählt, wenn Sie Produktionsworkloads auf `--permission` laufen lassen."
---

Das Node.js-Projekt hat am 18. Juni 2026 ein koordiniertes Sicherheitsrelease ausgeliefert, das auf einen Schlag jede aktive Release-Linie abdeckt: [v22.23.0](https://github.com/nodejs/node/releases/tag/v22.23.0) für die „Jod"-LTS, [v24.17.0](https://github.com/nodejs/node/releases/tag/v24.17.0) für die „Krypton"-LTS und [v26.3.1](https://github.com/nodejs/node/releases/tag/v26.3.1) für die Current-Linie. Zwölf CVEs landen in dem Drop, zwei davon mit High-Bewertung, der Rest verteilt sich auf Medium und Low. Das Release ist auf jeder Linie ein Security-Release, wobei v26.3.1 zusätzlich die kleine Reihe von Feature-Patches mitnimmt, die auf [v26.3.0](https://github.com/nodejs/node/releases/tag/v26.3.0) folgen (der [Buffer-Pool-64-KiB-Default](https://github.com/nodejs/node/pull/63597), die neue `httpValidation`-Option und die `permission.drop`-API), aber noch nicht unter dem vorherigen Embargo standen.

Der vorherige Node.js-Security-Drop dieser Form fand im März 2026 statt (siehe [unsere Berichterstattung](/articles/2026-04-03-node-js-march-2026-security-releases)). Das Muster ist dasselbe: Embargo-Fixes sammeln sich an, das Embargo fällt, und das Projekt liefert den kompletten Satz am selben Tag über alle drei Linien aus. Was diesmal anders ist, ist das Cluster aus TLS- und Crypto-CVEs, das die High- und Medium-Bänder dominiert. Vier der sechs Medium-Einträge sind TLS-förmig, und einer der zwei Highs ist ein WebCrypto-Output-Längen-Guard, der die `crypto.subtle`-API betrifft, von der inzwischen viel Serverless- und Edge-Code abhängt.

## Die zwei High-Severity-Fixes

**CVE-2026-48618, TLS-Hostname-Normalisierung für Server-Identity-Checks.** Matteo Collinas Patch zielt auf den Pfad, in dem ein Node.js-TLS-Server den vom Client gelieferten Hostnamen gegen das präsentierte Zertifikat prüft. Vor dem Fix hat der Vergleichspfad die verglichenen Hostnames nicht konsistent normalisiert, was einem sorgfältig konstruierten Host (typischerweise mit gemischter Groß-/Kleinschreibung, Trailing-Dots, IDN-Encoding oder einer Mischung aus URL-encodierten und rohen Zeichen) erlaubte, die Prüfung zu umgehen und sich an einen Virtual Host zu binden, den der Client gar nicht erreichen wollte. Der Patch normalisiert den Hostnamen einheitlich auf der SNI-Seite, der Zertifikat-SAN-Seite und der URL-Seite der ursprünglichen Client-Anfrage, was Node mit `X509_VERIFY_PARAM_set1_host` aus OpenSSL 3.x und mit dem WHATWG-URL-Parser in Einklang bringt. Für alle, die TLS im Node-Prozess terminieren statt an einem Load Balancer, ist das der Headline-Fix des Releases.

**CVE-2026-48933, WebCrypto-Cipher-Output-Längen-Guard.** Filip Skokans Fix landet in den `SubtleCrypto.encrypt`- und `SubtleCrypto.decrypt`-Pfaden. Bestimmte Algorithmen (vor allem AES-CTR und AES-CBC, wenn der Aufrufer einen Counter- oder Tag-getrimmten Output anfordert) akzeptieren einen `length`-Parameter, den der vorherige Codepfad nicht immer gegen den tatsächlich vom darunterliegenden OpenSSL-Aufruf produzierten Buffer durchgesetzt hat. Ein bösartiger oder fehlerhafter Aufrufer konnte eine `length` über die Cipher-Ausgabe hinaus übergeben und entweder über den vorgesehenen Buffer hinaus lesen oder, je nach Algorithmus, Bytes beobachten, die eigentlich hätten getrimmt werden sollen. Der Patch clampet den zurückgegebenen Output auf die angeforderte Länge und validiert die Eingabelänge auf der Encrypt-Seite, was die Read-Past-End- und Write-Past-End-Fälle schließt. Diese Art von Fix ist relevant für Code, der Nodes `crypto.subtle` für HMAC-basierte Authentifizierung, für Passkey-Flows und für jede Library nutzt, die Envelope-Encryption in der browserförmigen `SubtleCrypto`-API macht.

## Die sechs Medium-Fixes

Das Medium-Band ist das Fleisch des Releases. Sechs CVEs, die sich alle in einen Denial-of-Service oder in eine informationspreisgabe mit niedrigem Aufwand verwandeln lassen, und die alle auf dem normalen Patch-Zeitplan liegen sollten, statt auf ein „nur High"-Triage zu warten.

- **CVE-2026-48615, Proxy-Credentials in Tunnel-Fehlern.** Wenn ein Node.js-HTTP-Client die `CONNECT`-Methode nutzt, um einen Tunnel durch einen HTTPS-Proxy zu öffnen, hat der alte Fehlerpfad die Proxy-URL (inklusive der eingebetteten Credentials) in die geworfene Fehlermeldung emittiert. Der Patch redaktiert den Credential-Teil, bevor der Fehler sichtbar wird, sodass ein Stacktrace oder eine Logdatei das Proxy-Passwort nicht mehr leakt. Der Fix sitzt in `lib` und `test`, was bedeutet, dass er sowohl den Runtime-Pfad als auch die Test-Fixtures berührt, die die Fehlerform prüfen.

- **CVE-2026-48619, http2-`originSet`-Memory-Wachstum.** Der HTTP/2-Server-Pfad hat Origin-Einträge in ein internes `originSet` ohne hartes Limit aufgenommen, was eine einzige Verbindung das Set unbegrenzt wachsen ließ. Der Patch setzt eine vernünftige Obergrenze, ab der neue Einträge abgelehnt werden. Bei HTTP/2 im Speziellen kann eine einzige TCP-Verbindung viele Requests bedienen, daher ist eine unbegrenzte pro-Verbindung-Datenstruktur de facto unbegrenzt pro Angreifer.

- **CVE-2026-48928, TLS-case-sensitives SNI-Context-Matching.** Die SNI-basierte Context-Auswahl (`servername`-Event, `SNICallback`) hat bisher einen case-sensitiven Vergleich gemacht. RFC 6066 schreibt case-insensitives SNI-Matching auf dem Wire-Format vor, aber Nodes interne Context-Auswahl war strenger als das Wire-Format verlangte, was eine Klasse von Bugs produzierte, in denen „derselbe Hostname je nach Schreibweise zu unterschiedlichen Zertifikaten routet". Der Fix senkt den Vergleich auf case-insensitive, was konsistent mit dem Wire-Format und mit dem ist, was OpenSSL selbst tut.

- **CVE-2026-48930, NUL-Bytes in DNS-Hostnames.** Ein Hostname, der ein eingebettetes NUL-Byte (`\x00`) enthielt, wurde bisher von den Modulen `dns` und `net` akzeptiert, was ein seit Langem bekannter Injection-Vektor ist, weil das C-`getaddrinfo` und Verwandte das NUL als String-Terminator behandeln. Der Patch weist solche Hostnames an der Grenze ab, was das klassische Angriffsmuster „schneide-den-String-am-NUL" schließt, das in irgendeiner Form in der Netzwerkschicht jeder Sprache schon einmal aufgeschlagen ist.

- **CVE-2026-48934, TLS-Session-Reuse an Host gebunden.** Der TLS-Session-Cache hat bisher zugelassen, dass eine aus einer früheren Verbindung zu einem Host fortgesetzte Session für einen anderen Host wiederverwendet wird. Der Fix bindet das Session-Ticket an den Hostnamen, den die ursprüngliche Verbindung authentifiziert hat, sodass ein Client eine Session nicht über Hosts hinweg verschieben kann (was ein Session-Fixation-Vektor in Code wäre, der sich auf Session-Resumption als Authentifizierungskontext verlässt).

- **CVE-2026-48937, nghttp2-1.69.0-Integration.** Das ist das Dependency-Follow-up. Die v22- und v24-Linien springen mit nghttp2 auf 1.69.0, was in der Node-Commit-Message als SEMVER-MAJOR getaggt ist, weil Upstream Breaking Changes in der Integration ausgeliefert hat. Tim Perrys Follow-up absorbiert diese im Node-Wrapper. Die v26-Linie behält vorerst ihre 26.2.0-Basis-nghttp2.

## Die vier Low-Fixes

Das Low-Band ist Permission-Model-Hardening, mit einer HTTP-Ausnahme.

- **CVE-2026-48617, `process.chdir` auf `writereport`.** Ein Pfad, in dem `process.chdir` nicht gegen die Read/Write-Allow-Lists des Permission-Modells geprüft wurde.

- **CVE-2026-48931, http-Response-Queue-Poisoning in `http.Agent`.** Eine Low-Severity-Klasse, in der die Antwort-Queue des Agents von einem bösartigen Server vergiftet werden konnte, was in einem engen Race-Fenster zu einem Use-after-Free führte. Matteo Collinas Fix zieht den Queue-Lebenszyklus enger.

- **CVE-2026-48935, `FileHandle.utimes` mit Permission-Modell.** `FileHandle.utimes` ist jetzt deaktiviert, wenn das Permission-Modell aktiv ist, weil der zugrundeliegende `utimes`-Syscall nicht auf der Allow-List stand und als Seitenkanal zum Auslesen des Filesystems missbraucht werden konnte.

- **CVE-2026-48936, pipe-open- und chmod-net-Scope (nur v26).** Die v26-Linie bekommt zusätzlich eine engere Permission-Behandlung um `pipe(2)` und `chmod(2)`, also die zwei Syscalls, die das Permission-Modell in einem halb-eingeschränkten Zustand belassen hatte.

## Dependency-Updates und die LTS-/Current-Aufteilung

Drei Dependency-Updates landen auf jeder Linie, eines ist nur LTS.

- **OpenSSL 3.5.7** auf v22, v24 und v26. Routinemäßiges Security-Refresh; die OpenSSL-3.5.x-Linie ist die, auf der Node ist, seit v24 LTS wurde.
- **llhttp 9.4.2** auf allen Linien. Das HTTP-Parser-Refresh ist eine Minor-Version, keine Public-API-Änderung.
- **undici** geht auf 8.5.0 auf v26, 7.28.0 auf v24 und 6.27.0 auf v22. Die Versionsaufteilung spiegelt die Node-Policy wider, pro Release-Linie ein anderes Major von `undici` zu pinnen, sodass der mitgelieferte Fetch-Client dem Major folgt, gegen das die Linie ursprünglich ausgeliefert wurde.
- **nghttp2 1.69.0** auf v22 und v24 nur. Die v26-Linie behält ihre 26.2.0-Basis.

## Was zu tun ist

Wenn Sie auf v22 LTS sind, aktualisieren Sie auf v22.23.0. Wenn Sie auf v24 LTS sind, aktualisieren Sie auf v24.17.0. Wenn Sie auf v26 Current sind, aktualisieren Sie auf v26.3.1. Das Release ist auf jeder Linie ein Security-Release, also ist das Update auf dem normalen Patch-Zeitplan die richtige Bewegung und nichts, was man aufschiebt. Wer noch auf v20 sitzt, ist aus der aktiven LTS raus und sollte den Wechsel auf v22 planen (oder, falls die eigene Toolchain es trägt, v24).

Für die Highs bei TLS und WebCrypto ist der praktische Impact auf Code, der TLS im Node-Prozess terminiert (statt an einem Load Balancer), und auf Code, der `crypto.subtle` direkt nutzt (statt durch eine höherliegende Library wie `jose` zu gehen). Die Library-Wrapper sanitisieren das `length`-Argument in der Regel, bevor sie die darunterliegende API aufrufen, also ist der WebCrypto-Fix vor allem für Code relevant, der direkt mit `SubtleCrypto` spricht. Der TLS-Hostname-Fix betrifft jeden Server, der das `servername`-Event oder `SNICallback` nutzt, um ein Zertifikat per Hostname auszuwählen.

Das ist das zweite Node.js-Sicherheitsrelease 2026, und das Muster ist mittlerweile vertraut: Embargo-Fixes sammeln sich zwischen den aktiven Linien an, das Projekt liefert den kompletten Satz am selben Tag aus, und die LTS- und Current-Releases bewegen sich zusammen. Die TLS-lastige Form dieses Drops erinnert daran, dass die TLS- und Crypto-Oberflächen von Node nach wie vor die volumenstärkste CVE-Kategorie sind, und dass die Gewohnheit des Projekts, sie in einem einzigen koordinierten Release zu bündeln, das ist, was die Update-Story für die Leute einfach hält, die Node in Produktion betreiben.

