Pokud jste ode mne dostali e-mail, který vás odkázal na tuto stránku, pak proto, že váš web zřejmě používá verzi pluginu Events Manager (WordPressový plugin events-manager od Marcuse Sykese / wp-events-plugin.com), která spadá do dotčeného rozsahu známého bezpečnostního problému. Tato stránka vysvětluje, o jaký problém jde, jak zjistit, zda se vašeho webu vůbec týká, a jak aktualizovat.

Především to nejdůležitější, co je k tomuto upozornění třeba říci: verze v dotčeném rozsahu sama o sobě neznamená, že je váš web ohrožen. Níže popsaný problém je zneužitelný pouze tehdy, když je Events Manager nastaven tak, aby přijímal rezervace od návštěvníků, kteří nejsou přihlášeni (plugin tento režim nazývá „No-User-Account Booking Mode”, tedy rezervace bez uživatelského účtu). Pokud váš web pro rezervaci vyžaduje účet, nebo rezervace vůbec nepřijímá, je velmi pravděpodobně neohrožen i na dotčené verzi. Verzi vašeho pluginu dokážu přečíst z veřejných souborů, ale nevidím vaše nastavení rezervací, takže toto upozornění je preventivní varování, nikoli potvrzený nález o vašem webu.

Jde o CVE-2026-12987, neautentizované vkládání PHP objektů (PHP object injection) vedoucí k SQL injection v rezervačním systému pluginu. Autorita, která CVE přidělila, nezveřejnila skóre závažnosti; Patchstack tentýž nález hodnotí 8,8 z 10 (vysoká závažnost). Postihuje verze 4.0.0 až 7.3.6 a je opravena ve verzi 7.3.7. Pokud používáte dotčenou verzi, aktualizujte Events Manager na 7.3.7 nebo novější (doporučeno je aktuální vydání řady 7.4.x). Nic nenasvědčuje tomu, že by tento problém byl kdekoli zneužíván.

Poznámka k naléhavosti, protože jde o nejvíce podmíněné upozornění, jaké jsem rozeslal: nakolik na tom pro vás záleží, závisí téměř výhradně na onom nastavení rezervací. Pokud rezervace na vašem webu vyžadují přihlášení, je aktualizace běžnou údržbou pluginu. Pokud váš web přijímá veřejné rezervace od návštěvníků bez účtu, berte prosím aktualizaci jako prioritu: v takovém nastavení by chyba mohla útočníkovi umožnit číst data z databáze vašeho webu (například hashe hesel a tajné klíče) bez přihlášení. I tehdy je tato stránka preventivním upozorněním, nikoli zprávou o incidentu, a nevyplývá z ní žádná nouzová reakce.

Jde o zranitelnost pluginu, nikoli jádra WordPressu. Plně aktuální WordPress vás neochrání, pokud je samotný plugin Events Manager na dotčené verzi.

Je tato zpráva důvěryhodná?

Ano. Jde o upozornění v dobré víře podle zásad zodpovědného zveřejňování od nezávislého bezpečnostního výzkumníka. Nežádám vás o peníze, hesla ani přístup k vašemu webu a nepokoušel jsem se do něj proniknout, cokoli nahrát ani cokoli zneužít.

Pouze jsem se podíval na veřejně viditelné soubory, které váš web poskytuje každému návštěvníkovi (stejně jako je veřejná vaše úvodní stránka), a zaznamenal jsem číslo verze, které plugin Events Manager zveřejňuje ve svém veřejném souboru readme.txt. Rezervačního systému jsem se výslovně nedotkl a nic na této kontrole se nedotýká vašich dat, vaší administrace ani žádné soukromé části vašeho webu (podrobněji v části Co jsem udělal a co ne níže).

Pokud si chcete ověřit, kdo jsem, podívejte se na kontaktní údaje v dolní části této stránky a na stránku O této stránce.

Proč na tom záleží

Events Manager je jeden z nejdéle existujících pluginů pro události a rezervace pro WordPress (v oficiálním adresáři od roku 2008, s přibližně 6,3 milionu stažení za dobu své existence). Umožňuje webu zveřejňovat události a přijímat na ně rezervace, včetně, pokud se tak provozovatel rozhodne, rezervací od návštěvníků, kteří na webu nemají uživatelský účet.

V dotčených verzích platí, že když návštěvník odešle rezervaci, vlastní registrační pole, která vyplní, se uloží jako data rezervace, a když plugin tuto rezervaci později načte, rozbalí („deserializuje”) uložená data, aniž by omezoval, co smějí obsahovat. Speciálně připravený vstup tak lze proměnit v programové objekty podle volby útočníka (vkládání PHP objektů, PHP object injection) a řetězec takových objektů se dostane až k databázovému dotazu, který není řádně parametrizován (SQL injection). Praktický důsledek na webu ve zranitelném nastavení: útočník bez účtu a bez přihlášení by mohl číst libovolná data z databáze webu, například hashe hesel a tajné klíče, které WordPress používá.

