Średnia

ApostropheCMS: Obejście walidacji pola koloru umożliwia przechowywany XSS przez kod HTML dołączony po prefiksie rgb()/hsl()

  • Ujawniono: 21.10.2026
  • Aktualizacja: 21.10.2026 20:21

Podsumowanie

Pole koloru akceptuje dowolny ciąg znaków, który rozpoczyna się od prawidłowego koloru rgb() / hsl(), ponieważ TinyColor.isValid nie zakotwicza dopasowania na końcu ciągu. Uwierzytelniony użytkownik z uprawnieniami do edycji może zapisać dowolny kod HTML po prawidłowym prefiksie koloru. Gdy zapisana wartość jest renderowana, ładunek zostaje wykonany, co prowadzi do przechowywanego cross-site scripting (XSS).

Szczegóły

Walidacja pola koloru po stronie serwera opiera się na TinyColor:

js
const { TinyColor } = require('@ctrl/tinycolor');
if (!new TinyColor(value).isValid) throw self.apos.error('invalid');

Dopasowania rgb/hsl w TinyColor nie są zakotwiczone na końcu ciągu, w przeciwieństwie do dopasowań hex. Przetestowano z @ctrl/tinycolor:

Input isValid
rgb(1,2,3)<img src=x onerror=alert(1)> true
rgb(1,2,3)</textarea><script>alert(1)</script> true
hsl(0,100%,50%);--x:1}</style><script>alert(1)</script> true
#ff0000<img src=x onerror=alert(1)> false

Wartość jest zapisywana w MongoDB w postaci niezmienionej (bez normalizacji do hex8).

Powiązanie z GHSA-97v6-998m-fp4g

GHSA-97v6 rozwiązało problem wstrzykiwania niestandardowych właściwości CSS uciekających z kontekstu <style>. Pierwotna przyczyna (walidacja akceptująca dodatkową treść po prawidłowym kolorze) nadal występuje w wersjach <= 4.32.2, więc punkt ujścia style-tag pozostaje podatny na wykorzystanie poprzez </style> lub podatny jest oddzielny punkt ujścia HTML. Naprawa walidacji (wymaganie, aby cały ciąg był kolorem, lub zapisywanie wyłącznie znormalizowanego wyniku TinyColor) wyeliminowałaby oba problemy.

Wpływ

Każdy użytkownik z uprawnieniami do edycji może umieścić trwały kod JavaScript, który wykonuje się w przeglądarkach odwiedzających oraz administratorów przeglądających stronę, umożliwiając przejęcie sesji i wykonywanie działań w imieniu administratora.

Sugerowana poprawka

Odrzucanie wartości, chyba że cały ciąg jest prawidłowym kolorem, np. normalizacja przy zapisie:

js
const c = new TinyColor(value);
if (!c.isValid) throw self.apos.error('invalid');
value = c.toHex8String(); // store only normalized output

Co trzeba zrobić

Zaktualizuj ApostropheCMS do wersji 4.34.0 lub nowszej.

Czego dotyczy

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

PlatformaPaczkaPodatne wersjePoprawka w wersji
Paczka npm apostrophe < 4.34.0 4.34.0

Odnośniki

Ocena CVSS 5.4/10
Wektor CVSS
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
Słabość (CWE)
CWE-79
Platforma
npm
Paczka
apostrophe
Ujawniono
21.10.2026
Aktualizacja
21.10.2026 20:21

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

OSV / GitHub Advisory Database - GHSA-vmgj-9cwm-cf3h - CC BY 4.0

Historia podatności: apostrophe

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

Wszystkie (33) w archiwum
Wszystkich wpisów
33
Pierwsza → ostatnia
09.2020 10.2026
Bez poprawki
4
Wykorzystywana w atakach
0

Rozkład istotności

  • Krytyczna 2
  • Wysoka 9
  • Średnia 18
  • Niska 4

Ujawnienia w latach

  1. 2020: 2
  2. 2021: 2
  3. 2022: 0
  4. 2023: 0
  5. 2024: 0
  6. 2025: 0
  7. 2026: 29
Istotność:
  1. ApostropheCMS: Obejście walidacji pola koloru umożliwia przechowywany XSS przez kod HTML dołączony po prefiksie rgb()/hsl() ten wpis
    Średnia · 5.4 CVE-2026-112951 < 4.34.0 4.34.0
  2. Wysoka · 7.3 CVE-2026-45011 = 4.29.0 brak poprawki
  3. Krytyczna · 9.8 CVE-2021-25979 >= 2.63.0, < 3.4.0 3.4.0

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.