Ako ste od mene primili e-poruku koja upućuje na ovu stranicu, to je zato što se čini da vaše web-mjesto koristi verziju dodatka SMS Alert (WordPress dodatka koji se u popisu dodataka vodi kao “SMS Alert – SMS & OTP for WooCommerce, Order Notifications & Abandoned Cart Recovery”, autora Cozy Vision Technologies, a u vašim datotekama nalazi se na putanji /wp-content/plugins/sms-alert/) koja spada u zahvaćeni raspon poznatog sigurnosnog propusta. Ova stranica objašnjava u čemu je propust, kako uopće utvrditi odnosi li se na vaše web-mjesto te kako se ažurirati. Riječ je o WordPress dodatku u cijelom ovom tekstu.

Prije svega, najvažnija činjenica o ovoj obavijesti: sama činjenica da je vaša verzija u zahvaćenom rasponu ne znači da je vaše web-mjesto izloženo. Propust opisan u nastavku dolazi do izražaja samo ako su istodobno ispunjena dva uvjeta, od kojih nijedan nije vidljiv izvana:

  1. vaše web-mjesto ima uključenu OTP provjeru za ponovno postavljanje lozinke u postavkama dodatka SMS Alert, i
  2. ciljani račun ima pohranjen broj telefona.

Ako SMS Alert koristite samo za obavijesti o narudžbama, poruke o napuštenoj košarici ili OTP prilikom naplate ili registracije, a ne za provjeru kod ponovnog postavljanja lozinke, ovaj propust vrlo vjerojatno ne doseže vaše web-mjesto čak ni na zahvaćenoj verziji. Verziju vašeg dodatka mogu očitati iz javne datoteke, ali ne mogu vidjeti vaše postavke, pa je ova obavijest preventivno upozorenje, a ne potvrđen nalaz o vašem web-mjestu.

Riječ je o propustu CVE-2026-11387, neautenticiranom preuzimanju računa kroz dodatkov postupak ponovnog postavljanja lozinke (CWE-640, slab oporavak lozinke). Zahvaća verzije 3.0.0 do 3.9.5, a ispravljena je u verziji 3.9.6. Ako koristite zahvaćenu verziju, ažurirajte SMS Alert na 3.9.6 ili noviju verziju. Izdanja 3.9.7 i 3.9.8 objavljena su kasnije i ispravljaju druge stvari; oba su, što se ovog propusta tiče, u redu, a trenutačno izdanje jest 3.9.8. Nosi CVSS 9.8, a kôd za dokaz koncepta javno je dostupan, zbog čega pišem i unatoč tome što pitanje o konfiguraciji iznad vrlo lako može ići u vašu korist.

Nekoliko riječi o hitnosti, jer je ova obavijest uvjetna. Ako SMS Alert ne koristite za provjeru kod ponovnog postavljanja lozinke, ažuriranje je uobičajeno održavanje dodatka. Ako ga koristite, ažuriranje shvatite kao prioritet: u toj konfiguraciji propust bi udaljenom posjetitelju bez ikakvog računa mogao omogućiti da postavi novu lozinku bilo kojem korisniku koji ima pohranjen broj telefona, uključujući administratora, čime bi preuzeo kontrolu nad web-mjestom.

Riječ je o propustu dodatka, a ne jezgre WordPressa ili WooCommercea. Potpuno ažuriran WordPress ne štiti vas ako je sam dodatak SMS Alert na zahvaćenoj verziji.

Je li ova poruka vjerodostojna?

Jest. Riječ je o dobronamjernoj obavijesti u duhu odgovornog objavljivanja, od nezavisnog sigurnosnog istraživača. Ne tražim od vas novac, lozinke ni pristup vašem web-mjestu i nisam pokušao u njega provaliti, poslati mu bilo što niti bilo što na njemu iskoristiti.

