Security · Nodemailer für Node.js

Nodemailer: Präparierte Adresswerte können den Node.js-Prozess blockieren

kritisch

Nodemailer 9.1.0 bis 10.0.4 kann den Node.js-Prozess beim Verarbeiten hinreichend großer, präparierter Adressangaben blockieren. Der Fehler ist kritisch, wenn eine öffentliche Anwendung solche Fremdwerte ohne wirksame Größenlimits an Nodemailer weitergibt; wiederholte Übermittlung kann die Blockade verstärken, und Version 10.0.5 behebt die Ursache.

CVE
CVE-2026-90776
Betroffen
Nodemailer ab 9.1.0 und vor 10.0.5
Behoben
Nodemailer 10.0.5 oder neuer

Nodemailer ist eine npm-Bibliothek, mit der Node.js-Anwendungen E-Mails erzeugen und versenden. npm ist das verbreitete Paketökosystem für JavaScript und TypeScript. CVE-2026-90776 bezeichnet einen Fehler in Nodemailer 9.1.0 bis 10.0.4: Der betroffene Node.js-Prozess kann beim Verarbeiten hinreichend großer, speziell aufgebauter Adressangaben mehrere Sekunden lang keine anderen JavaScript-Aufgaben erledigen. Je nach Aufbau des Dienstes hängen dadurch Anfragen, während andere Prozesse oder Instanzen weiterarbeiten können.

Ein Adressparser zerlegt Empfänger-, Absender- oder Antwortadressen in ihre Bestandteile. Diese Angaben stehen in adressführenden E-Mail-Kopfzeilen; dazu gehören beispielsweise From, To und Reply-To. Die Lücke betrifft nicht automatisch jeden Server mit Nodemailer. Ein Angreifer muss einen hinreichend großen, präparierten und selbst kontrollierten Adresswert aus einem öffentlichen Eingabepunkt bis zu diesem Parser bringen können.

Was Nutzer und Betreiber davon sehen

Ein mögliches Anwendungsszenario: Ein Besucher trägt in ein Kontakt-, Registrierungs- oder Einladungsformular eine manipulierte Adresse ein. Dasselbe könnte über eine öffentliche Programmierschnittstelle geschehen, kurz API, wenn sie eine Absender-, Empfänger- oder Antwortadresse entgegennimmt. Die zitierten Quellen dokumentieren den Parsermechanismus, nicht einen konkret beobachteten Vorfall in einem solchen Formular.

Auf dem Bildschirm erschiene kein besonderer Sicherheitsdialog und keine verdächtige Aufforderung. Der Besucher würde lediglich das Formular oder die API-Anfrage absenden. Danach könnte die Anfrage hängen oder in ein Zeitlimit laufen. Die erwartete Bestätigungs-, Kontakt- oder Einladungsmail würde verspätet oder gar nicht versandt.

Gleichzeitig könnte die CPU-Auslastung des betroffenen Node.js-Prozesses steigen; weitere Anfragen an diesen Prozess würden warten oder 5xx-Serverfehler liefern. Eine Plattform könnte den nicht mehr rechtzeitig antwortenden Prozess neu starten. Wird derselbe bereits rechenintensive Wert wiederholt übermittelt, können sich Mailstau und Störungen verstärken.

Das Warnsignal wäre keine ungewöhnliche Anzeige beim Nutzer. Es wäre die Kombination aus ungewöhnlich langen Adresswerten, stockendem Mailversand, steigender CPU-Last, Zeitüberschreitungen und gegebenenfalls wiederholten Prozessneustarts unmittelbar nach solchen Anfragen.

Warum die Arbeit quadratisch wächst

RFC 5322 ist die technische Spezifikation für das Format von Internet-E-Mails. Sie erlaubt in Adressangaben auch Kommentare in runden Klammern. Präparierte Folgen aus solchen Kommentaren und dazwischenliegenden Adressbestandteilen brachten den Parser dazu, einen bereits wachsenden Zwischentext bei jedem weiteren Schritt erneut zu bearbeiten.

Die Laufzeit wurde damit quadratisch: Verdoppelte sich die Zahl der entsprechenden Bestandteile, konnte die Arbeit ungefähr auf das Vierfache steigen. Der Patch-Commit dokumentiert für eine rund 1,5 Megabyte große Testadresse ungefähr zehn Sekunden blockierte Ereignisschleife in der alten Implementierung. Die Ereignisschleife, häufig englisch Event Loop genannt, koordiniert in Node.js die nacheinander auszuführenden JavaScript-Aufgaben.

Solange der Parser diese CPU-lastige Arbeit erledigt, kommen andere Aufgaben desselben Prozesses nicht rechtzeitig zum Zug. Das ist ein Denial of Service, kurz DoS: Der Dienst wird unbenutzbar oder stark verzögert, ohne dass dafür Daten gelesen oder fremder Code ausgeführt werden muss.

