Sigurnosna obavijest za Welcart e-Commerce
Ako ste od mene primili e-poštu koja vas upućuje na ovu stranicu, to je zato što se čini da vaše web-mjesto koristi verziju dodatka Welcart e-Commerce (besplatni WordPress dodatak za e-trgovinu tvrtke Welcart / Collne, koji se u vašim datotekama nalazi u /wp-content/plugins/usc-e-shop/) koja spada u raspon zahvaćen poznatim sigurnosnim problemom. Ova stranica objašnjava o kojem se problemu radi, koliko je važan za vaše web-mjesto, kako pročitati svoju verziju a da vas se ne zavede i kako ažurirati.
Riječ je o CVE-2026-19914, neautenticiranoj pohranjenoj ranjivosti tipa cross-site scripting (XSS). Zahvaća svako izdanje do uključivo 2.12.1 i ispravljena je u verziji 2.12.2, objavljenoj 31. kolovoza 2026. Ako koristite 2.12.1 ili stariju, ažurirajte Welcart na 2.12.2 ili noviju. Problem je ocijenjen kao CVSS 7.2 (High), prema ocjeni tvrtke Wordfence. Nije mi poznat nikakav javni exploit kôd za njega.
Ne postoji nijedna starija verzija koja bi bila sigurna. Nije riječ o propustu koji je uveden negdje tijekom povijesti dodatka i kasnije ispravljen. Iscrtavanje bez escapea koje stoji iza ovog problema bilo je prisutno kroz cijelu povijest dodatka - potvrdio sam da je prisutno već u verziji 1.7.0 - pa „moja je instalacija prestara da bi bila zahvaćena” ovdje nije izlaz. Jedine verzije koje nisu zahvaćene jesu 2.12.2 i novije.
Prije svega, nekoliko riječi o tome što je ovaj problem i kako do njega dolazi, jer to radije jasno navodim nego da pustim da obavijest zvuči veće nego što jest. Riječ je o pohranjenoj ranjivosti tipa cross-site scripting, a skripta koju može pokrenuti izvršava se u pregledniku administratora trgovine, a ne u pregledniku posjetitelja. Da bi se to dogodilo, moraju se dogoditi dvije zasebne stvari zajedno: netko tko naručuje kao gost mora tijekom naplate poslati zlonamjerno oblikovanu vrijednost u prilagođeno polje narudžbe, a zatim administrator mora otvoriti tu narudžbu na zaslonu za uređivanje narudžbi u administracijskom području vašeg WordPressa. Poslana se vrijednost pohranjuje uz narudžbu i na tom se zaslonu iscrtava bez escapea, pa se izvršava kad se narudžba pregleda.
Vašu verziju Welcarta mogu pročitati iz javne datoteke, ali ne mogu vidjeti vaše narudžbe, ne mogu vidjeti sadrži li neka narudžba zlonamjerno oblikovanu vrijednost i ne mogu vidjeti je li netko to doista učinio na vašem web-mjestu. Stoga je ova obavijest preventivna obavijest temeljena na broju vaše verzije, a ne potvrđen nalaz o vašem web-mjestu.
Vrijedi također biti precizan o tome što ovaj problem jest, a što nije. Cross-site scripting koji se pokreće u sesiji administratora stvaran je problem koji vrijedi ispraviti: skripta koja se izvršava dok je administrator prijavljen može djelovati s ovlastima tog administratora sve dok je stranica otvorena. No sam po sebi to nije potpuno preuzimanje web-mjesta. Nije udaljeno izvršavanje koda na vašem poslužitelju i nije način da si neautenticirani stranac jednostavno dodijeli administratorski račun. Uže je od problema potpune kompromitacije o kojima pišem drugdje i ovisi i o slanju narudžbe i o tome da je administrator otvori, pa radije opseg iznosim iskreno nego da vas ostavim sa strašnijim dojmom nego što činjenice podupiru.
Ovo je propust dodatka, a ne propust jezgre WordPressa. Potpuno ažuriran WordPress vas ne štiti ako je sam dodatak Welcart u zahvaćenoj verziji.
Je li ova poruka vjerodostojna?
Da. Ovo je dobronamjerna obavijest o odgovornom otkrivanju od nezavisnog sigurnosnog istraživača. Ne tražim od vas novac, lozinke ni pristup vašem web-mjestu i nisam pokušao provaliti u njega, naručiti na njemu niti bilo što iskoristiti.
Sve što sam učinio jest da sam pogledao stranice i datoteke koje vaše web-mjesto pruža svakom posjetitelju (na isti način na koji je vaša početna stranica javna) i zabilježio broj verzije koji dodatak objavljuje. Konkretno, nisam naručio, nisam ništa poslao kroz vašu naplatu, nisam se prijavio niti poslao išta zahvaćenoj funkciji. Ništa u ovoj provjeri ne dotiče vaše podatke, vaše administracijsko područje, vaše narudžbe ni bilo koji privatni dio vašeg web-mjesta (više pojedinosti u nastavku pod Što sam učinio, a što nisam).
Ako želite provjeriti tko sam, pogledajte kontaktne podatke na dnu ove stranice i stranicu O meni.
Zašto je to važno
Welcart pretvara WordPress web-mjesto u internetsku trgovinu i najrašireniji je dodatak za e-trgovinu za WordPress u Japanu. Dio onoga što radi jest da tijekom naplate preuzima podatke kupca, uključujući sva prilagođena polja narudžbe koja je trgovina dodala za prikupljanje dodatnih informacija, i pohranjuje ih uz narudžbu kako bi ih osoblje moglo kasnije pregledati.
U zahvaćenim verzijama vrijednost poslana u prilagođeno polje narudžbe tijekom gostujuće naplate pohranjuje se uz narudžbu i zatim se prikazuje na zaslonu za uređivanje narudžbi u administracijskom području vašeg WordPressa bez escapea. Escape je ono što tekst koji izgleda kao oznake vraća u obični tekst za prikaz. Bez njega vrijednost oblikovana tako da sadrži aktivni sadržaj ne prikazuje se kao tekst, nego je izvršava preglednik onog administratora koji otvori tu narudžbu. Budući da gost može naručiti bez prijave, osoba koja daje tu vrijednost uopće ne treba račun na vašem web-mjestu.
Preduvjet, da ga jasno navedem jer je to dio koji se najlakše pogrešno shvati u oba smjera: za ovo je potrebno i da je poslana zlonamjerno oblikovana narudžba i da je administrator otvori. Ne pokreće se na vašem izlogu i ne čini ništa običnim posjetiteljima. Ono što doseže jest sesija administratora trgovine koji pregledava narudžbe u wp-adminu.
Opisujem to na razini koja je vlasniku web-mjesta potrebna da bi djelovao, i ne dalje. Ne objavljujem pojedinosti koje bi nekome omogućile da to reproducira i zamolio bih vas da to ne pokušavate na svojem web-mjestu ni na bilo čijem. Čitanje broja vaše verzije, kako je opisano u nastavku, govori vam sve što trebate da odlučite što učiniti.
Ako je moja e-pošta navela ovaj problem, to znači da je verzija koju vaše web-mjesto prijavljuje 2.12.1 ili starija. Nisam testirao je li vaše konkretno web-mjesto iskoristivo i ne mogu vidjeti vaše narudžbe. Sve što sam promatrao jest verzija.
Jesam li zahvaćen?
Sve se svodi na jedno pitanje: koju verziju Welcarta koristite?
Iz administracijskog područja WordPressa (mjerodavno):
- Prijavite se na svoju WordPress nadzornu ploču (obično na
yourdomain.com/wp-admin). - Idite na Dodaci pa Instalirani dodaci.
- Pronađite Welcart e-Commerce, stavku čija je mapa
usc-e-shop, i zabilježite verziju prikazanu ispod njezina naziva.
Iz javnog manifesta (bez prijave): otvorite
yourdomain.com/wp-content/plugins/usc-e-shop/readme.txt
u pregledniku i pročitajte redak Stable tag: blizu vrha. Ako ta adresa vrati „nije pronađeno”, pokušajte README.txt velikim slovima - neki poslužitelji razlikuju velika i mala slova, a neki paketi isporučuju datoteku velikim slovima.
Iz izvornog koda vaše stranice (bez prijave): pogledajte izvorni kôd svoje početne stranice i potražite vlastiti stilski predložak dodatka točno na ovoj putanji:
/wp-content/plugins/usc-e-shop/css/usces_default.css?ver=...
Broj ?ver= pridružen toj datoteci vlastita je verzija dodatka i to je javni izvor koji sam pročitao. Welcart učitava taj stilski predložak na svojim stranicama trgovine, pa je stranica trgovine ili košarice pouzdano mjesto za pronaći ga. Verziju čitajte samo iz usces_default.css: druge datoteke upisane u vašu stranicu nose vlastite, potpuno nepovezane brojeve ?ver=, a čitanje prvog na koji naiđete može vas ostaviti s verzijom drugog softvera. Ako iz izvornog koda stranice uopće ne možete dobiti čitljiv broj, to je uobičajeno i nije znak ničega - dodaci za predmemoriju i optimizaciju redovito uklanjaju vrijednost ?ver= iz URL-ova resursa - pa upotrijebite readme.txt ili administracijski zaslon.
Zatim primijenite ovo pravilo i imajte na umu da se verzije uspoređuju brojčano, a ne abecedno, pa je 2.12.1 novija od 2.9.1 iako „12” kao tekst izgleda manje od „9”:
- 2.12.1 ili starija: zahvaćeno. Ažurirajte na 2.12.2 ili noviju. Ne postoji granica ispod koje starije izdanje ponovno postaje sigurno.
- 2.12.2 ili novija: što se tiče ovog problema, već ispravljeno. Instaliranje najnovije dostupne verzije najbolji je potez.
Kako se nadograditi
Dodatak je besplatan, i dalje se objavljuje i aktivno se održava, pa je ispravak uobičajeno ažuriranje. Najsigurniji je put ažurirati kroz sam WordPress i prethodno napraviti sigurnosnu kopiju:
- Napravite sigurnosnu kopiju svojeg web-mjesta (datoteke i baze podataka) prije nego što unesete promjene. Većina pružatelja usluga smještaja nudi sigurnosne kopije jednim klikom, ili upotrijebite WordPress dodatak za sigurnosne kopije.
- U administraciji WordPressa idite na Nadzorna ploča pa Ažuriranja, ili na Dodaci pa Instalirani dodaci. Ako je ažuriranje Welcarta navedeno, instalirajte ga odavde.
- Ako preferirate naredbeni redak, WP-CLI radi isto:
wp plugin update usc-e-shop(naredba koristi naziv mape, a ne prikazani naziv). - Ako se nijedno ažuriranje ne pojavi, najnovije izdanje možete dobiti izravno sa stranice dodatka u WordPress.org katalogu, Welcart e-Commerce, i ažurirati putem Dodaci pa Dodaj novi dodatak pa Prenesi dodatak.
- Nakon ažuriranja potvrdite novi broj verzije (2.12.2 ili noviju) pomoću gornjih koraka i otvorite nedavnu narudžbu u svojem administracijskom području kako biste provjerili prikazuju li se zasloni narudžbi i dalje normalno.
Izdanje 2.12.2 osim ovog problema riješilo je i druge sigurnosne probleme, pa se ažuriranje svakako isplati. Dok ste već tu, vrijedi potvrditi da su jezgra WordPressa i vaši ostali dodaci ažurni, jer isto načelo vrijedi za sve njih.
Nakon ažuriranja
Ažuriranje na 2.12.2 ili noviju zatvara problem i za većinu web-mjesta to je cijeli zadatak. Ova je stranica preventivna obavijest, a ne izvješće o incidentu: nemam uvid u to je li se na vašem web-mjestu nešto dogodilo i nisam gledao.
Jednu malu stvar vrijedi učiniti dok je ažuriranje svježe:
- Potvrdite da se verzija doista promijenila, onom od gornjih provjera koja je bila najjednostavnija, i otvorite narudžbu u svojem administracijskom području kako biste provjerili prikazuju li se zasloni narudžbi i dalje.
Primijetit ćete da na ovoj stranici nema popisa za provjeru u stilu „pretpostavite da ste kompromitirani”, i to je namjerno, a ne propust. Ono što ovaj problem donosi jest skripta koja se izvršava u pregledniku administratora, i to samo ondje gdje je i poslana zlonamjerno oblikovana narudžba i administrator ju je kasnije otvorio. Ne izvršava kôd na vašem poslužitelju i sam po sebi ne stvara administratorski račun, pa revizija administratora i rotacija lozinki koje preporučujem nakon propusta klase preuzimanja ovdje ne bi bile razmjerne. Ažurirajte, potvrdite i nastavite. Ako imate konkretan razlog vjerovati da je ovo iskorišteno protiv vašeg web-mjesta - za što vam ova obavijest, temeljena samo na broju verzije, ne daje nikakav dokaz - tada je razumno prema prijavama vaših administratora postupati s uobičajenim oprezom, ali sama verzija to ne zahtijeva.
Što sam učinio, a što nisam
Da budem posve transparentan o provjeri iza svoje e-pošte: čitao sam samo datoteke koje vaše web-mjesto već pruža svakom posjetitelju, konkretno vašu početnu stranicu i adresu Welcartova stilskog predloška upisanu u nju te javni readme.txt dodatka unutar wp-content/plugins/usc-e-shop/. Nisam pristupio vašem WordPress administracijskom području, vašoj bazi podataka, vašim narudžbama ni bilo kojem privatnom dijelu web-mjesta.
Konkretno, nikada nisam naručio, poslao išta kroz vašu naplatu, prijavio se niti poslao išta zahvaćenoj funkciji. Ništa nije poslano, testirano ni iskorišteno. To je ovdje važno jer je slanje zlonamjerno oblikovane vrijednosti tijekom naplate vrlo blizu upravo one radnje koje se ovaj problem tiče, pa je „nisam ga dirao” cijela razlika između otkrivanja i upada.
Također namjerno ne objavljujem pojedinosti koje bi nekome pomogle da djeluje na ovom problemu. Gornji opis staje na razini koja je vlasniku web-mjesta potrebna i ne povezujem nikakav proof-of-concept kôd.
Ovo je opažanje temeljeno na verziji: vaše web-mjesto prijavljuje verziju 2.12.1 ili stariju. Nije tvrdnja da je vaše web-mjesto bilo iskoristivo u trenutku kad sam provjerio. Budući da ovaj problem ovisi i o slanju zlonamjerno oblikovane narudžbe i o tome da je administrator otvori - stvari koje ne mogu vidjeti - web-mjesto u zahvaćenom rasponu možda uopće nije bilo izloženo, a web-mjesto u tom rasponu može biti zasebno zaštićeno drugim sredstvima kao što su vatrozid za web-aplikacije ili unatrag prenesen ispravak. Ako ste već ažurirali ili ovo drukčije riješili, nije potrebna nikakva radnja, i ispričavam se na smetnji.
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č
- E-pošta: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
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