Pogledao sam samo javno dostupne datoteke koje vaše web-mjesto poslužuje svakom posjetitelju (jednako kao što je vaša naslovnica javna) i zabilježio broj verzije koji dodatak objavljuje u svojoj javnoj datoteci readme.txt. Izričito nisam dirao postupak ponovnog postavljanja lozinke, a ništa u ovoj provjeri ne dira vaše podatke, vašu administraciju ni bilo koji privatni dio vašeg web-mjesta (više u odjeljku Što sam učinio, a što nisam u nastavku).

Ako želite provjeriti tko sam, kontakt podaci nalaze se na dnu ove stranice i na stranici O meni.

Zašto je to važno

SMS Alert šalje SMS i WhatsApp obavijesti za WooCommerce trgovine, a može i staviti jednokratni kod ispred određenih korisničkih radnji. Jedan od postupaka koje na taj način može zaštititi jest ponovno postavljanje lozinke putem poveznice “zaboravili ste lozinku?”: posjetitelj zatraži ponovno postavljanje, dodatak mu SMS-om pošalje jednokratni kod na broj telefona pohranjen uz račun, a nova lozinka smije se postaviti tek nakon što je taj kod ispravno unesen.

U zahvaćenim verzijama korak koji postavlja novu lozinku nije provjeravao je li jednokratni kod doista unesen. Ponovno postavljanje moglo se stoga dovršiti do kraja bez ikada unesenog koda, i to od strane osobe koja nije prijavljena i nema vlastiti račun. Verzija 3.9.6 dodaje tu provjeru koja je nedostajala, pa korak postavljanja lozinke sada odbija pokrenuti se ako izazov s kodom prethodno nije uspješno riješen.

Dvije stvari određuju koliko je ovo važno za pojedino web-mjesto. Prvo, ulazna je točka upravo ta konkretna konfiguracija: dodatak pokreće vlastiti postupak ponovnog postavljanja lozinke samo ondje gdje je administrator uključio OTP provjeru za ponovno postavljanje lozinke, a kod ima što poslati jedino računu koji ima pohranjen broj telefona. Web-mjesto koje tu značajku nikada nije uključilo vrlo vjerojatno uopće nije izloženo, čak ni na zahvaćenoj verziji. Drugo, ondje gdje ta konfiguracija jest uspostavljena, učinak je ozbiljan, a ne marginalan, jer se ništa ne ograničava na račune s niskim ovlastima: metom može postati bilo koji račun s pohranjenim brojem telefona, uključujući administratorske.

Ako je moja e-poruka navela ovaj propust, to znači da verzija koju vaše web-mjesto prijavljuje spada u zahvaćeni raspon. Nisam provjeravao je li baš vaše web-mjesto iskoristivo i ne mogu vidjeti kako su vaše OTP postavke konfigurirane; sve što sam opazio jest da web-mjesto prijavljuje zahvaćenu verziju.

Jesam li zahvaćen?

O tome odlučuju dva pitanja, ovim redoslijedom.

Prvo: koristite li SMS Alert za provjeru kod ponovnog postavljanja lozinke? Ovo je ključno pitanje, a odgovoriti na njega možete samo vi. Provjera vlastitih postavki posve je sigurna i upravo je to smisao ove stranice.

  • U administraciji WordPressa otvorite izbornik SMS Alert i idite na njegove postavke, zatim na odjeljak koji upravlja OTP provjerom. Taj odjeljak navodi postupke ispred kojih možete staviti jednokratni kod. Provjerite je li ponovno postavljanje lozinke (ponekad prikazano kao “izgubljena lozinka” ili “zaboravljena lozinka”) među onima koje ste uključili.
  • Ako nije uključeno, ovaj propust vrlo vjerojatno ne doseže vaše web-mjesto, čak ni na zahvaćenoj verziji. Ažuriranje se ipak preporučuje, kao uobičajeno održavanje.
  • Ako jest uključeno, propust se odnosi na vas i trebali biste žurno ažurirati.

Molimo vas da ne pokušavate reproducirati problem ni na vlastitom ni na tuđem web-mjestu, a to vam nije ni potrebno da biste odgovorili na pitanje iznad: čitanje vlastitih postavki govori vam sve što trebate znati.