Version 10.0.5 führt beim Durchlaufen der Bestandteile das zuletzt angehängte Zeichen je Parserzustand mit, statt es wiederholt aus dem immer längeren Zwischentext zu lesen. Laut Patch bleibt das Ergebnis der Adressverarbeitung unverändert; ergänzt wurden Leistungstests für die zuvor langsamen Fälle.

Wann der Fehler aus der Ferne kritisch wird

Nodemailer ist selbst weder Formular noch Webserver. CVSS ist ein standardisiertes Schema zur Bewertung der technischen Schwere einer Schwachstelle. Der Vektor AV:N/AC:L/PR:N/UI:N beschreibt hier einen Angriff über das Netz mit geringer Komplexität, ohne vorherige Berechtigung und ohne notwendige Handlung eines anderen Nutzers.

Die einbettende Anwendung schafft diesen Weg, wenn sie eine fremdgesteuerte Absender-, Empfänger- oder Antwortadresse an Nodemailer weitergibt. Für eine starke praktische Wirkung muss dieser Wert hinreichend groß und mit den beschriebenen Kommentarfolgen präpariert sein. Kann ein Angreifer einen solchen bereits belastenden Wert wiederholt übermitteln, kann das die Störung verstärken; die Wiederholung eines gewöhnlich kurzen Adresswerts belegt diese Schwachstelle dagegen nicht.

Wirksame Request-, Feld- und Längenlimits können einen hinreichend großen Wert stoppen, bevor er den Parser erreicht. Der im Patch dokumentierte Einzeltest verwendete ungefähr 1,5 Megabyte Eingabe; ein gewöhnliches kurzes E-Mail-Feld ist deshalb noch kein Beleg für einen kritischen Ausfallpfad.

Im Blog-Radar lautet die Stufe kritisch, wenn genau dieser öffentliche Weg für einen hinreichend großen präparierten Adresswert besteht und ein hoher Verfügbarkeitsschaden möglich ist. Kann die Anwendung nur kurze Werte weiterreichen oder verarbeitet sie ausschließlich fest konfigurierte Adressen, ist die betriebliche Stufe relevant. Eine installierte Bibliothek öffnet schließlich keinen Port. Die Anwendung kann ihr trotzdem eine öffentliche Einfahrt bauen – deren Breite entscheidet hier mit.

Der CVE-Datensatz bewertet die Verfügbarkeit als hoch betroffen, Vertraulichkeit und Integrität dagegen als nicht betroffen. Aus den geprüften Quellen folgen daher weder ein Datenabfluss noch eine Remote Code Execution, also die Ausführung fremden Codes auf dem Server. Der Schaden liegt im blockierten Prozess und in den dadurch verzögerten oder abgebrochenen Diensten.

Was jetzt sinnvoll ist

Zuerst sollte Nodemailer auf Version 10.0.5 oder neuer aktualisiert werden. Maßgeblich ist die tatsächlich ausgelieferte Version im Lockfile und im laufenden Artefakt, nicht nur der gewünschte Bereich in package.json. Befehle wie npm ls nodemailer, pnpm why nodemailer oder yarn why nodemailer können zusätzlich zeigen, ob die Bibliothek direkt oder als Unterabhängigkeit eingebunden ist.

Danach gehören die Eingabepfade auf den Tisch: Welche öffentlichen Formulare, Webhooks oder APIs übernehmen fremde Adressen? Gelangt ein hinreichend großer präparierter Wert als Absender-, Empfänger- oder Antwortadresse in den Nodemailer-Adressparser? Wie groß dürfen Feld und Anfrage werden, und kann ein bereits belastender Wert wiederholt übermittelt werden? Ein Integrationstest kann prüfen, ob ungewöhnlich lange Eingaben schnell abgewiesen werden und der übrige Dienst unter Last weiter antwortet, ohne eine Angriffsvorlage in Produktionssystemen nachzubauen.

Längenbegrenzungen für Adressfelder, knappe Anfragegrößen und Rate-Limits können die Reichweite ergänzend reduzieren. Sie ersetzen das Update nicht: RFC-konforme Adressen sind komplizierter als eine kurze reguläre Ausdrucksprüfung, und eine vorgelagerte Kontrolle sollte nicht zur selbst gebauten zweiten Mail-Spezifikation werden.

CVE-2026-90776 wurde am 13. September 2026 um 11:42 UTC veröffentlicht. In den bis zum 14. September 2026 geprüften Quellen ist keine aktive Ausnutzung bestätigt. Die Kennung steht außerdem nicht im aktuellen CSV-Datensatz des CISA-Katalogs Known Exploited Vulnerabilities, kurz KEV, der Schwachstellen mit bestätigter Ausnutzung sammelt. Das ist eine Aussage über den veröffentlichten Kenntnisstand, keine Garantie, dass es keinen bislang unbekannten Angriff gibt.

Quellen

Quellenstand: 14. September 2026.

Originalmeldung öffnen →