Pokud jste ode mě obdrželi e-mail odkazující na tuto stránku, je to proto, že váš web podle všeho používá verzi pluginu Ultimate Member (členského a profilového pluginu pro WordPress od Ultimate Member, který se ve vašich souborech nachází v /wp-content/plugins/ultimate-member/) spadající do rozsahu dotčeného známým bezpečnostním problémem. Tato stránka vysvětluje, o jaký problém jde, jak zjistit, zda se týká vašeho webu, jak přečíst svou verzi, aniž byste se nechali zmást, a na jakou verzi aktualizovat.

Jde o CVE-2026-19423, neautentizovanou slabinu umožňující eskalaci oprávnění v registračních a profilových formulářích pluginu. Týká se verzí Ultimate Member 2.6.7 až 2.12.1 a je opravena ve verzi 2.13.0, vydané 24. srpna 2026. Pokud používáte verzi v tomto rozsahu, aktualizujte Ultimate Member na 2.13.0 nebo novější. Pro tento problém nebylo zveřejněno žádné skóre CVSS (přidělil jej WPScan bez vektoru závažnosti), takže vám žádné citovat nebudu, a není mi znám žádný veřejný exploit.

Verze starší než 2.6.7 nejsou tímto problémem dotčeny, a chci v tom být přesný, místo aby upozornění znělo šířeji, než jaké je. Nejde o chybu přítomnou od počátků pluginu: cesta v kódu, na níž závisí, byla zavedena ve verzi 2.6.7. Instalace starší než 2.6.7 tedy zde není cílem a webům s takovou verzí jsem nepsal. Pokud se ukáže, že vaše verze je nižší než 2.6.7, můžete toto upozornění pro tento problém pominout (i když udržovat takto zastaralý plugin aktuální se vyplatí z jiných důvodů).

Nejdříve ze všeho podmínka, která rozhoduje o tom, nakolik se to vašeho webu týká, protože ji raději řeknu na rovinu, než aby upozornění vyznělo hrozivěji, než jaké je: tento problém dopadá jen na web, kde některý z vašich registračních nebo profilových formulářů Ultimate Member nabízí osobě, která jej vyplňuje, volbu role, a kde je registrace otevřená veřejnosti. Standardní nastavení Ultimate Member výběr role na registrační formulář nedává (administrátor jej musí přidat záměrně), takže mnoho webů s dotčenou verzí není vystaveno vůbec. Verzi vašeho pluginu umím přečíst z veřejného souboru, ale nevidím, jak jsou vaše formuláře postavené ani zda je registrace otevřená, takže toto upozornění je preventivní zpráva, nikoli potvrzené zjištění o vašem webu.

Slovo k naléhavosti, protože jde o podmíněné upozornění. Pokud žádný z vašich formulářů Ultimate Member neumožňuje návštěvníkovi vybrat si roli, je aktualizace běžnou údržbou pluginů. Pokud to některý umožňuje a registrace je otevřená, berte prosím aktualizaci jako prioritu: v takové konfiguraci by si návštěvník, který si zaregistruje účet, mohl tomuto účtu přidělit zvýšená oprávnění, potenciálně až na úroveň odpovídající administrátorovi, bez jakéhokoli předchozího přístupu k vašemu webu. Tam, kde se to uplatní, je to vážný důsledek, a proto píšu, místo abych to odložil jako nízkou prioritu; platí to však jen za výše uvedených podmínek a aktualizace to odstraní bez ohledu na ně.

Jde o chybu pluginu, nikoli jádra WordPressu. Plně aktuální WordPress vás nechrání, pokud je samotný plugin Ultimate Member na dotčené verzi.

Je tato zpráva legitimní?

Ano. Toto je upozornění v dobré víře v rámci 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, registrovat se na něm ani cokoli zneužít.

Jediné, co jsem udělal, bylo, že jsem se podíval na stránky a soubory, které váš web poskytuje každému návštěvníkovi (stejně veřejně jako vaši úvodní stránku), a poznamenal si číslo verze, které plugin zveřejňuje. Výslovně jsem nevytvořil účet, neodeslal žádný registrační ani profilový formulář, nepřihlásil se ani nic neposlal dotčené funkci. Nic z této kontroly 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 na konci této stránky a na stránku O mně.

Proč na tom záleží