Drugo: koju verziju koristite? Ne morate mi vjerovati na riječ, no kod ovog dodatka jedan od očitih načina provjere zavarava, pa ovaj dio vrijedi pažljivo pročitati.

Iz administracije WordPressa (mjerodavan izvor):

  1. Prijavite se u nadzornu ploču WordPressa (obično na yourdomain.com/wp-admin).
  2. Idite na Dodaci, zatim Instalirani dodaci.
  3. Pronađite stavku navedenu kao “SMS Alert – SMS & OTP for WooCommerce …“ (njezina je mapa sms-alert) i pogledajte verziju prikazanu ispod njezina naziva. To je stvarna instalirana verzija.

Iz javnog manifesta (bez potrebe za prijavom): otvorite yourdomain.com/wp-content/plugins/sms-alert/readme.txt u pregledniku. Redak Stable tag: pri vrhu jest verzija koju vaša instalacija prijavljuje, i riječ je o istoj javnoj datoteci koju sam pročitao.

Jedna stvar kojoj ne treba vjerovati: broj uz ?ver= pridodan dodatkovim skriptama i stilskim datotekama na klijentskoj strani u izvornom kodu vaše stranice. SMS Alert te resurse žigosuje prema internoj konstanti koja je barem jednom zaostajala za stvarnim izdanjem: verzija 3.5.0 objavljena je s resursima žigosanim kao 3.4.9. Očitavanje verzije na taj način stoga vam može pokazati izdanje starije od onoga koje zaista koristite, što bi na granici ispravljenu instalaciju 3.9.6 pretvorilo u prividnu 3.9.5. Upravo zato to nisam koristio pri odlučivanju koga kontaktirati, i upravo zato biste svoju verziju trebali procjenjivati prema zaslonu administracije ili retku iz readme.txt.

Zatim primijenite ovo pravilo, imajući na umu da se verzije uspoređuju brojčano, a ne abecedno, pa bi 3.9.10 bila novija od 3.9.9:

  • 3.0.0 do 3.9.5: potencijalno zahvaćeno (ovisno o pitanju o OTP konfiguraciji iznad), ažurirajte odmah.
  • 3.9.6 ili novije: već ispravljeno. To uključuje 3.9.7 i 3.9.8, koja su kasnija izdanja koja rješavaju nepovezana pitanja; trenutačno je izdanje 3.9.8.
  • Starije od 3.0.0: izvan onoga o čemu sam spreman iznositi tvrdnje. Najstarije izdanje koje proizvođač i dalje objavljuje jest 3.0.0, pa nemam način provjeriti ništa ispod toga, a radije neću reći ništa nego optužiti verziju koju ne mogu provjeriti. U praksi je ovaj slučaj hipotetski: najstarija instalacija koju sam ikada vidio jest izdanje iz serije 3.4.x.

Kako se nadograditi

Najsigurniji je put ažurirati se kroz sam WordPress, uz prethodnu sigurnosnu kopiju:

  1. Napravite sigurnosnu kopiju web-mjesta (datoteke i baza podataka) prije bilo kakvih promjena. Većina pružatelja hostinga nudi sigurnosne kopije u jednom kliku, ili upotrijebite dodatak za sigurnosne kopije WordPressa.
  2. U administraciji WordPressa idite na Nadzorna ploča, zatim Ažuriranja, ili na Dodaci, zatim Instalirani dodaci. Ako je navedeno ažuriranje za SMS Alert, instalirajte ga odavde.
  3. Ako vam je draža naredbena linija, WP-CLI radi isto: wp plugin update sms-alert (naredba koristi naziv mape, sms-alert).
  4. Ako se ažuriranje ne pojavi, najnovije izdanje možete preuzeti izravno sa stranice dodatka u katalogu WordPress.org, SMS Alert, i ažurirati preko Dodaci, zatim Dodaj novi dodatak, zatim Prenesi dodatak.
  5. Nakon ažuriranja potvrdite novi broj verzije (3.9.6 ili noviji) prema gornjim koracima i provjerite rade li vaše obavijesti o narudžbama i eventualni OTP postupci koje koristite i dalje ispravno.

