Średnia

ApostropheCMS sanitize-html: obszar odrzucania nonTextTags kończy się przedwcześnie przy domyślnym zamknięciu, zezwalając na renderowanie zawartości <noscript>

  • Ujawniono: 20.10.2026
  • Aktualizacja: 20.10.2026 21:19

Podsumowanie

sanitize-html odrzuca zawartość każdego elementu w nonTextTags. Wyznacza ten obszar przy użyciu zdarzeń close biblioteki htmlparser2 i ignoruje flagę isImplied przekazywaną przez htmlparser2. Zamknięcie wciąż otwartego przodka z wnętrza <noscript> sprawia, że htmlparser2 zwija swój stos poza noscript; wyemitowane w ten sposób syntetyczne, domyślne zamknięcie kończy przedwcześnie obszar odrzucania, a wszystko po nim jest traktowane jako zwykła zawartość body.

Przeglądarka z włączoną obsługą skryptów przetwarza zawartość <noscript> jako zwykły tekst, przez co ten sam kod renderuje się tam jako treść nieaktywna. Sanityzator emituje w rezultacie elementy, których sama strona by nie wygenerowała.

Odtworzenie błędu

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 dla tych samych danych wejściowych nie renderuje <img> — cały ładunek stanowi zwykły tekst wewnątrz niezamkniętego <noscript>. Zweryfikowano to za pomocą narzędzia Playwright poprzez srcdoc do ramki iframe z włączoną flagą skryptów.

Wariant z <![CDATA[ całkowicie ukrywa tag otwierający przed parserem i wywołuje taki sam efekt:

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

htmlparser2 prowadzi token CDATA do ]]>; Chrome kończy fałszywy komentarz na pierwszym >, przez co <noscript> za nim staje się realny dla przeglądarki, a niewidoczny dla parsera.

Miejsce występowania zachowania

index.js:

  • :154 — nonTextTagsArray (domyślna lista, ['script','style','textarea','option','xmp']).
  • :638 — onclosetag: function (name, isImplied) — przyjmuje flagę.
  • :644 — skipTextDepth-- — zmniejsza licznik bez uwzględnienia isImplied.

Sugerowana poprawka

Nie kończyć obszaru odrzucania przy domyślnym zamknięciu. htmlparser2 już je rozróżnia; flaga jest przekazywana i odrzucana. Rozwiązanie zbliżone do:

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

Co trzeba zrobić

Zaktualizuj pakiet sanitize-html do wersji 2.18.0 lub nowszej.

Czego dotyczy

Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.

PlatformaPaczkaPodatne wersjePoprawka w wersji
Paczka npm sanitize-html < 2.18.0 2.18.0

Odnośniki

Ocena CVSS -
Wektor CVSS
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
Słabość (CWE)
CWE-79
Platforma
npm
Paczka
sanitize-html
Ujawniono
20.10.2026
Aktualizacja
20.10.2026 21:19

Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.

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

Historia podatności: sanitize-html

Wszystkie opisane podatności tej paczki (Paczka npm), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.

Wszystkie (15) w archiwum
Wszystkich wpisów
15
Pierwsza → ostatnia
11.2018 10.2026
Bez poprawki
0
Wykorzystywana w atakach
0

Rozkład istotności

  • Krytyczna 1
  • Wysoka 1
  • Średnia 12
  • Niska 1

Ujawnienia w latach

  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
Istotność:
  1. ApostropheCMS sanitize-html: obszar odrzucania nonTextTags kończy się przedwcześnie przy domyślnym zamknięciu, zezwalając na renderowanie zawartości <noscript> ten wpis
    Średnia CVE-2026-113654 < 2.18.0 2.18.0
  2. Krytyczna · 9.3 CVE-2026-44990 >= 2.17.3, < 2.17.4 2.17.4
  3. Wysoka · 7.5 CVE-2022-25887 < 2.7.1 2.7.1

Dowiedz się, które podatności dotyczą Twojej aplikacji

Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.

Podłącz swoją aplikację
Newsletter DockRay

Bezpieczeństwo aplikacji w Twojej skrzynce

Najważniejsze podatności, konkretne zalecenia i praktyczne wskazówki dla Twoich aplikacji. Wybierz technologie i śledź to, co ma znaczenie dla Twojego projektu.

  • Codzienne zestawienie nowych podatności, także krytycznych.
  • Powiadomienia o ważnych aktualizacjach.
  • Praktyczne porady o bezpieczeństwie i monitoringu aplikacji.

Pozostaw puste, aby otrzymywać informacje o wszystkich technologiach.

Zapis jest bezpłatny. Wypiszesz się jednym kliknięciem w wiadomości.