Ultimate Member vytváří registrační, přihlašovací a profilové stránky na velkém množství webů na WordPressu. Když se někdo zaregistruje, plugin rozhoduje, jakou roli má jeho nový účet dostat. U formuláře, který nabízí výběr role, má přijímat jen ty role, které byl daný formulář nakonfigurován povolit.

V dotčených verzích platí, že když seznam povolených rolí takového formuláře skončí prázdný, plugin už roli odeslanou návštěvníkem nezahodí. Místo toho si tuto hodnotu ponechá a ověří ji jen proti rolím, které váš web vůbec má, nikoli proti rolím, které měl formulář nabízet. Důsledkem je, že návštěvník registrující si vlastní účet jej mohl nasměrovat k roli, kterou nikdy neměl dostat, až po úroveň odpovídající administrátorovi.

Předpoklad, zopakovaný proto, že jde o část, kterou lze nejsnáze špatně pochopit oběma směry: je potřeba výběr role na veřejném formuláři a otevřená registrace. Ani jedno není výchozí nastavení. Standardní registrační formulář Ultimate Member žádné pole role neobsahuje, takže na typické instalaci tu není čeho dosáhnout. Tam, kde administrátor pole role přidal a registraci nechal otevřenou, je překážka jen tak vysoká, jako otázka, kdo může takový formulář odeslat, což je při otevřené registraci kdokoli.

Popisuji to na úrovni, kterou provozovatel webu potřebuje, aby mohl jednat, a dál ne. Nezveřejňuji podrobnosti, které by někomu umožnily problém zreprodukovat, a prosím vás, abyste to nezkoušeli proti vlastnímu webu ani proti cizímu. Přečtení čísla verze a kontrola vlastních formulářů, jak je popsáno níže, vám řekne vše, co potřebujete k rozhodnutí, co dělat.

Pokud můj e-mail tento problém zmiňoval, znamená to, že verze, kterou váš web hlásí, je v rozsahu 2.6.7 až 2.12.1. Netestoval jsem, zda je právě váš web zneužitelný, a nevidím, jak jsou vaše formuláře postavené. Jediné, co jsem pozoroval, je verze.

Týká se to mě?

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

Za prvé: nabízí některý z vašich formulářů výběr role a je registrace otevřená?

To je rozhodující otázka a odpovědět na ni můžete jen vy, protože závisí na tom, jak jsou vaše formuláře postavené, což zvenčí vidět není. Kontrola je zcela bezpečná a je smyslem této stránky.

  1. V nástěnce WordPressu přejděte na Ultimate Member a poté Formuláře (Forms) a postupně otevřete každý svůj registrační a profilový formulář.
  2. Projděte pole každého formuláře a hledejte pole pro výběr role (rozbalovací nabídku nebo sadu možností, která registrující se osobě umožňuje zvolit roli, někdy označenou „Role”). Na většině webů žádné není, protože standardní registrační formulář je neobsahuje.
  3. Zkontrolujte, zda je registrace otevřená veřejnosti: Nastavení, poté Obecné, poté Členství, zaškrtávací políčko „Kdokoliv se může registrovat” (jádro WordPressu), a zda je váš registrační formulář Ultimate Member dostupný návštěvníkům.
  4. Pokud výběr role nenabízí žádný formulář, tento problém na váš web nedopadá, ani na dotčené verzi; aktualizace se však stále vyplatí jako běžná údržba.
  5. Pokud výběr role nabízí kterýkoli formulář a registrace je otevřená, berte aktualizaci jako prioritu (viz Jak aktualizovat). Pokud nemůžete aktualizovat okamžitě, je dočasným krokem odstranit pole role ze všech veřejně dostupných registračních či profilových formulářů, nebo veřejnou registraci uzavřít, dokud neaktualizujete. Skutečnou opravou je aktualizace.

Nepokoušejte se prosím problém reprodukovat proti vlastnímu ani cizímu webu; k zodpovězení výše uvedené otázky to nepotřebujete.

Za druhé: jakou verzi používáte?

Nemusíte mi věřit na slovo. Existují dva veřejné způsoby, jak verzi přečíst, a jeden v nástěnce, a měly by se shodovat.

