Bezpečnostní upozornění k pluginu SMS Alert
Pokud jste ode mě obdrželi e-mail, který vás odkazuje na tuto stránku, je to proto, že se zdá,
že váš web běží na verzi pluginu SMS Alert (plugin pro WordPress uvedený jako „SMS Alert
– SMS & OTP for WooCommerce, Order Notifications & Abandoned Cart Recovery”, od společnosti
Cozy Vision Technologies, který se nachází ve vašich souborech na cestě
/wp-content/plugins/sms-alert/), která spadá do ovlivněného rozsahu známého bezpečnostního
problému. Tato stránka vysvětluje, o jaký problém jde, jak zjistit, zda se vůbec týká vašeho
webu, a jak provést aktualizaci. Jde v celém rozsahu o plugin pro WordPress.
Než cokoli dalšího, nejdůležitější skutečností tohoto upozornění je: verze v ovlivněném rozsahu sama o sobě neznamená, že je váš web vystaven riziku. Níže popsaný problém nastává pouze tam, kde jsou splněny obě následující podmínky současně, a ani jednu z nich nelze zjistit zvenčí vašeho webu:
- Váš web má v nastavení SMS Alert zapnuté ověřování OTP pro obnovení hesla, a
- cílený účet má uložené telefonní číslo.
Pokud používáte SMS Alert pouze pro oznámení o objednávkách, zprávy o opuštěném košíku nebo OTP při pokladně či registraci, a nikoli pro ověřování obnovení hesla, pak se vás tento problém velmi pravděpodobně netýká, i když používáte ovlivněnou verzi. Z veřejného souboru mohu zjistit verzi vašeho pluginu, ale nemohu vidět vaše nastavení, takže toto upozornění je preventivním varováním, nikoliv potvrzeným zjištěním o stavu vašeho webu.
Jedná se o chybu CVE-2026-11387, neautentizované převzetí účtu prostřednictvím procesu obnovení hesla v pluginu (CWE-640, slabé obnovení hesla). Postihuje verze 3.0.0 až 3.9.5 a je opravena ve verzi 3.9.6. Pokud používáte ovlivněnou verzi, aktualizujte SMS Alert na verzi 3.9.6 nebo novější. Vydání 3.9.7 a 3.9.8 přišla později a opravují jiné věci; z hlediska tohoto problému jsou obě v pořádku a aktuálním vydáním je 3.9.8. Chyba má CVSS skóre 9.8 a je k dispozici veřejný proof-of-concept kód, což je důvod, proč vám píšu i přesto, že výše uvedená otázka o nastavení může celou věc vyřešit ve váš prospěch.
Slovo k naléhavosti, protože se jedná o podmíněné upozornění. Pokud nepoužíváte SMS Alert k ověřování obnovení hesla, je aktualizace běžnou údržbou pluginu. Pokud ho tak používáte, považujte prosím aktualizaci za prioritu: v takovém nastavení by chyba mohla umožnit vzdálenému návštěvníkovi bez účtu nastavit nové heslo pro jakéhokoli uživatele, který má uložené telefonní číslo, včetně administrátora, což by znamenalo předání kontroly nad webem.
Jedná se o chybu v pluginu, nikoli v jádru WordPressu nebo WooCommerce. Plně aktualizovaný WordPress vás nechrání, pokud je samotný plugin SMS Alert na ovlivněné verzi.
Je tato zpráva legitimní?
Ano. Jedná se o zprávu o zodpovědném odhalení chyby od nezávislého bezpečnostního výzkumníka, vycházející z dobré víry. Nežádám vás o peníze, hesla ani přístup k vašemu webu a nepokusil jsem se do něj vloupat, nic do něj odeslat ani cokoli zneužít.
Jediné, co jsem udělal, bylo podívat se na veřejně dostupné soubory, které váš web poskytuje
každému návštěvníkovi (stejně jako je veřejná vaše domovská stránka), a poznamenat si číslo
verze, kterou plugin zveřejňuje ve svém veřejném souboru readme.txt. Konkrétně jsem se
nedotkl procesu obnovení hesla a nic z této kontroly se nedotýká vašich dat, vaší
administrátorské oblasti ani žádné soukromé části vašeho webu (více podrobností v sekci Co
jsem udělal a co ne níže).
Pokud byste si chtěli 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ží
SMS Alert odesílá SMS a WhatsApp oznámení pro obchody na WooCommerce a dokáže také před určité uživatelské akce zařadit jednorázový kód. Jedním z procesů, které tímto způsobem chrání, je obnovení hesla přes „zapomněli jste heslo?”: návštěvník požádá o obnovení, plugin mu SMS zprávou pošle jednorázový kód na telefonní číslo uvedené u účtu a nové heslo by mělo být nastaveno až poté, co je tento kód správně zadán.
V ovlivněných verzích krok, který nastavuje nové heslo, neověřoval, zda byl jednorázový kód skutečně úspěšně zadán. Obnovení hesla tak mohlo být dokončeno, aniž by byl kód kdy zadán, a to i osobou, která není přihlášená a nemá žádný vlastní účet. Verze 3.9.6 přidává chybějící kontrolu, takže krok nastavení hesla nyní odmítne proběhnout, dokud nejprve neproběhne ověření kódem.
Dvě věci určují, jak moc na tom u konkrétního webu záleží. Za prvé, vstupním bodem je právě tato konkrétní konfigurace: plugin spouští svůj vlastní proces obnovení hesla pouze tam, kde administrátor zapnul ověřování OTP pro obnovení hesla, a má kód komu poslat pouze u účtu, který má uložené telefonní číslo. Web, který tuto funkci nikdy nezapnul, velmi pravděpodobně není vůbec vystaven riziku, a to i na ovlivněné verzi. Za druhé, tam, kde tato konfigurace je zavedena, je dopad závažný, nikoli okrajový, protože nic ho neomezuje na účty s nízkými oprávněními: cílem se může stát jakýkoli účet s uloženým telefonním číslem, administrátory nevyjímaje.
Pokud můj e-mail odkazoval na tento problém, znamená to, že verze, kterou váš web uvádí, spadá do ovlivněného rozsahu. Netestoval jsem, zda je váš konkrétní web zneužitelný, a nemohu vidět, jak je nakonfigurováno vaše nastavení OTP; vše, co jsem pozoroval, je to, že web uvádí ovlivněnou verzi.
Týká se to mě?
Rozhodují dvě otázky, a to v tomto pořadí.
Za prvé: používáte SMS Alert k ověřování obnovení hesla? Toto je rozhodující otázka a odpovědět na ni můžete pouze vy. Kontrola vlastního nastavení je zcela bezpečná a je celým smyslem této stránky.
- V administraci WordPressu otevřete nabídku SMS Alert a přejděte do jejího nastavení, poté do sekce, která ovládá ověřování OTP. Tato sekce uvádí procesy, před které lze zařadit jednorázový kód. Zkontrolujte, zda je mezi zapnutými možnostmi i obnovení hesla (někdy zobrazeno jako „lost password” nebo „forgot password”).
- Pokud není zapnuto, tento problém se vašeho webu velmi pravděpodobně netýká, a to i na ovlivněné verzi. Aktualizace se přesto doporučuje jako běžná údržba.
- Pokud je zapnuto, problém se vás týká a měli byste co nejdříve provést aktualizaci.
Nepokoušejte se prosím reprodukovat tento problém na svém webu ani na webu kohokoli jiného, a k zodpovězení výše uvedené otázky to ani nepotřebujete: vše, co potřebujete vědět, vám řekne pohled do vašeho nastavení.
Za druhé: jakou verzi používáte? Nemusíte mi věřit na slovo, ale u tohoto pluginu je jeden z na první pohled zřejmých způsobů kontroly zavádějící, takže je dobré tuto část přečíst pozorně.
Z administrace WordPressu (autoritativní):
- Přihlaste se do nástěnky WordPressu (obvykle na adrese
yourdomain.com/wp-admin). - Přejděte na Pluginy a poté na Nainstalované pluginy.
- Najděte položku uvedenou jako „SMS Alert – SMS & OTP for WooCommerce …“ (její složka
je
sms-alert) a poznamenejte si verzi uvedenou pod jejím názvem. Toto je skutečná nainstalovaná verze.
Z veřejného manifestu (bez nutnosti přihlášení): otevřete v prohlížeči
yourdomain.com/wp-content/plugins/sms-alert/readme.txt. Řádek Stable tag: blízko
začátku souboru je verze, kterou vaše instalace uvádí, a je to tentýž veřejný soubor, který
jsem četl.
Jedna věc, které nedůvěřovat: číslo ?ver= připojené ke skriptům a stylesheetům pluginu na
straně front-endu ve zdrojovém kódu vaší stránky. SMS Alert označuje tyto assety hodnotou z
interní konstanty, která přinejmenším jednou zaostala za skutečným vydáním: verze 3.5.0 byla
vydána s assety označenými 3.4.9. Čtení verze tímto způsobem vám tedy může ukázat vydání
starší, než jaké skutečně používáte, což by na hranici mohlo proměnit opravenou instalaci
3.9.6 ve zdánlivou 3.9.5. Přesně proto jsem to nepoužil k rozhodování, koho kontaktovat, a proto
byste měli svou verzi posuzovat podle obrazovky administrace nebo řádku readme.txt.
Poté použijte toto pravidlo, a mějte na paměti, že verze se porovnávají číselně, nikoli abecedně, takže 3.9.10 by bylo novější než 3.9.9:
- 3.0.0 až 3.9.5: potenciálně ovlivněno (s výhradou výše uvedené otázky o konfiguraci OTP), aktualizujte nyní.
- 3.9.6 nebo novější: již opraveno. To zahrnuje i 3.9.7 a 3.9.8, což jsou pozdější vydání řešící nesouvisející problémy; aktuálním vydáním je 3.9.8.
- Starší než 3.0.0: nad rámec toho, o čem jsem ochoten cokoli tvrdit. Nejstarší vydání, které výrobce stále publikuje, je 3.0.0, takže nemám žádnou možnost prozkoumat cokoli pod touto hranicí, a raději neřeknu nic, než bych obvinil verzi, kterou nemohu ověřit. V praxi je tento případ hypotetický: nejstarší instalace, se kterou jsem se kdekoli setkal, je vydání řady 3.4.x.
Jak aktualizovat
Nejbezpečnější cestou je aktualizovat přímo prostřednictvím WordPressu, a nejprve provést zálohu:
- Zálohujte svůj web (soubory i databázi) před provedením jakýchkoli změn. Většina poskytovatelů hostingu nabízí zálohování jedním kliknutím, nebo můžete použít plugin pro zálohování WordPressu.
- V administraci WordPressu přejděte na Nástěnka a poté Aktualizace, nebo na Pluginy a poté Nainstalované pluginy. Pokud je zde uvedena aktualizace SMS Alert, nainstalujte ji odtud.
- Pokud preferujete příkazovou řádku, WP-CLI provede totéž:
wp plugin update sms-alert(příkaz používá název složky,sms-alert). - Pokud se žádná aktualizace neobjeví, můžete získat nejnovější vydání přímo ze stránky pluginu v adresáři WordPress.org, SMS Alert, a aktualizovat přes Pluginy, poté Přidat nový plugin a Nahrát plugin.
- Po aktualizaci potvrďte nové číslo verze (3.9.6 nebo novější) pomocí výše uvedených kroků a zkontrolujte, že vaše oznámení o objednávkách a jakékoli používané procesy OTP stále fungují normálně.
Když už tam budete, vyplatí se ověřit, že jádro WordPressu, WooCommerce a vaše ostatní pluginy jsou aktuální, protože stejný princip platí pro všechny z nich.
Po aktualizaci
Aktualizace na verzi 3.9.6 nebo novější problém uzavírá a pro většinu webů je tím úkol hotový. Tato stránka je preventivním upozorněním, nikoli hlášením o incidentu: nemám žádný přehled o tom, zda se na vašem webu něco stalo, a ani jsem to nekontroloval.
Stojí za zvážení jeden následný krok, který je podmíněn stejnou otázkou o konfiguraci. Pokud měl váš web při běhu na ovlivněné verzi zapnuté ověřování OTP pro obnovení hesla, bylo alespoň teoreticky možné, aby někdo nastavil nové heslo u účtu s uloženým telefonním číslem. Aktualizace uzavírá díru, ale neruší přístup, který již byl případně získán, takže v takovém případě dávají smysl dvě běžné preventivní opatření:
- Zkontrolujte své administrátorské účty a jakékoli další důležité účty, zda neobsahují záznamy, které nepoznáváte, nebo změny rolí, které jste neprovedli.
- Projděte nedávné změny hesel a nedávná přihlášení u účtů, které mají uloženo telefonní číslo, a resetujte jakékoli heslo, u kterého to vypadá, že se změnilo bez žádosti majitele účtu.
Pokud najdete něco, co vás znepokojuje, správnou reakcí je zacházet s tím jako s jakýmkoli
jiným podezřením na neoprávněný přístup: obměňte administrátorská hesla a zvažte regeneraci
tajných klíčů a solí ve WordPressu v souboru wp-config.php, což odhlásí všechny existující
relace. Pokud váš web nikdy neměl zapnuté OTP pro obnovení hesla, stačí samotná aktualizace.
Co jsem udělal a co ne
Pro úplnou transparentnost ohledně kontroly, která stála za mým e-mailem: přečetl jsem pouze
dva veřejné soubory, které váš web už poskytuje každému návštěvníkovi, konkrétně veřejný soubor
readme.txt pluginu a vaši domovskou stránku. Nepřistupoval jsem k administrátorské oblasti
vašeho WordPressu, vaší databázi ani k žádné soukromé části webu. Konkrétně jsem se
nedotkl procesu obnovení hesla, nic jsem do vašeho webu neodeslal a nic jsem netestoval ani
nezneužil.
Rovněž záměrně nezveřejňuji podrobnosti, které by někomu pomohly tento problém zneužít: výše uvedený popis chyby je na úrovni, kterou potřebuje vlastník webu, a nejde dále, a neodkazuji na veřejně dostupný kód proof-of-concept.
Jedná se o pozorování založené na verzi: váš web hlásí verzi v ovlivněném rozsahu. Protože tento problém závisí na konfiguraci, web v tomto rozsahu nemusí být vůbec vystaven riziku (pokud nepoužívá ověřování OTP pro obnovení hesla), a může být také již zmírněn jinými prostředky, jako je webová aplikační brána. Toto upozornění není tvrzením, že váš web byl v době kontroly zneužitelný.
Nemám webmastera / nevím, kudy dál
Pokud nejste osobou, která web spravuje, přepošlete prosím tuto stránku tomu, kdo to dělá (vašemu webovému vývojáři, agentuře nebo poskytovateli hostingu). Rychle rozpozná výše uvedené kroky.
Pokud web spravujete sami a nevíte si rady, rád vám zdarma pomůžu ukázat správný směr. Ozvěte se prostřednictvím kontaktních údajů níže.
Kontakt
Evan Harris, bezpečnostní výzkumník
- E-mail: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
Na podobné problémy upozorňuji čistě proto, abych pomohl provozovatelům zabezpečit jejich weby. Pokud byste si přáli, abych vás už nekontaktoval, stačí mi dát vědět a budu to respektovat.
Odkazy
Oficiální hlášení a sledování
Dodavatel / plugin