Reflected XSS na Hvězdárně České Budějovice

V

napsal Marcel

Reflected Cross-Site Scripting ve vyhledávacím formuláři webů Hvězdárny České Budějovice a co s ním útočník může nenápadně provést.

Shrnutí

Byla identifikována bezpečnostní zranitelnost typu reflected Cross-Site Scripting (XSS), kterou lze zneužít k ohrožení bezpečnosti uživatelských dat.

Zranitelnost je způsobena možností vložit kód přes vstupní pole. Takový kód se poté spustí v prohlížeči jiných uživatelů, což může vést k úniku citlivých informací (například cookies) nebo k dalším bezpečnostním problémům.

Zjednodušeně řečeno: web vezme cokoli, co návštěvník napíše do vyhledávacího pole, a vrátí mu to zpět jako součást stránky. Pokud je tím textem ve skutečnosti malý program, prohlížeč ho spustí — protože mu důvěřuje, když se tváří, že pochází přímo z webu hvězdárny.

Zranitelnost byla pozorována na následujících webech:

Ukázka zneužití

Vyhledávací formulář na všech uvedených webech obsahuje reflected XSS zranitelnost. Zadáním následujícího do vyhledávacího pole:

"><script>alert('reflected')</script><img src=x style=display:none onerror=null alt="

se spustí reflected XSS.

Reflected XSS zranitelnost spuštěná přes vyhledávací pole

Toto je pouze ukázka (proof of concept): oběť ví, co se děje, a výsledek je jasně vidět na obrazovce. V praxi by útočník takto nepostupoval — skutečný útok by vypadal úplně jinak, jak je popsáno níže.

Scénáře zneužití

Při skutečném útoku by zneužití bylo tiché a neviditelné a oběť by si ho vůbec nevšimla. Mohlo by vypadat takto:

  1. Oběť otevře odkaz — například z QR kódu na letáku, z facebookové události nebo z e-mailu. Samotný odkaz může vypadat naprosto běžně; zkrácené URL jsou zcela obvyklé a nevzbudí podezření. Útočník spoléhá na sociální inženýrství, například tím, že oběť pozve podívat se na nějaký astronomický objekt nebo se tváří, že se ptá na komentovanou prohlídku.
  2. Stránka poté oběť podle očekávání nenápadně přesměruje na legitimní web https://hvezdarnacb.cz. Web hvězdárny vypadá normálně a funguje, jak má.
  3. Zároveň s načtením legitimního webu je ale prohlížeč oběti neviditelně otráven — bez jakéhokoli viditelného znaku.
  4. V závislosti na své složitosti může vložený kód plnit útočníkovy záměry. Prostřednictvím JavaScriptu by útočník mohl fakticky převzít kontrolu nad prohlížečem oběti na dálku, bez jejího vědomí. To může zahrnovat získání přístupu do administrace, pokus o přístup k webkameře, zobrazení podvržených přihlašovacích oken pro služby jako Facebook nebo tiché zaznamenávání aktivity uživatele na stránce.

Horní obrazovka je oběť, spodní útočník.

Útočník manipuluje s prohlížečem oběti

Náprava

Ochranná opatření

Dobrou zprávou je, že existují osvědčené ochranné mechanismy, které tomuto chování zabrání nebo ho alespoň zmírní, a v praxi se běžně používají.

  • Filtrujte a enkódujte uživatelský vstup ve formulářích, aby byl odeslaný text vždy zpracován jako data, nikdy jako kód.
  • Nasaďte Content Security Policy (CSP), která zabrání načtení libovolných skriptů do prohlížeče oběti (libovolné skripty představují nejvyšší riziko).
  • Nastavte bezpečnostní atributy cookies — HttpOnly, Secure, SameSite — které útočníkovi znemožní snadno číst cookies nebo s nimi manipulovat a vydávat se za administrátora.

security.txt

Dobrou praxí je zveřejnit soubor security.txt v souladu s RFC 9116. Soubor patří na kanonickou cestu /.well-known/security.txt. Je to malý, jednoduchý textový soubor, který etickým výzkumníkům sděluje, jak bezpečně nahlásit případné nálezy. Několik příkladů pro inspiraci:

Společnost URL
Google https://www.google.com/.well-known/security.txt
Apple https://www.apple.com/.well-known/security.txt
Microsoft https://www.microsoft.com/.well-known/security.txt
Rohlík https://www.rohlik.cz/.well-known/security.txt
Alza https://www.alza.cz/.well-known/security.txt
Košík https://www.kosik.cz/security.txt

Časová osa zveřejnění

17. listopadu 2024 - zranitelnost nahlášena24. srpna 2025     - opětovně zaslána follow-up zpráva9. června 2026     - opětovně zaslána follow-up zpráva30. září 2026      - telefonický hovor s IT oddělením; zranitelnost byla vysvětlena. Oddělení sdělilo, že nález v tuto chvíli nemá v úmyslu opravit. Dal jsem jim vědět, že bude zveřejněn zde na tomto webu.