Z administrace WordPressu (směrodatné):

  1. Přihlaste se do nástěnky WordPressu (obvykle na yourdomain.com/wp-admin).
  2. Přejděte na Pluginy a poté Instalované pluginy.
  3. Najděte Ultimate Member, položku, jejíž složka je ultimate-member, a poznamenejte si verzi uvedenou pod jejím názvem.

Z veřejného manifestu (bez přihlášení): otevřete

yourdomain.com/wp-content/plugins/ultimate-member/readme.txt

v prohlížeči a přečtěte řádek Stable tag: poblíž začátku. To je veřejný zdroj, který jsem četl já. Pokud tato adresa vrátí „nenalezeno”, zkuste README.txt velkými písmeny; některé hostingy rozlišují velikost písmen a několik balíčků dodává soubor s velkým názvem.

Ze zdrojového kódu stránky (bez přihlášení): zobrazte si zdrojový kód své úvodní stránky a hledejte vlastní styly pluginu přesně na těchto cestách:

/wp-content/plugins/ultimate-member/assets/css/um-styles.min.css?ver=...
/wp-content/plugins/ultimate-member/assets/css/um-profile.min.css?ver=...

Číslo ?ver= připojené k těmto souborům je vlastní verze pluginu. Ultimate Member tyto styly ve výchozím nastavení načítá na každé veřejné stránce bez ohledu na to, zda stránka zobrazuje členskou sekci, takže vaše úvodní stránka obvykle stačí.

Past, které se zde vyhnout, a je snadné do ní spadnout. Ultimate Member dodává přibalené kopie několika knihoven třetích stran uvnitř vlastní složky pluginu a každá z nich nese své vlastní, zcela nesouvisející číslo verze. Ve zdrojovém kódu stránky můžete vidět knihovnu pro ořez obrázků s ?ver=1.6.1, Font Awesome s ?ver=6.5.2 nebo Select2 s ?ver=3.6.2, vše na cestách začínajících složkou pluginu Ultimate Member. Provozovatel, který ve zdrojovém kódu vyhledá složku pluginu a přečte první hodnotu ?ver=, na kterou narazí, si snadno odnese jedno z těchto čísel, které s verzí pluginu nemá nic společného. Čtěte verzi jen z vlastních stylů pluginu s předponou um- (um-styles, um-profile, um-account a podobně) a každé jiné ?ver= na stránce ignorujte. Pokud ze zdrojového kódu žádné čitelné číslo nezískáte, je to běžné a nic to neznamená: cachovací a optimalizační pluginy hodnotu ?ver= rutinně odstraňují; použijte pak místo toho readme.txt nebo obrazovku administrace.

Poté použijte toto pravidlo a mějte na paměti, že verze se porovnávají číselně, nikoli abecedně, takže 2.12.1 je novější než 2.6.7, i když „12” vypadá jako text menší než „6”:

  • 2.6.7 až 2.12.1: dotčená, s výhradou otázky ohledně formulářů výše. Aktualizujte na 2.13.0 nebo novější.
  • 2.13.0 nebo novější: z hlediska tohoto problému již opravená. Nejlepším krokem je vzít nejnovější dostupnou verzi.
  • Cokoli staršího než 2.6.7: tímto problémem nedotčeno. Aktualizace se přesto vyplatí jako běžná údržba.

Jak aktualizovat

Plugin je zdarma, stále se vydává a je aktivně udržovaný, takže oprava je běžnou aktualizací. Nejbezpečnější cestou je aktualizace přímo přes WordPress, a to po předchozím zálohování:

  1. Zálohujte svůj web (soubory i databázi), než provedete změny. Většina poskytovatelů hostingu nabízí zálohy jedním kliknutím, nebo použijte zálohovací plugin pro WordPress.
  2. V administraci WordPressu přejděte na Nástěnka a poté Aktualizace, nebo Pluginy a poté Instalované pluginy. Pokud je aktualizace Ultimate Member v seznamu, nainstalujte ji odsud.
  3. Pokud dáváte přednost příkazové řádce, WP-CLI udělá totéž: wp plugin update ultimate-member (příkaz používá název složky, nikoli zobrazovaný název).
  4. Pokud se žádná aktualizace nezobrazí, můžete získat nejnovější vydání přímo ze stránky pluginu v adresáři WordPress.org, Ultimate Member, a aktualizovat přes Pluginy, poté Instalace pluginů, poté Nahrát plugin.
  5. Po aktualizaci potvrďte nové číslo verze (2.13.0 nebo novější) pomocí výše uvedených kroků a zaregistrujte zkušební účet (nebo zkontrolujte své stávající členské a registrační procesy), abyste se ujistili, že vše stále funguje, jak má.

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

