Bezpečnostní upozornění k Bookly
Pokud jste ode mě dostali e-mail odkazující na tuto stránku, je to proto, že váš web zřejmě
používá verzi pluginu Bookly (rezervační WordPress plugin
bookly-responsive-appointment-booking-tool), která spadá do rozsahu zasaženého známou
bezpečnostní chybou. Tato stránka vysvětluje, o co jde, jak zjistit svou verzi, jak
aktualizovat a jaký jediný následný krok se vyplatí udělat.
Jde o CVE-2026-13395, neautentizované SQL injection ve veřejném rezervačním toku pluginu. Týká se verzí 11.3 až 27.7 a je opraveno ve verzi 27.8, vydané 10. července 2026. Pokud používáte zasaženou verzi, aktualizujte Bookly na 27.8 nebo novější (27.9 je aktuální vydání a opravu rovněž obsahuje). Nic nenasvědčuje tomu, že by tato chyba byla zneužívána proti jakémukoli webu, a neexistuje ani žádné veřejné hlášení o zneužití kdekoli jinde; tato stránka je preventivní upozornění, nikoli hlášení incidentu.
Na rozdíl od některých mých dalších upozornění toto nezávisí na tom, jak máte web nastavený. Není třeba, aby bylo zapnuté jakékoli nastavení, aby byla chyba dosažitelná: dotčená cesta požadavku je na běžné instalaci otevřená i nepřihlášeným návštěvníkům. Pokud vaše verze Bookly spadá do zasaženého rozsahu, aktualizaci má smysl provést brzy.
Jde o chybu pluginu, nikoli jádra WordPressu. Plně aktualizovaný WordPress vás neochrání, pokud je samotný plugin Bookly v zasažené verzi.
Je tato zpráva legitimní?
Ano. Jde o upozornění v duchu odpovědného zveřejňování, v dobré víře, od nezávislého bezpečnostního výzkumníka. Nežádám vás o peníze, hesla ani přístup k webu a nepokoušel jsem se do něj proniknout, nic mu poslat ani cokoli zneužít.
Jen jsem si prohlédl veřejně dostupné soubory, které váš web poskytuje každému návštěvníkovi (stejně jako je veřejná vaše úvodní stránka), a poznamenal si číslo verze, které plugin Bookly zveřejňuje. Konkrétně jsem nic neodeslal do vašeho rezervačního formuláře ani na dotčenou cestu požadavku a tato kontrola se nedotýká vašich dat, administrace ani žádné soukromé části webu (podrobněji v části Co jsem udělal a co ne).
Pokud si chcete ověřit, kdo jsem, kontakty najdete v dolní části této stránky a na stránce O mně.
Proč na tom záleží
Bookly je jeden z nejrozšířenějších rezervačních pluginů pro WordPress: v oficiálním adresáři je od roku 2014 a běží na desítkách tisíc webů. Na veřejné části vašeho webu zobrazuje rezervační formulář, v němž si návštěvníci vyberou službu, pracovníka a termín, aniž by potřebovali účet.
V zasažených verzích se jedna z hodnot, které tento formulář odesílá zpět, identifikátor pracovníka vybraného návštěvníkem, uloží přesně tak, jak dorazí, bez kontroly, a později se vloží přímo do databázového dotazu místo toho, aby byla předána jako parametr. Kdo místo běžného identifikátoru odešle upravenou hodnotu, může tedy změnit význam tohoto dotazu. Praktický dopad: někdo bez účtu a bez přihlášení by mohl z databáze vašeho webu přečíst data, která dotaz nikdy neměl vracet, včetně otisků (hashů) hesel vašich uživatelských účtů WordPressu.
Dvě věci je třeba říci jasně, na obě strany.
Zaprvé, pro udržení míry: jde o problém čtení dat, nikoli o převzetí serveru či účtu správce. Sám o sobě neumožňuje spustit kód na vašem serveru ani se přihlásit do administrace. Hash hesla není heslo; musí být nejprve prolomen, aby se z něj stal přístup. A neexistují důkazy o zneužití: autorita, která CVE přidělila, nezveřejnila žádné skóre závažnosti, chyba není v katalogu KEV americké CISA, její skóre pravděpodobnosti zneužití (EPSS) není přiděleno a o žádných hlášeních o zneužití nevím.
Zadruhé, bez zlehčování: mezi anonymním návštěvníkem a touto cestou nestojí ani přihlášení, ani nonce, ani žádné nastavení pluginu. Je dosažitelná na výchozí instalaci bezplatného pluginu. Proto zní doporučení aktualizovat brzy, a ne to odkládat do dalšího servisního okna.
Pokud můj e-mail tuto chybu uváděl, znamená to, že verze hlášená vaším webem spadá do zasaženého rozsahu. Netestoval jsem, zda je konkrétně váš web zneužitelný; pozoroval jsem pouze verzi.
Týká se to mě?
Vše se scvrkává na jednu otázku: jakou verzi Bookly používáte? Nemusíte mi věřit na slovo; zkontrolovat to lze dvěma způsoby.
Ve správcovské části WordPressu (rozhodující zdroj):
- Přihlaste se do nástěnky WordPressu (obvykle
vasedomena.cz/wp-admin). - Přejděte na Pluginy a poté Instalované pluginy.
- Najděte Bookly, položku, jejíž složka je
bookly-responsive-appointment-booking-tool, a přečtěte si verzi pod jejím názvem.
Z veřejného manifestu (bez přihlášení): otevřete v prohlížeči
vasedomena.cz/wp-content/plugins/bookly-responsive-appointment-booking-tool/readme.txt. Řádek
Stable tag: poblíž začátku je verze, kterou vaše instalace hlásí; a je to týž veřejný
soubor, který jsem četl.
Pak použijte toto pravidlo a mějte na paměti, že verze se porovnávají číselně, nikoli abecedně:
- 11.3 až 27.7: zasažená. Aktualizujte nyní.
- 27.8 nebo novější: již opravená. To zahrnuje i 27.9, která opravu zachovává.
- Starší než 11.3: touto chybou nezasažená. Nebezpečná konstrukce dotazu v těchto vydáních neexistovala: identifikátory pracovníků procházely parametrizovaným sestavovačem dotazů pluginu. Tak staré vydání má spoustu jiných důvodů k aktualizaci, ale toto upozornění mezi ně nepatří.
- Nečtěte čísla verzí jako text. Bookly má dvojciferné hlavní číslo, takže textové řazení se
mýlí hned dvakrát:
3.3vypadá větší než27.8, ale je mnohem starší, a27.10vypadá menší než27.7, ale je novější. Porovnávejte číslo po čísle.
Poznámka k doplňkům Bookly. Placená rozšíření Bookly (Pro a jednotlivé balíčky
bookly-addon-*) se instalují jako samostatné pluginy s vlastními čísly verzí a adresy
jejich souborů mohou nést verzi hlavního pluginu místo své vlastní. Pro toto upozornění je
rozhodující verze hlavního pluginu Bookly, zjištěná jedním z obou postupů výše, nikoli
číslo přečtené ze souborů doplňku.
Pokud zvenčí nevidíte žádné soubory Bookly. Bookly má nastavení, které určuje, zda se jeho skripty a styly načítají na každé stránce, nebo jen na těch s rezervačním formulářem. Je-li u vás zvolena druhá možnost, je zvenčí vidět mnohem méně z pluginu. Toto nastavení ovlivňuje pouze to, co může návštěvník vidět; nemá vliv na to, zda je chyba přítomná a dosažitelná. Ověřte si verzi v administraci.
Jak aktualizovat
Nejbezpečnější je aktualizovat přímo přes WordPress a předtím si udělat zálohu:
- Zálohujte web (soubory i databázi), než začnete cokoli měnit. Většina hostingů nabízí zálohu jedním kliknutím, případně použijte zálohovací plugin.
- V administraci WordPressu přejděte na Nástěnka a Aktualizace, nebo na Pluginy a Instalované pluginy. Je-li aktualizace Bookly nabízena, nainstalujte ji odtud.
- Dáváte-li přednost příkazové řádce, WP-CLI dělá totéž:
wp plugin update bookly-responsive-appointment-booking-tool. - Pokud se aktualizace nenabízí, můžete nejnovější vydání získat přímo ze stránky pluginu v adresáři WordPress.org, Bookly, a aktualizovat přes Pluginy, Instalace pluginů, Nahrát plugin.
- Po aktualizaci si výše uvedenými kroky ověřte nové číslo verze (27.8 nebo vyšší) a zkontrolujte, že rezervační formulář i stávající rezervace fungují normálně.
Používáte-li placené doplňky Bookly, aktualizujte je spolu s hlavním pluginem; jejich vydání spolu obvykle souvisejí.
Když už u toho budete, vyplatí se ověřit, že jádro WordPressu i ostatní pluginy jsou aktuální; stejný princip platí pro všechny.
Po aktualizaci
Přechod na 27.8 nebo novější chybu uzavírá a nic nenasvědčuje tomu, že by byla kdekoli zneužita, takže není implikována žádná krizová reakce: nemusíte web považovat za kompromitovaný ani jej odstavovat.
Jeden následný krok si ale zaslouží skutečně provést a vyplývá přímo z toho, kam tato chyba dosáhla. Protože hashe hesel WordPressu patřily mezi data, která mohl dotaz vrátit, a protože dříve získaný hash je útočníkovi užitečný i po vaší aktualizaci, rozumným opatřením je po nasazení aktualizace resetovat hesla u účtů správců. Dobře k tomu patří dva menší kroky:
- Projděte si účty správců a redaktorů, zda mezi nimi není nějaký, který nepoznáváte, tak jak byste běžně kontrolovali přístupy.
- Vygenerujte znovu bezpečnostní klíče a „salty” WordPressu v
wp-config.php(nové hodnoty jsou na jedno kliknutí v oficiálním generátoru; jejich výměna jednorázově odhlásí všechny uživatele).
Berte to jako běžnou bezpečnostní údržbu, nikoli jako řešení incidentu.
Co jsem udělal a co ne
Abych byl zcela transparentní ohledně kontroly, která stojí za mým e-mailem: četl jsem pouze
veřejné soubory, které váš web už tak poskytuje každému návštěvníkovi, konkrétně veřejný
readme.txt pluginu Bookly a vaši úvodní stránku. Nepřistupoval jsem k administraci
WordPressu, k databázi ani k žádné soukromé části webu.
Zejména jsem nikdy nic neodeslal do vašeho rezervačního formuláře ani na dotčenou cestu požadavku; nic nebylo odesláno, testováno ani zneužito. Tady to váží víc než na většině těchto stránek: chyba je neautentizovaný požadavek na tuto cestu, takže „nedotkl jsem se jí” je celý rozdíl mezi zveřejněním a průnikem.
Jde o pozorování založené na verzi: váš web hlásí verzi ze zasaženého rozsahu. Web v tomto rozsahu už může být chráněn jinak, například webovým aplikačním firewallem nebo zpětně zaneseným opravným zásahem. Toto upozornění netvrdí, že váš web byl v době kontroly zneužitelný.
Nemám webmastera / nevím, kudy dál
Pokud web nespravujete vy, přepošlete prosím tuto stránku tomu, kdo to dělá (vašemu vývojáři, agentuře nebo hostingu). Výše uvedené kroky rychle pozná.
Pokud web spravujete sami a zaseknete se, rád vás nasměruji, zdarma. Ozvěte se pomocí kontaktů níže.
Kontakt
Evan Harris, bezpečnostní výzkumník
- E-mail: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
Kontaktuji provozovatele ohledně takových věcí výhradně proto, abych jim pomohl zabezpečit weby. Pokud si nepřejete být kontaktováni znovu, stačí dát vědět a budu to respektovat.
Odkazy
Oficiální hlášení a sledování
Dodavatel / plugin