Mittel

ApostropheCMS sanitize-html: nonTextTags-Verwerfungsbereich endet vorzeitig bei implizitem Schließen, wodurch <noscript>-Inhalte gerendert werden

  • Veröffentlicht: 20.10.2026
  • Aktualisiert: 20.10.2026 21:19

Zusammenfassung

sanitize-html verwirft den Inhalt jedes Elements in nonTextTags. Dieser Bereich wird anhand der Close-Events von htmlparser2 abgegrenzt, wobei das von htmlparser2 übergebene Flag isImplied ignoriert wird. Das Schließen eines noch offenen Vorfahren aus dem Inneren eines <noscript> führt dazu, dass htmlparser2 seinen Stack über das noscript hinaus abwickelt; das dabei erzeugte synthetische, implizite Schließen beendet den Verwerfungsbereich vorzeitig, und alle nachfolgenden Daten werden als normaler Body-Inhalt behandelt.

Ein Browser mit aktiviertem Scripting parst <noscript>-Inhalte als Rohtext, sodass dasselbe Markup dort als inerter Text gerendert wird. Der Sanitizer gibt daher Elemente aus, die die Seite selbst nicht erzeugt hätte.

Reproduktion

js
const sanitizeHtml = require("sanitize-html");

sanitizeHtml('<div><noscript></div><img src="http://evil.test/t.gif"></noscript>', {
  allowedTags: ["div", "img"],
  allowedAttributes: { img: ["src"] },
  nonTextTags: ["script", "style", "textarea", "option", "noscript"],
});
// => '<div></div><img src="http://evil.test/t.gif" />'

Chrome rendert bei derselben Eingabe kein <img> — die gesamte Nutzlast ist Rohtext innerhalb des nicht geschlossenen <noscript>. Dies wurde mit Playwright verifiziert, indem srcdoc in einen iframe eingefügt wurde, sodass das Scripting-Flag aktiv ist.

Eine Variante mit <![CDATA[ verbirgt das öffnende Tag vollständig vor dem Parser und hat denselben Effekt:

<p>Hi</p><![CDATA[ x > <noscript>]]><a href="…">Reset your password</a><img src="…beacon.gif"></noscript>

htmlparser2 verarbeitet ein CDATA-Token bis ]]>; Chrome beendet einen fehlerhaften Kommentar (bogus comment) beim ersten >, sodass das <noscript> dahinter für den Browser real und für den Parser unsichtbar ist.

Fundstellen im Code

index.js:

  • :154 — nonTextTagsArray (die Standardliste, ['script','style','textarea','option','xmp']).
  • :638 — onclosetag: function (name, isImplied) — nimmt das Flag entgegen.
  • :644 — skipTextDepth-- — dekrementiert, ohne isImplied zu berücksichtigen.

Vorgeschlagene Behebung

Beenden Sie einen Verwerfungsbereich nicht bei einem impliziten Schließen. htmlparser2 unterscheidet diese bereits; das Flag wird übergeben und verworfen. Ähnlich wie:

js
onclosetag: function (name, isImplied) {
  if (skipText) {
    if (isImplied) return;   // an implied close must not end the region
    skipTextDepth--;
    …

Was zu tun ist

Aktualisieren Sie das Paket sanitize-html auf die Version 2.18.0 oder höher.

Betroffene Software

Klicken Sie auf eine Technologie, um alle zugehörigen Schwachstellen anzuzeigen.

PlattformPaketAnfällige VersionenBehoben in
npm-Paket sanitize-html < 2.18.0 2.18.0

Verweise

CVSS-Wert -
CVSS-Vektor
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N
Schwäche (CWE)
CWE-79
Plattform
npm
Paket
sanitize-html
Veröffentlicht
20.10.2026
Aktualisiert
20.10.2026 21:19

Quellen und Lizenzen · Von DockRay bearbeitet oder übersetzt; Rechte und Lizenzen der Quellen bleiben erhalten.

OSV / GitHub Advisory Database - GHSA-x3q4-9hxx-gx8m - CC BY 4.0

Schwachstellenhistorie: sanitize-html

Alle veröffentlichten Schwachstellen dieses Pakets (npm-Paket), neueste zuerst. Zeigt, ob es ein einmaliger Ausrutscher ist oder ein Paket, das man im Auge behalten muss.

Alle (15) im Archiv
Einträge insgesamt
15
Erste → letzte
11.2018 10.2026
Ohne Fix
0
In Angriffen ausgenutzt
0

Verteilung nach Schweregrad

  • Kritisch 1
  • Hoch 1
  • Mittel 12
  • Niedrig 1

Veröffentlichungen pro Jahr

  1. 2018: 2
  2. 2019: 0
  3. 2020: 1
  4. 2021: 2
  5. 2022: 1
  6. 2023: 0
  7. 2024: 1
  8. 2025: 1
  9. 2026: 7
Schweregrad:
  1. ApostropheCMS sanitize-html: nonTextTags-Verwerfungsbereich endet vorzeitig bei implizitem Schließen, wodurch <noscript>-Inhalte gerendert werden dieser Eintrag
    Mittel CVE-2026-113654 < 2.18.0 2.18.0
  2. Kritisch · 9.3 CVE-2026-44990 >= 2.17.3, < 2.17.4 2.17.4
  3. Hoch · 7.5 CVE-2022-25887 < 2.7.1 2.7.1

Erkennen Sie Schwachstellen in Ihrer Anwendung

Mit der DockRay-Integration und aktivierter Softwareinventarisierung prüft DockRay gemeldete Komponentenversionen auf bekannte Schwachstellen und benachrichtigt Sie über bestätigte Treffer. Die Abdeckung hängt von der unterstützten Technologie und den verfügbaren Meldungen ab.

Anwendung verbinden
DockRay Newsletter

Anwendungssicherheit in Ihrem Postfach

Wichtige Schwachstellen, konkrete Empfehlungen und praktische Tipps für Ihre Anwendungen. Wählen Sie Ihre Technologien und verfolgen Sie, was für Ihr Projekt relevant ist.

  • Eine tägliche Zusammenfassung neuer Schwachstellen, auch kritischer.
  • Benachrichtigungen über wichtige Updates.
  • Praktische Tipps zur Sicherheit und Überwachung von Anwendungen.

Leer lassen, um Meldungen zu allen Technologien zu erhalten.

Kostenlos anmelden. In jeder E-Mail mit einem Klick abmelden.