Storybook: Brak weryfikacji pochodzenia w Storybook preview umożliwia wstrzyknięcie kodu przez złośliwe witryny
Podsumowanie
Złośliwa witryna internetowa może być w stanie doprowadzić do nieautoryzowanych modyfikacji plików w projekcie programisty podczas działania podatnego serwera deweloperskiego Storybook. W określonych warunkach zmodyfikowany plik może zostać wykonany przez lokalne środowisko uruchomieniowe z uprawnieniami programisty. Twórcy oprogramowania nie odnotowali przypadków aktywnego wykorzystania podatności w środowisku rzeczywistym.
Kogo dotyczy problem?
Problem dotyczy użytkowników uruchamiających serwer deweloperski Storybook w podatnych wersjach.
Podatność nie dotyczy użytkowników, którzy:
- uruchamiają serwer deweloperski, którego nigdy nie otwierają w przeglądarce internetowej (np. automatyzacja headless, klienci MCP)
- uruchamiają lub odwiedzają zbudowaną (skompilowaną) wersję Storybook
Nowsze wersje przeglądarek Chrome i Firefox mogą wymagać potwierdzenia uprawnień przed nawiązaniem połączenia przez stronę internetową z usługą localhost. Zmniejsza to ryzyko, lecz go nie eliminuje. Nie należy przyznawać tych uprawnień niezaufanym witrynom.
Przegląd potencjalnie niekompatybilnych zmian (breaking changes)
Ze względu na wyjątkowy charakter zgłoszonych podatności zespół Storybook zdecydował o zmianie domyślnego zachowania Storybook (w tym wersji 8 oraz 9) w odniesieniu do funkcji sieciowych, które nie są niezbędne dla pracy większości użytkowników. Dla zespołów korzystających z tych funkcji dodano flagi funkcjonalne (feature flags), które umożliwiają wyłączenie określonych mechanizmów bezpieczeństwa w celu zachowania istniejących procesów.
Należy dokładnie zapoznać się z wprowadzonymi flagami oraz konsekwencjami ich użycia:
- Domyślne wyłączenie osadzania w ramkach iframe przez sieć: Storybook nie pozwala już na osadzanie managera ani podglądu (preview) wewnątrz elementów iframe na witrynach o innej nazwie hosta. Zbudowane wersje Storybook nie są objęte tą zmianą i mogą być swobodnie osadzane. W przypadku konieczności osadzania serwera deweloperskiego przez osobną aplikację webową należy uruchomić ją na
localhost. Można także użyć flagisecurity.insecureRemoteIframeEmbed, aby ponownie zezwolić na osadzanie w ramkach z dowolnego źródła. - Odrzucanie przez ramkę preview wiadomości od nieznanych hostów: Zarówno preview, jak i manager Storybook ograniczają obecnie pochodzenie (origin) ramek iframe i okien nadrzędnych, z którymi mogą wymieniać wiadomości za pośrednictwem API
postMessage. Domyślnie Storybook w trybie deweloperskim akceptuje komunikację wyłącznie z własnym źródłem oraz innymi usługamilocalhost. Zbudowane wersje Storybook nadal akceptują komunikację z nieznanych źródeł. Jeśli dany dodatek lub integracja wykorzystujepostMessagedo modyfikowania argumentów historii na żywo, zaleca się kontakt z zespołem Storybook w celu wypracowania bezpiecznych rozwiązań. Kompozycja Storybook również bazuje napostMessage, przez co skomponowany Storybook z innego źródła nie załaduje się, o ile nie został wcześniej zbudowany. Flagasecurity.insecureIframeMessagingwyłącza to zabezpieczenie, jednak rekomendowanym podejściem jest budowanie skomponowanych instancji. - Zmiana sygnatury zdarzenia
highlight: Wbudowany dodatek ułatwień dostępu (accessibility) Storybook używa zdarzeniahighlightdo wstrzykiwania w podglądzie klikalnych wyróżnień, które otwierają menu z linkiem do dokumentacji. API tego zdarzenia było zbyt permisywne i mogło zostać wykorzystane do wywoływania dowolnych zdarzeń, w tym przetwarzanych przez lokalny serwer deweloperski. API zostało zmodyfikowane w celu zapobiegania nadużyciom. Oprócz dodatku ułatwień dostępu, z interfejsu tego korzysta dodatek Visual Tests od Chromatic do linkowania dokumentacji z wyróżnionych ignorowanych elementów. Aby zachować działanie tych linków, należy zaktualizować dodatek Visual Tests do wersji 5.5.1 lub nowszej. Ponieważ według wiedzy autorów żadne inne dodatki nie używają tego API, nie wprowadzono flagi przywracającej stare zachowanie.
Oś czasu ujawnienia
30th września zespół Storybook otrzymał zgłoszenie w ramach odpowiedzialnego ujawniania podatności, opisujące możliwość osadzenia ramki preview serwera deweloperskiego przez złośliwą stronę oraz wysyłania zdarzeń do serwera na maszynie dewelopera.
Informacje te połączono z ustaleniami z trwającego audytu bezpieczeństwa, co pozwoliło opracować najgorszy możliwy scenariusz wykorzystania podatności (uwzględniający również luki odkryte niezależnie). Następnie wdrożono poprawki na wszystkich etapach wymaganych do realizacji takiego ataku. Nie odnotowano dowodów na wykorzystanie podatności w rzeczywistych projektach Storybook. Przedstawiony scenariusz ataku wymaga pomyślnego wykorzystania ciągu wielu luk, z których część nie była wcześniej zgłoszona zespołowi Storybook.
Najgorszy scenariusz ataku
Kontrolowana przez atakującego witryna internetowa może wchodzić w interakcję z podglądem uruchomionego serwera deweloperskiego Storybook. Przy udziale interakcji użytkownika może to doprowadzić do wprowadzenia przez serwer deweloperski nieautoryzowanych zmian w plikach historii. W przypadku późniejszego wykonania złośliwego pliku przez lokalne środowisko uruchomieniowe atak może skutkować wykonaniem dowolnego kodu z uprawnieniami dewelopera.
Co trzeba zrobić
Przed ponownym uruchomieniem storybook dev należy zaktualizować Storybook do wersji zawierającej poprawki:
- 11.0.0-alpha.6
- 10.6.2
- 9.1.21
- 8.6.19
Jeżeli natychmiastowa aktualizacja nie jest możliwa, należy wstrzymać się z uruchamianiem podatnego serwera deweloperskiego Storybook do czasu wdrożenia poprawki.
Ponadto zaleca się aktualizację dodatku Chromatic Visual Tests do wersji 5.5.1 lub nowszej, aby zapewnić prawidłowe działanie odnośników do dokumentacji.
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| Paczka npm | storybook | >= 8.0.0, < 8.6.19, >= 9.0.0, < 9.1.21, >= 10.0.0, < 10.6.2, >= 11.0.0-alpha.0, < 11.0.0-alpha.6 | 8.6.19, 9.1.21, 10.6.2, 11.0.0-alpha.6 |
| Paczka npm | @storybook/addon-mcp | >= 10.6.0, < 10.6.2, >= 11.0.0-alpha.0, < 11.0.0-alpha.6 | 10.6.2, 11.0.0-alpha.6 |
| Paczka npm | @storybook/addon-vitest | >= 9.0.0, < 9.1.21, >= 10.0.0, < 10.6.2, >= 11.0.0-alpha.0, < 11.0.0-alpha.6 | 9.1.21, 10.6.2, 11.0.0-alpha.6 |
| Paczka npm | @storybook/core | >= 8.0.0, < 8.6.19 | 8.6.19 |
| Paczka npm | @storybook/core-server | >= 8.0.0, < 8.6.19 | 8.6.19 |
| Paczka npm | @storybook/experimental-addon-test | >= 8.0.0, < 8.6.19 | 8.6.19 |
Odnośniki
- https://github.com/storybookjs/storybook/security/advisories/GHSA-f2ph-cmg5-wxc8
- https://github.com/storybookjs/storybook/pull/36726
- https://github.com/storybookjs/storybook/commit/243c06bf8f1e2f09446c44868ea100261e1374da
- https://github.com/storybookjs/storybook/commit/3be03ec6f11f4616471cebc3fc65c13e1bf8c178
- https://github.com/storybookjs/storybook/commit/a9ef9345d73224c73e0b81dc2701ec5b465ea9bb
- https://github.com/storybookjs/storybook/commit/d9b09e332510a88689c71ecc081bbbc2d072476e
- https://github.com/storybookjs/storybook/commit/df3fed468c9b4830605f00068c4bc6b7e1e215ed
- https://github.com/storybookjs/storybook
- https://github.com/storybookjs/storybook/releases/tag/v10.6.2
- https://github.com/storybookjs/storybook/releases/tag/v11.0.0-alpha.6
- https://github.com/storybookjs/storybook/releases/tag/v8.6.19
- https://github.com/storybookjs/storybook/releases/tag/v9.1.21
- Wektor CVSS
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H- Słabość (CWE)
CWE-1021, CWE-22, CWE-346, CWE-441, CWE-749, CWE-862, CWE-94, CWE-96- Platforma
- npm
- Paczka
storybook, @storybook/addon-mcp, @storybook/addon-vitest- Ujawniono
- 21.10.2026
- Aktualizacja
- 21.10.2026 20:26
Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.
OSV / GitHub Advisory Database - GHSA-f2ph-cmg5-wxc8 - CC BY 4.0
Historia podatności: storybook
Wszystkie opisane podatności tej paczki (Paczka npm), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.
- Wszystkich wpisów
- 3
- Pierwsza → ostatnia
- 12.2025 10.2026
- Bez poprawki
- 0
- Wykorzystywana w atakach
- 0
Rozkład istotności
- Krytyczna 1
- Wysoka 2
Ujawnienia w latach
- 2025: 1
- 2026: 2
-
Storybook: Brak weryfikacji pochodzenia w Storybook preview umożliwia wstrzyknięcie kodu przez złośliwe witryny ten wpis
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.