Po aktualizaci: nebylo to proti vám už použito?

Aktualizace na 2.13.0 nebo novější problém uzavírá a pro mnoho webů je to celý úkol. Tato stránka je preventivní upozornění, nikoli zpráva o incidentu: nemám žádný vhled do toho, zda se na vašem webu něco stalo, a nedíval jsem se.

Jedna následná kontrola se vyplatí a je podmíněna stejnou otázkou ohledně formulářů. Protože výsledkem tohoto problému, tam kde se uplatní, je účet se zvýšenými oprávněními, pak pokud měl váš web registrační nebo profilový formulář s výběrem role, zatímco registrace byla otevřená a vy jste používali dotčenou verzi, vyplatí se ověřit, že jej nikdo nevyužil k vytvoření účtu, který by existovat neměl:

  • Projděte své uživatelské účty, zejména administrátory. V Uživatelé a poté Všichni uživatelé vyfiltrujte roli Administrátor (a další role s vysokými oprávněními) a hledejte účty, které nepoznáváte, nebo účty vytvořené kolem doby, kdy jste byli na dotčené verzi, či po ní. Věnujte pozornost nedávno registrovaným uživatelům, jejichž role je vyšší než u běžného člena.
  • Pokud najdete účet, který si nedokážete vysvětlit, zacházejte s ním jako s jakýmkoli jiným podezřením na neoprávněný přístup: odstraňte jej nebo mu snižte roli, vynuťte reset hesel svých administrátorů, a pokud má vaše organizace tým IT bezpečnosti, přizvěte jej.
  • Pokud vše vypadá, jak má, a zvláště pokud žádný formulář výběr role vůbec nenabízel, stačí samotná aktualizace.

Aby bylo jasné zarámování: jde o vlastní kontrolu, nikoli o prohlášení, že váš web byl napaden. Toto upozornění vychází z čísla verze, ne z jakéhokoli důkazu o incidentu.

Co jsem udělal a co ne

Abych byl ohledně kontroly za mým e-mailem zcela transparentní: četl jsem pouze soubory, které váš web už poskytuje každému návštěvníkovi, konkrétně vaši úvodní stránku a adresy stylů Ultimate Member v ní zapsané, a veřejný readme.txt pluginu uvnitř wp-content/plugins/ultimate-member/. Nepřistupoval jsem k vaší administraci WordPressu, k databázi, ke konfiguraci formulářů ani k žádné soukromé části webu.

Zejména jsem nikdy nevytvořil účet, neodeslal váš registrační ani profilový formulář, nepřihlásil se ani nic neposlal dotčené funkci. Nic nebylo odesláno, testováno ani zneužito. Zde na tom záleží, protože odeslání registrace je blízko přesně té akci, jíž se tento problém týká, takže „nedotkl jsem se toho” je celý rozdíl mezi zveřejněním a průnikem.

Záměrně také nezveřejňuji podrobnosti, které by někomu pomohly tento problém zneužít. Popis výše se zastavuje na úrovni, kterou provozovatel webu potřebuje, a neodkazuji na žádný proof-of-concept kód.

Jde o pozorování založené na verzi: váš web hlásí verzi v rozsahu 2.6.7 až 2.12.1. Není to tvrzení, že váš web byl v okamžiku mé kontroly zneužitelný. Protože tento problém závisí na tom, jak jsou vaše formuláře postavené a zda je registrace otevřená (což jsou věci, které nevidím), nemusí být web v dotčeném rozsahu vystaven vůbec, a web v tomto rozsahu může být navíc chráněn jinými prostředky, například webovým aplikačním firewallem nebo zpětně portovanou opravou. Pokud jste již aktualizovali, nebo problém napravili jinak, není třeba nic dělat, a omlouvám se za vyrušení.

Nemám webmastera / nevím, kudy dál

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

Pokud web spravujete sami a zaseknete se, rád vám zdarma pomohu najít správný směr. Ozvěte se mi prostřednictvím kontaktních údajů níže.

Kontakt

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

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

Odkazy

Oficiální upozornění a sledování

Výrobce / plugin