Gemiddeld · 4.9 Node.js & npm GHSA-v53p-9fqp-m79j GHSA-8vvx-rff5-p5rq GHSA-6vj9-mwq6-2f5v GHSA-g57g-f23g-4646
Vier kwetsbaarheden in Nodemailer: denial-of-service en TLS-identiteitsproblemen in meerdere versies
Vier afzonderlijke advisories over het npm-pakket nodemailer beschrijven twee denial-of-service-problemen in de adresparser, een probleem met TLS-identiteitsverwarring tussen tenants in de DNS-cache, en een parserfout die een misvormde envelope-ontvanger kan opleveren. Voor alle vier zijn updates beschikbaar.
AI-samenvatting
PatchBriefing volgt vier afzonderlijke beveiligingsadvisories voor nodemailer, een veelgebruikte Node.js-bibliotheek voor het versturen van e-mail. De meldingen verschenen kort na elkaar en raken verschillende onderdelen van de bibliotheek: de adresparsinglogica die ontvangervelden interpreteert, en de gedeelde DNS-resolutiecache die wordt gebruikt bij directe TLS/SMTPS-verbindingen. Elke advisory heeft een eigen GHSA-identifier, een CVSS-score en een gerepareerde versie. Deze briefing vat samen wat is gemeld, wie dit raakt en welke actie wordt aanbevolen.
Wat is er gebeurd
Binnen een korte periode zijn vier advisories gepubliceerd voor nodemailer. GHSA-v53p-9fqp-m79j beschrijft een probleem met backtracking in reguliere expressies in de free-text fallback van de adresparser, waardoor de Node.js event loop tientallen seconden kan vastlopen door één geprepareerde headerwaarde. GHSA-8vvx-rff5-p5rq beschrijft een los probleem waarbij diep geneste arrays, meegegeven als ontvangerwaarden (to/cc/bcc), de bestaande dieptebeperking van de parser omzeilen en de JavaScript-callstack uitputten; dit kan het proces laten crashen met een niet-afgevangen uitzondering als de toepassing sendMail() niet in exception handling verpakt. GHSA-6vj9-mwq6-2f5v beschrijft een proces-brede DNS-cache die een verbinding-specifieke TLS-servername opslaat onder een cachesleutel die alleen op hostnaam is gebaseerd; wanneer twee transporten binnen hetzelfde proces dezelfde DNS-host delen maar een andere TLS-servername configureren, kan het tweede transport de gecachte servername van het eerste transport ontvangen, waardoor het verkeerde TLS-certificaat wordt gevalideerd en mogelijk SMTP-inloggegevens naar een onbedoeld eindpunt worden verstuurd. GHSA-g57g-f23g-4646 beschrijft een parserfout waarbij een quoted local-part gevolgd door een RFC 5322-commentaar en resttekst een misvormd adres oplevert (bijvoorbeeld een adreswaarde met een extra, door een spatie gescheiden domein) dat zonder verdere strikte validatie in de SMTP-envelope terechtkomt.
Technische oorzaak
GHSA-v53p-9fqp-m79j: de reguliere expressie van de free-text fallback in de adresparser vertoont kwadratische backtracking omdat de gebruikte tekenklasse vanaf elke positie in een lange reeks zonder witruimte opnieuw geprobeerd kan worden, waarbij elke poging opnieuw doorzoekt tot het volgende '@'-teken of het einde van de reeks. GHSA-8vvx-rff5-p5rq: het invoertype voor ontvangers in nodemailer staat formeel willekeurig diep geneste arrays toe, maar alleen de buitenste array wordt afgevlakt voordat de waarde de Tokenizer van de adresparser bereikt, die niet-string-invoer omzet met de ingebouwde .toString()-methode. De native Array.prototype.toString() roept zichzelf recursief aan voor elk geneste array-niveau, waardoor bij voldoende diepte de callstack uitgeput raakt; dit pad komt nooit bij de bestaande MAX_NESTED_GROUP_DEPTH-bescherming terecht, omdat er geen RFC 5322-groepstekst wordt geparset. GHSA-6vj9-mwq6-2f5v: de gedeelde DNS-cache gebruikt alleen de hostnaam als sleutel, maar elk cache-item bevat ook de TLS-servername die is meegegeven door het transport dat de cache als eerste vulde; bij een cache-hit wordt die opgeslagen servername teruggegeven en gebruikt om de expliciet geconfigureerde servername van het huidige transport te overschrijven vóórdat de TLS-verbinding tot stand komt. GHSA-g57g-f23g-4646: wanneer een local-part tussen aanhalingstekens staat, behandelt de adresparser een volgend RFC 5322-commentaar anders dan bij een local-part zonder aanhalingstekens, waardoor domeinachtige tekst na het commentaar in de geparste adreswaarde blijft staan, die vervolgens rechtstreeks als SMTP-envelope-ontvanger wordt gebruikt.
Waarom dit belangrijk is
Omdat Node.js single-threaded is, kunnen de twee denial-of-service-problemen (GHSA-v53p-9fqp-m79j en GHSA-8vvx-rff5-p5rq) een heel proces laten vastlopen of crashen door één geprepareerde invoer, zonder dat authenticatie of een SMTP-server nodig is. Het DNS-cacheprobleem (GHSA-6vj9-mwq6-2f5v) is vooral relevant voor multi-tenant diensten of SNI-gerouteerde SMTP-gateways, waar het één tenant in staat kan stellen een slachtoffer-transport het verkeerde TLS-certificaat te laten valideren en zijn SMTP-inloggegevens naar een onbedoeld eindpunt te laten sturen, zelfs met certificaatvalidatie ingeschakeld (rejectUnauthorized: true). De parserfout (GHSA-g57g-f23g-4646) leidt tot een misvormde envelope-ontvanger; de melder heeft uitdrukkelijk niet bevestigd of dit daadwerkelijk tot aflevering bij een onbedoelde ontvanger op een echte SMTP-server leidt, dus de praktische impact blijft onbevestigd.
Wie dit raakt
Toepassingen en diensten die nodemailer gebruiken om e-mail te versturen worden geraakt, met blootstelling die per issue verschilt: GHSA-v53p-9fqp-m79j raakt elke situatie waarin inkomende headerwaarden de adresparser bereiken, onder andere via het pakket mailparser, of waar door gebruikers aangeleverde strings als berichtadres worden gebruikt. GHSA-8vvx-rff5-p5rq raakt toepassingen die door aanvallers (gedeeltelijk) controleerbare ontvangergegevens als gestructureerde JSON/array-waarden accepteren en zonder eigen dieptebeperking doorgeven aan sendMail(), waaronder e-mail-API's, wachtrij-gebaseerde notificatieworkers en multi-tenant systemen. GHSA-6vj9-mwq6-2f5v raakt langlopende processen die meerdere directe TLS/SMTPS-transporten (secure: true) van nodemailer opzetten die dezelfde DNS-hostnaam delen met verschillende expliciete TLS-servername-configuraties; het STARTTLS-upgradepad wordt niet als kwetsbaar aangemerkt. GHSA-g57g-f23g-4646 raakt toepassingen die ontvangeradressen parsen met een quoted local-part gevolgd door een RFC 5322-commentaar.
Getroffen versies
GHSA-v53p-9fqp-m79j: nodemailer-versies tot en met 10.0.5, opgelost in 10.0.6. GHSA-8vvx-rff5-p5rq: nodemailer-versies vóór 10.0.2, met kwetsbaarheid bevestigd door testen in 2.7.2, 3.0.0, 7.0.11, 9.1.1 en 10.0.1; opgelost in 10.0.2. De melder merkt op dat versies ouder dan 2.7.2 niet zijn onderzocht en niet als veilig mogen worden beschouwd. GHSA-6vj9-mwq6-2f5v: nodemailer-versies vanaf 5.0.0 tot maar niet inclusief 10.0.2, met kwetsbaarheid bevestigd door testen in 5.0.0 en 10.0.1; opgelost in 10.0.2. GHSA-g57g-f23g-4646: nodemailer-versies vanaf 9.1.0 tot maar niet inclusief 10.0.9, opgelost in 10.0.9.
Oplossingen en mitigatie
Voor alle vier de problemen zijn oplossingen beschikbaar. GHSA-v53p-9fqp-m79j is verholpen in nodemailer 10.0.6, waarin de backtracking-zoekopdracht is vervangen door een enkele lineaire doorloop. GHSA-8vvx-rff5-p5rq is verholpen in nodemailer 10.0.2. Als tijdelijke mitigatie kunnen toepassingen controleren of ontvangerwaarden platte strings of platte arrays zijn voordat ze nodemailer aanroepen, en de volledige synchrone aanroep van sendMail() in exception handling verpakken om procesbeëindiging te voorkomen. GHSA-6vj9-mwq6-2f5v is verholpen in nodemailer 10.0.2. GHSA-g57g-f23g-4646 is verholpen in nodemailer 10.0.9; toepassingen wordt ook aangeraden niet aan te nemen dat een door de parser geproduceerd adres veilig is voor SMTP-aflevering zonder eigen validatie.
Aanbevolen actie
Werk nodemailer bij naar versie 10.0.9 of hoger, waarin de oplossingen voor alle vier hier beschreven advisories zijn verwerkt (respectievelijk 10.0.6, 10.0.2 en 10.0.9). Controleer applicatiecode die door gebruikers gecontroleerde gegevens aan sendMail() doorgeeft, met name ontvangervelden, en zorg dat synchrone uitzonderingen van sendMail() worden afgevangen. Controleer voor diensten die meerdere nodemailer-transporten met directe TLS/SMTPS-verbindingen binnen hetzelfde proces draaien, of verschillende transporten dezelfde DNS-hostnaam delen met verschillende TLS-servername-configuraties, totdat de gerepareerde versie is uitgerold.
PatchBriefing-score
4.9 / 10 · Gemiddeld
Officiële CVSS: 7.5
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Waarom deze score
De vier advisories hebben verschillende patchwire-scores, die hun uiteenlopende impactprofielen weerspiegelen. GHSA-v53p-9fqp-m79j scoort het hoogst (4,9, CVSS 7,5) omdat het zonder authenticatie en zonder gebruikersinteractie een heel Node.js-proces kan laten vastlopen via één via het netwerk bereikbare invoer. GHSA-8vvx-rff5-p5rq (4,0, CVSS 5,9) is eveneens zonder authenticatie uitvoerbaar en veroorzaakt procescrashes, maar vereist een hogere aanvalscomplexiteit (gestructureerde array-invoer die ongecontroleerd bij sendMail() terechtkomt). GHSA-g57g-f23g-4646 (3,7, CVSS 5,3) weerspiegelt een bevestigde parserfout waarvan de praktische impact op daadwerkelijke aflevering niet is bevestigd. GHSA-6vj9-mwq6-2f5v (3,4, CVSS 5,9) heeft van de vier de laagste patchwire-score, ondanks impact op vertrouwelijkheid, omdat het laag-geprivilegieerde toegang en specifieke multi-tenant omstandigheden vereist (gedeelde DNS-host, afwijkende servername, SNI-gebaseerde routering) om uitbuitbaar te zijn. Alle vier de scores zijn berekend op basis van de CVSS-basisscore plus correcties voor exploitatiestatus, gebruikersinteractie en beschikbaarheid van een fix; geen van de vier is bekend als actief uitgebuit of voorzien van publiek beschikbare exploitcode.
Getroffen versies
- nodemailer <= 10.0.5
- kwetsbaar
- ≥ 10.0.6
- gepatcht
- nodemailer < 10.0.2
- kwetsbaar
- ≥ 10.0.2
- gepatcht
- nodemailer >= 5.0.0, < 10.0.2
- kwetsbaar
- ≥ 10.0.2
- gepatcht
- nodemailer >= 9.1.0, < 10.0.9
- kwetsbaar
- ≥ 10.0.9
- gepatcht
Gemelde oplossingen
Voor alle vier de problemen zijn oplossingen beschikbaar. GHSA-v53p-9fqp-m79j is verholpen in nodemailer 10.0.6, waarin de backtracking-zoekopdracht is vervangen door een enkele lineaire doorloop. GHSA-8vvx-rff5-p5rq is verholpen in nodemailer 10.0.2. Als tijdelijke mitigatie kunnen toepassingen controleren of ontvangerwaarden platte strings of platte arrays zijn voordat ze nodemailer aanroepen, en de volledige synchrone aanroep van sendMail() in exception handling verpakken om procesbeëindiging te voorkomen. GHSA-6vj9-mwq6-2f5v is verholpen in nodemailer 10.0.2. GHSA-g57g-f23g-4646 is verholpen in nodemailer 10.0.9; toepassingen wordt ook aangeraden niet aan te nemen dat een door de parser geproduceerd adres veilig is voor SMTP-aflevering zonder eigen validatie.
Hoe dit rapport is gemaakt
4 bronrecords zijn opgehaald, gekoppeld en gebruikt om het rapport hierboven op te stellen.
-
GitHub Advisory Database database
-
GitHub Advisory Database database
-
GitHub Advisory Database database
-
GitHub Advisory Database database
Revisiegeschiedenis
- Gepubliceerd
- Gegenereerd
Gerelateerd
Relevante veranderingen voor de stacks die je volgt.
Kies je stacks, onderwerpen en eventueel WordPress-plugins. Om 07:00 CEST worden passende meldingen en releases uit de rapportageperiode in één e-mail gegroepeerd.
✓ Kies stacks en onderwerpen✓ Pas voorkeuren altijd aan✓ Eén gebundelde e-mail