Biuletyn bezpieczeństwa Welcart e-Commerce
Jeśli otrzymali Państwo ode mnie wiadomość e-mail kierującą na tę stronę, to dlatego, że Państwa witryna wygląda na taką, która korzysta z wersji wtyczki Welcart e-Commerce (bezpłatnej wtyczki e-commerce dla WordPressa autorstwa Welcart / Collne, która w Państwa plikach znajduje się w /wp-content/plugins/usc-e-shop/) mieszczącej się w zakresie objętym znanym problemem bezpieczeństwa. Ta strona wyjaśnia, na czym polega problem, jak bardzo jest istotny dla Państwa witryny, jak odczytać swoją wersję, nie dając się zwieść, oraz jak zaktualizować.
Problemem jest CVE-2026-19914, niewymagająca uwierzytelnienia przechowywana podatność typu cross-site scripting (XSS). Dotyczy każdego wydania do wersji 2.12.1 włącznie i została naprawiona w wersji 2.12.2, wydanej 31 sierpnia 2026 roku. Jeśli korzystają Państwo z 2.12.1 lub wcześniejszej, proszę zaktualizować Welcart do 2.12.2 lub nowszej. Problem oceniono na CVSS 7.2 (High) według oceny Wordfence. Nie znam żadnego publicznego kodu wykorzystującego tę podatność.
Nie istnieje żadna wcześniejsza wersja, która byłaby bezpieczna. To nie jest błąd wprowadzony w pewnym momencie historii wtyczki i później naprawiony. Renderowanie bez ucieczki znaków, które stoi za tym problemem, było obecne przez całą historię wtyczki - potwierdziłem, że jest obecne już w wersji 1.7.0 - więc „moja instalacja jest za stara, by być podatna” nie jest tu drogą ucieczki. Jedyne wersje, które nie są podatne, to 2.12.2 i nowsze.
Przede wszystkim kilka słów o tym, czym jest ten problem i w jaki sposób dochodzi do jego wystąpienia, bo wolę to jasno powiedzieć, niż pozwolić, by powiadomienie brzmiało poważniej, niż jest w rzeczywistości. Jest to przechowywana podatność typu cross-site scripting, a skrypt, który może uruchomić, działa w przeglądarce administratora sklepu, a nie w przeglądarce odwiedzającego. Aby do tego doszło, muszą wystąpić dwie odrębne rzeczy naraz: ktoś składający zamówienie jako gość musi podczas finalizacji zakupu przesłać spreparowaną wartość w niestandardowym polu zamówienia, a następnie administrator musi otworzyć to zamówienie na ekranie edycji zamówień w obszarze administracyjnym Państwa WordPressa. Przesłana wartość jest przechowywana wraz z zamówieniem i renderowana na tym ekranie bez ucieczki znaków, więc uruchamia się, gdy zamówienie zostaje wyświetlone.
Państwa wersję Welcarta mogę odczytać z pliku publicznego, ale nie widzę Państwa zamówień, nie widzę, czy któreś zamówienie zawiera spreparowaną wartość, ani nie widzę, czy ktoś rzeczywiście to zrobił w Państwa witrynie. Dlatego to powiadomienie jest ostrzeżeniem zapobiegawczym opartym na numerze Państwa wersji, a nie potwierdzonym ustaleniem dotyczącym Państwa witryny.
Warto też być precyzyjnym co do tego, czym ten problem jest, a czym nie. Cross-site scripting uruchamiający się w sesji administratora to realny problem, który warto naprawić: skrypt działający, gdy administrator jest zalogowany, może działać z uprawnieniami tego administratora tak długo, jak długo strona jest otwarta. Ale sam w sobie nie jest to pełne przejęcie witryny. To nie jest zdalne wykonanie kodu na Państwa serwerze i nie jest to sposób, w jaki nieuwierzytelniony obcy mógłby po prostu przyznać sobie konto administratora. Jest to węższe niż problemy pełnej kompromitacji, o których piszę w innych miejscach, i zależy zarówno od przesłania zamówienia, jak i od otwarcia go przez administratora, więc wolę uczciwie przedstawić skalę, niż zostawić Państwa z bardziej przerażającym wrażeniem, niż wspierają to fakty.
To jest błąd wtyczki, a nie błąd rdzenia WordPressa. W pełni zaktualizowany WordPress nie chroni Państwa, jeśli sama wtyczka Welcart jest w wersji objętej problemem.
Czy ta wiadomość jest wiarygodna?
Tak. To jest wykonane w dobrej wierze powiadomienie o odpowiedzialnym ujawnieniu od niezależnego badacza bezpieczeństwa. Nie proszę o pieniądze, hasła ani dostęp do Państwa witryny i nie próbowałem się do niej włamać, złożyć w niej zamówienia ani niczego wykorzystać.
Jedyne, co zrobiłem, to obejrzałem strony i pliki, które Państwa witryna udostępnia każdemu odwiedzającemu (tak samo, jak publiczna jest Państwa strona główna), i odnotowałem numer wersji publikowany przez wtyczkę. W szczególności nie złożyłem żadnego zamówienia, nie przesłałem niczego przez Państwa proces zakupu, nie zalogowałem się ani nie wysłałem niczego do funkcji, której dotyczy problem. Nic w tej weryfikacji nie dotyka Państwa danych, obszaru administracyjnego, zamówień ani żadnej prywatnej części witryny (więcej szczegółów poniżej w sekcji Co zrobiłem, a czego nie).
Jeśli chcą Państwo sprawdzić, kim jestem, proszę zobaczyć dane kontaktowe na dole tej strony oraz stronę O mnie.
Dlaczego to ważne
Welcart zamienia witrynę WordPress w sklep internetowy i jest najczęściej używaną wtyczką e-commerce dla WordPressa w Japonii. Częścią tego, co robi, jest pobieranie danych klienta podczas finalizacji zakupu, w tym wszelkich niestandardowych pól zamówienia, które sklep dodał w celu zbierania dodatkowych informacji, i przechowywanie ich wraz z zamówieniem, aby personel mógł je później przejrzeć.
W wersjach objętych problemem wartość przesłana do niestandardowego pola zamówienia podczas finalizacji zakupu przez gościa jest przechowywana wraz z zamówieniem, a następnie wyświetlana na ekranie edycji zamówień w obszarze administracyjnym Państwa WordPressa bez ucieczki znaków. Ucieczka znaków to to, co zamienia tekst wyglądający jak znaczniki z powrotem na zwykły tekst do wyświetlenia. Bez niej wartość spreparowana tak, aby zawierała aktywną treść, nie jest wyświetlana jako tekst, lecz uruchamiana przez przeglądarkę tego administratora, który otworzy to zamówienie. Ponieważ gość może złożyć zamówienie bez logowania, osoba dostarczająca tę wartość w ogóle nie potrzebuje konta w Państwa witrynie.
Warunek wstępny, by go jasno wyrazić, bo to część najłatwiejsza do błędnego zrozumienia w obu kierunkach: wymaga to zarówno przesłania spreparowanego zamówienia, jak i otwarcia go przez administratora. Nie uruchamia się na Państwa witrynie sklepowej i nie robi nic zwykłym odwiedzającym. To, co dosięga, to sesja administratora sklepu przeglądającego zamówienia w wp-admin.
Opisuję to na poziomie, którego właściciel witryny potrzebuje, by działać, i nie dalej. Nie publikuję szczegółów, które pozwoliłyby komuś to odtworzyć, i prosiłbym, aby nie próbowali Państwo tego na swojej witrynie ani na czyjejkolwiek. Odczytanie numeru wersji, jak opisano poniżej, mówi Państwu wszystko, czego trzeba, by zdecydować, co robić.
Jeśli mój e-mail przywoływał ten problem, oznacza to, że wersja zgłaszana przez Państwa witrynę to 2.12.1 lub wcześniejsza. Nie testowałem, czy Państwa konkretna witryna jest podatna, i nie widzę Państwa zamówień. Jedyne, co zaobserwowałem, to wersja.
Czy mnie to dotyczy?
Sprowadza się to do jednego pytania: której wersji Welcarta Państwo używają?
Z obszaru administracyjnego WordPressa (źródło rozstrzygające):
- Proszę zalogować się do swojego kokpitu WordPress (zwykle pod
yourdomain.com/wp-admin). - Proszę przejść do Wtyczki, a następnie Zainstalowane wtyczki.
- Proszę znaleźć Welcart e-Commerce, wpis, którego folder to
usc-e-shop, i odnotować wersję wyświetloną pod jego nazwą.
Z publicznego manifestu (bez logowania): proszę otworzyć
yourdomain.com/wp-content/plugins/usc-e-shop/readme.txt
w przeglądarce i przeczytać wiersz Stable tag: blisko początku. Jeśli ten adres zwróci „nie znaleziono”, proszę spróbować README.txt wielkimi literami - niektóre serwery rozróżniają wielkość liter, a kilka pakietów dostarcza plik wielkimi literami.
Ze źródła Państwa strony (bez logowania): proszę wyświetlić źródło swojej strony głównej i poszukać własnego arkusza stylów wtyczki dokładnie pod tą ścieżką:
/wp-content/plugins/usc-e-shop/css/usces_default.css?ver=...
Numer ?ver= dołączony do tego pliku to własna wersja wtyczki i jest to publiczne źródło, które odczytałem. Welcart ładuje ten arkusz stylów na swoich stronach sklepu, więc strona sklepu lub koszyka to wiarygodne miejsce, aby go znaleźć. Wersję proszę odczytywać wyłącznie z usces_default.css: inne pliki wpisane w Państwa stronę niosą własne, zupełnie niepowiązane numery ?ver=, a odczytanie pierwszego napotkanego może pozostawić Państwa z wersją innego oprogramowania. Jeśli w ogóle nie uda się uzyskać czytelnego numeru ze źródła strony, jest to częste i niczego nie oznacza - wtyczki buforujące i optymalizujące rutynowo usuwają wartość ?ver= z adresów URL zasobów - wtedy proszę użyć readme.txt lub ekranu administracyjnego.
Następnie proszę zastosować tę zasadę i pamiętać, że wersje porównuje się liczbowo, a nie alfabetycznie, więc 2.12.1 jest nowsza niż 2.9.1, mimo że „12” jako tekst wygląda mniej niż „9”:
- 2.12.1 lub wcześniejsza: objęta. Proszę zaktualizować do 2.12.2 lub nowszej. Nie ma progu, poniżej którego starsze wydanie znów staje się bezpieczne.
- 2.12.2 lub nowsza: jeśli chodzi o ten problem, już naprawione. Zainstalowanie najnowszej dostępnej wersji to najlepszy krok.
Jak zaktualizować
Wtyczka jest bezpłatna, wciąż publikowana i aktywnie utrzymywana, więc naprawa to zwykła aktualizacja. Najbezpieczniejszą drogą jest aktualizacja przez sam WordPress i wykonanie najpierw kopii zapasowej:
- Proszę wykonać kopię zapasową witryny (plików i bazy danych), zanim wprowadzą Państwo zmiany. Większość dostawców hostingu oferuje kopie zapasowe jednym kliknięciem, lub proszę użyć wtyczki do kopii zapasowych dla WordPressa.
- W administracji WordPressa proszę przejść do Kokpit, a następnie Aktualizacje, lub do Wtyczki, a następnie Zainstalowane wtyczki. Jeśli aktualizacja Welcarta jest wymieniona, proszę zainstalować ją stąd.
- Jeśli wolą Państwo wiersz poleceń, WP-CLI robi to samo:
wp plugin update usc-e-shop(polecenie używa nazwy folderu, a nie nazwy wyświetlanej). - Jeśli żadna aktualizacja się nie pojawi, najnowsze wydanie można pobrać bezpośrednio ze strony wtyczki w katalogu WordPress.org, Welcart e-Commerce, i zaktualizować przez Wtyczki, następnie Dodaj nową wtyczkę, następnie Wyślij wtyczkę na serwer.
- Po aktualizacji proszę potwierdzić nowy numer wersji (2.12.2 lub nowszą) za pomocą powyższych kroków i otworzyć niedawne zamówienie w obszarze administracyjnym, aby upewnić się, że ekrany zamówień nadal wyświetlają się normalnie.
Wydanie 2.12.2 rozwiązało oprócz tego problemu także inne kwestie bezpieczeństwa, więc aktualizacja i tak jest warta wykonania. Przy okazji warto potwierdzić, że rdzeń WordPressa i pozostałe wtyczki są aktualne, ponieważ ta sama zasada dotyczy ich wszystkich.
Po aktualizacji
Aktualizacja do 2.12.2 lub nowszej zamyka problem i dla większości witryn jest to całe zadanie. Ta strona to powiadomienie zapobiegawcze, a nie raport o incydencie: nie mam wglądu w to, czy coś się w Państwa witrynie wydarzyło, i nie sprawdzałem.
Jedną drobną rzecz warto zrobić, póki aktualizacja jest świeża:
- Proszę potwierdzić, że wersja rzeczywiście się zmieniła, tym z powyższych sprawdzeń, które było najprostsze, i otworzyć zamówienie w obszarze administracyjnym, aby upewnić się, że ekrany zamówień nadal się wyświetlają.
Zauważą Państwo, że na tej stronie nie ma listy kontrolnej w stylu „proszę założyć, że zostali Państwo skompromitowani”, i jest to celowe, a nie przeoczenie. To, co ten problem daje, to skrypt działający w przeglądarce administratora, i to tylko tam, gdzie zarówno przesłano spreparowane zamówienie, jak i administrator później je otworzył. Nie wykonuje kodu na Państwa serwerze i sam w sobie nie tworzy konta administratora, więc audyt administratorów i rotacja haseł, które zalecam po błędzie klasy przejęcia, nie byłyby tu proporcjonalne. Proszę zaktualizować, potwierdzić i kontynuować. Jeśli mają Państwo konkretny powód, by sądzić, że wykorzystano to przeciwko Państwa witrynie - na co to powiadomienie, oparte tylko na numerze wersji, nie daje żadnego dowodu - wtedy rozsądne jest traktowanie logowań administratorów ze zwykłą ostrożnością, ale sama wersja tego nie wymaga.
Co zrobiłem, a czego nie
Aby być w pełni przejrzystym co do weryfikacji stojącej za moim e-mailem: czytałem tylko pliki, które Państwa witryna już udostępnia każdemu odwiedzającemu, a konkretnie Państwa stronę główną i wpisany w nią adres arkusza stylów Welcarta oraz publiczny readme.txt wtyczki wewnątrz wp-content/plugins/usc-e-shop/. Nie uzyskałem dostępu do Państwa obszaru administracyjnego WordPress, bazy danych, zamówień ani żadnej prywatnej części witryny.
W szczególności nigdy nie złożyłem zamówienia, nie przesłałem niczego przez Państwa proces zakupu, nie zalogowałem się ani nie wysłałem niczego do funkcji, której dotyczy problem. Nic nie zostało przesłane, przetestowane ani wykorzystane. Ma to tu znaczenie, ponieważ przesłanie spreparowanej wartości podczas finalizacji zakupu jest bardzo bliskie dokładnie tej czynności, której dotyczy ten problem, więc „nie dotknąłem tego” to cała różnica między ujawnieniem a włamaniem.
Celowo także nie publikuję szczegółów, które pomogłyby komuś działać na tym problemie. Powyższy opis zatrzymuje się na poziomie, którego właściciel witryny potrzebuje, i nie odsyłam do żadnego kodu proof-of-concept.
To jest obserwacja oparta na wersji: Państwa witryna zgłasza wersję 2.12.1 lub wcześniejszą. Nie jest to stwierdzenie, że Państwa witryna była podatna w chwili, gdy sprawdzałem. Ponieważ ten problem zależy zarówno od przesłania spreparowanego zamówienia, jak i od otwarcia go przez administratora - rzeczy, których nie widzę - witryna w objętym zakresie mogła wcale nie być narażona, a witryna w tym zakresie może być osobno chroniona innymi środkami, takimi jak zapora aplikacji webowych lub przeniesiona wstecz poprawka. Jeśli już Państwo zaktualizowali lub w inny sposób temu zaradzili, nie jest potrzebne żadne działanie, i przepraszam za zamieszanie.
Nie mam webmastera / utknąłem
Jeśli nie zajmują się Państwo witryną osobiście, proszę przekazać tę stronę osobie, która to robi (deweloperowi, agencji lub firmie hostingowej). Powyższe kroki rozpozna od razu.
Jeśli utrzymują Państwo witrynę samodzielnie i utkną, chętnie bezpłatnie wskażę właściwy kierunek. Proszę napisać, korzystając z danych kontaktowych poniżej.
Kontakt
Evan Harris, badacz bezpieczeństwa
- E-mail: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
Kontaktuję się w takich sprawach wyłącznie po to, by pomóc operatorom zabezpieczyć ich witryny. Jeśli wolą Państwo nie otrzymywać kolejnych wiadomości, proszę dać znać; uszanuję to.
Źródła
Oficjalne komunikaty i śledzenie
Producent / wtyczka