Kad ste već tu, vrijedi provjeriti jesu li jezgra WordPressa, WooCommerce i vaši ostali dodaci ažurni, jer isto načelo vrijedi za sve njih.

Nakon ažuriranja

Ažuriranje na verziju 3.9.6 ili noviju zatvara propust, i za većinu je web-mjesta to cijeli zadatak. Ova je stranica preventivna obavijest, a ne izvještaj o incidentu: nemam uvid u to je li se na vašem web-mjestu išta dogodilo i nisam gledao.

Jedan je slijedeći korak vrijedan razmatranja, i uvjetovan je istim pitanjem o konfiguraciji. Ako je vaše web-mjesto imalo uključenu OTP provjeru za ponovno postavljanje lozinke dok je koristilo zahvaćenu verziju, tada je barem teoretski bilo moguće da je netko postavio novu lozinku na računu s pohranjenim brojem telefona. Ažuriranje zatvara propust, ali ne poništava pristup koji je već ostvaren, pa je u tom slučaju razumno poduzeti dvije uobičajene mjere opreza:

  • Pregledajte svoje administratorske račune, i sve druge račune koji su vam važni, tražeći unose koje ne prepoznajete ili promjene uloga koje niste vi napravili.
  • Pregledajte nedavne promjene lozinki i nedavne prijave za račune koji imaju pohranjen broj telefona, i poništite svaku lozinku koja izgleda da je promijenjena bez da je vlasnik računa to zatražio.

Ako pronađete nešto što vas zabrinjava, ispravan je odgovor postupiti kao kod svake druge sumnje na neovlašten pristup: promijenite administratorske lozinke i razmotrite ponovno generiranje tajnih ključeva i „salts” vrijednosti u wp-config.php, čime se odjavljuju sve postojeće sesije. Ako vaše web-mjesto nikada nije imalo uključenu OTP provjeru za ponovno postavljanje lozinke, dovoljno je samo ažuriranje.

Što sam učinio, a što nisam

Radi potpune transparentnosti o provjeri iza moje e-poruke: pročitao sam samo dvije javne datoteke koje vaše web-mjesto već poslužuje svakom posjetitelju, konkretno dodatkovu javnu datoteku readme.txt i vašu naslovnicu. Nisam pristupio vašoj WordPress administraciji, bazi podataka ni bilo kojem privatnom dijelu web-mjesta. Konkretno, nisam dirao postupak ponovnog postavljanja lozinke, nisam ništa poslao vašem web-mjestu i nisam ništa testirao ni iskoristio.

Također namjerno ne objavljujem pojedinosti koje bi nekome pomogle djelovati na temelju ovog propusta: opis iznad staje na razini koja je vlasniku web-mjesta potrebna, i ništa dalje, i ne povezujem javno dostupan kôd za dokaz koncepta.

Ovo je opažanje utemeljeno na verziji: vaše web-mjesto prijavljuje verziju u zahvaćenom rasponu. Budući da ovaj propust ovisi o konfiguraciji, web-mjesto u tom rasponu možda uopće nije izloženo (ako ne koristi OTP provjeru za ponovno postavljanje lozinke), a možda je već ublaženo i drugim sredstvima, primjerice vatrozidom za web-aplikacije. Ova obavijest nije tvrdnja da je vaše web-mjesto u trenutku moje provjere bilo iskoristivo.

Nemam webmastera / zapeo sam

Ako web-mjesto ne održavate vi, proslijedite ovu stranicu osobi koja to čini (vašem programeru, agenciji ili pružatelju hostinga). Gornje će korake brzo prepoznati.

Ako web-mjesto održavate sami i zapnete, rado ću vas besplatno usmjeriti u pravom smjeru. Javite se putem kontakata u nastavku.

Kontakt

Evan Harris, sigurnosni istraživač

Javljam se povodom ovakvih pitanja isključivo kako bih pomogao operaterima da osiguraju svoja web-mjesta. Ako ne želite da vas ponovno kontaktiram, samo mi recite i poštovat ću to.

Izvori

Službene objave i praćenje

Proizvođač / dodatak