Dvě věci to pomáhají udržet v perspektivě. Zaprvé, vstupním bodem je veřejný rezervační formulář, takže útok funguje pouze tam, kde nepřihlášený návštěvník může odeslat rezervaci. To je přesně podmínka „No-User-Account Booking Mode”: pokud rezervace na vašem webu vyžaduje účet, zranitelná cesta není pro anonymní návštěvníky dosažitelná a váš web je velmi pravděpodobně neohrožen i na dotčené verzi. Zadruhé, jde o problém čtení dat, nikoli o převzetí serveru nebo administrátorského účtu: sám o sobě útočníkovi neumožňuje spouštět kód na vašem serveru ani se přihlásit do vaší administrace. A aby to bylo řečeno zcela jasně, nic nenasvědčuje aktivnímu zneužívání: není v katalogu Known Exploited Vulnerabilities agentury CISA, jeho skóre pravděpodobnosti zneužití (EPSS) je blízké nule a nejsem si vědom žádných hlášení o zneužití.

Pokud můj e-mail tento problém uváděl, znamená to, že verze, kterou váš web hlásí, spadá do dotčeného rozsahu. Netestoval jsem, zda je konkrétně váš web zneužitelný, a nevidím, jak je nastaven váš rezervační systém; pozoroval jsem pouze to, že web hlásí dotčenou verzi.

Týká se mě to?

Rozhodují o tom dvě otázky, v tomto pořadí.

Zaprvé: přijímáte rezervace od návštěvníků, kteří nejsou přihlášeni? To je rozhodující otázka a odpovědět na ni můžete jen vy.

  • Pokud rezervace na vašem webu vyžadují účet nebo přihlášení, nebo váš web rezervace vůbec nepřijímá, jste velmi pravděpodobně neohroženi, i na dotčené verzi. Aktualizace se přesto doporučuje jako běžná údržba.
  • Pokud váš web přijímá rezervace od návštěvníků bez účtu (Events Manager to nazývá „No-User-Account Booking Mode”), problém se vás týká a měli byste bezodkladně aktualizovat.
  • Jak to zkontrolovat: v administraci WordPressu se v nastavení rezervací pluginu Events Manager podívejte po volbě, která povoluje rezervace bez uživatelského účtu. Nebo to jednoduše otestujte zvenčí: otevřete některou ze svých stránek s událostí v anonymním okně prohlížeče a zjistěte, zda můžete vyplnit a odeslat rezervaci, aniž byste byli vyzváni k přihlášení.

Zadruhé: jakou verzi používáte? Nemusíte mi věřit na slovo.

Z veřejného manifestu (bez přihlášení): otevřete v prohlížeči yourdomain.com/wp-content/plugins/events-manager/readme.txt. Upozorňuji, že tento plugin dodává svůj readme jako readme.txt (malými písmeny). Řádek Stable tag: blízko horní části je verze, kterou vaše instalace hlásí, a jde o stejný veřejný soubor, který jsem četl.

Z administrace WordPressu (pokud máte přístup):

  1. Přihlaste se do administrace WordPressu (obvykle na adrese yourdomain.com/wp-admin).
  2. Přejděte na Pluginy poté Instalované pluginy.
  3. Vyhledejte Events Manager a poznamenejte si verzi uvedenou pod jeho názvem.

Poté použijte toto pravidlo a mějte na paměti, že verze se porovnávají číselně, nikoli abecedně:

  • 4.0.0 až 7.3.6: potenciálně dotčené (v závislosti na výše uvedené otázce ohledně režimu rezervací), aktualizujte ihned.
  • 7.3.7 nebo novější: již opravené. To zahrnuje 7.3.7.1, což byla následná oprava regrese zobrazení nesouvisející s bezpečností, nikoli druhé bezpečnostní vydání: bezpečnostní opravu obsahují jak 7.3.7, tak 7.3.7.1. Zahrnuje to také všechna aktuální vydání řady 7.4.x.
  • Starší než 4.0: tímto problémem nedotčené. Zranitelné zpracování dat rezervací poprvé přišlo s přepisem pluginu ve verzi 4.0, takže starší vydání jej nenesou (vydání takového stáří má spoustu jiných důvodů k aktualizaci, ale toto upozornění mezi ně nepatří).
  • Nenechte se zmást pořadím textu: Events Manager před verzí 6.0 používal řetězce verzí jako 5.99912 (dodavatel u schématu číslování 5.999.x uvízl až do verze 6.0) a taková verze je staré vydání nižší než 6.0, uvnitř dotčeného rozsahu, nikoli něco novějšího než 7. Porovnávejte jednotlivá čísla postupně, místo abyste verzi četli jako text.

Jak aktualizovat

Nejbezpečnější cestou je aktualizace přímo přes WordPress, a to po předchozí záloze:

  1. Zazálohujte svůj web (soubory a databázi) před provedením změn. Většina poskytovatelů hostingu nabízí zálohy na jedno kliknutí, případně použijte zálohovací plugin pro WordPress.
  2. V administraci WordPressu přejděte na Nástěnka poté Aktualizace, nebo Pluginy poté Instalované pluginy. Pokud je aktualizace Events Manager uvedena, nainstalujte ji odsud.
  3. Pokud dáváte přednost příkazové řádce, WP-CLI udělá totéž: wp plugin update events-manager.
  4. Pokud se žádná aktualizace neobjeví, můžete si nejnovější vydání stáhnout přímo ze stránky pluginu v adresáři WordPress.org, Events Manager, a aktualizovat přes Pluginy poté Přidat nový plugin poté Nahrát plugin.
  5. Po aktualizaci potvrďte nové číslo verze (7.3.7 nebo novější; doporučeno je aktuální vydání řady 7.4.x) podle výše uvedených kroků a zkontrolujte, že vaše stránky s událostmi a rezervacemi fungují běžně.

Když už jste u toho, vyplatí se ověřit, že jsou aktuální i jádro WordPressu a vaše ostatní pluginy, protože stejná zásada platí pro všechny.

Po aktualizaci

Aktualizace na 7.3.7 nebo novější problém uzavírá a pro většinu webů je to celý úkol. Nic nenasvědčuje tomu, že by tato chyba byla kdekoli zneužita, takže žádná nouzová reakce z toho nevyplývá: nemusíte svůj web považovat za napadený ani ho odpojovat.

Jeden následný krok stojí za zvážení a závisí na téže otázce ohledně rezervací. Pokud váš web přijímal veřejné rezervace od návštěvníků bez účtu, zatímco byl na dotčené verzi, pak data, k nimž chyba mohla dosáhnout (obsah databáze včetně hashů hesel a tajných klíčů), byla přinejmenším teoreticky čitelná, přestože není žádný důkaz, že to někdo udělal. V takovém případě jsou rozumná dvě běžná opatření:

  • Projděte si nedávné rezervace a aktivitu uživatelů, zda v nich není něco podezřelého, obvyklým způsobem, jakým aktivitu webu kontrolujete.
  • Obměňte tajné hodnoty, které jsou uloženy ve vaší databázi a konfiguraci: znovu vygenerujte tajné klíče a soli (salts) WordPressu v souboru wp-config.php (nové hodnoty jsou na jedno kliknutí u oficiálního generátoru tajných klíčů; jejich výměna jednou odhlásí všechny uživatele) a změňte heslo k databázi přes panel svého hostingu. Protože mezi teoreticky čitelnými daty byly i hashe hesel, je rozumným dalším krokem nechat administrátorské účty obnovit svá hesla.

Berte to jako běžnou bezpečnostní údržbu, nikoli jako reakci na incident. Pokud rezervace na vašem webu vždy vyžadovaly přihlášení (nebo žádné rezervace nepřijímáte), stačí samotná aktualizace.

Co jsem udělal a co ne

Abych byl ohledně kontroly, která předcházela mému e-mailu, zcela transparentní: četl jsem pouze veřejné soubory, které váš web už teď poskytuje každému návštěvníkovi, konkrétně veřejný soubor pluginu readme.txt a vaši úvodní stránku. Nepřistupoval jsem k vaší administraci WordPressu, k vaší databázi ani k žádné soukromé části webu. Zejména jsem se nedotkl zranitelné rezervační cesty a nic jsem netestoval ani nezneužil.

Jde o pozorování založené na verzi: váš web hlásí verzi v dotčeném rozsahu. Protože tento problém závisí na nastavení, web v tomto rozsahu nemusí být vůbec ohrožen (pokud rezervace vyžadují přihlášení, nebo se žádné rezervace nepřijímají) a může už být také zmírněn jinými prostředky, například webovým aplikačním firewallem. Toto upozornění není tvrzením, že váš web byl v době mé kontroly zneužitelný.

Nemám webmastera / nevím si rady

Pokud nejste tou osobou, která web spravuje, přepošlete prosím tuto stránku tomu, kdo to dělá (vašemu vývojáři webu, agentuře nebo poskytovateli hostingu). Výše uvedené kroky rychle rozpozná.

Pokud web spravujete sami a zaseknete se, rád vám zdarma pomohu nasměrovat se správným směrem. Ozvěte se pomocí kontaktních údajů níže.

Kontakt

Evan Harris, bezpečnostní výzkumník

Na provozovatele se s problémy, jako je tento, obracím výhradně proto, abych jim pomohl zabezpečit jejich weby. Pokud si nepřejete být znovu kontaktováni, stačí mi to sdělit a budu to respektovat.

Zdroje

Oficiální upozornění a evidence

Dodavatel / plugin