Strona firmowa ma więcej drzwi niż formularz logowania. Panel zarządzania, z którego agencja aktualizuje wtyczki, aplikacja sklepu z dostępem do zamówień, token Cloudflare w skrypcie czyszczącym cache, klucz wdrożeniowy na serwerze: każde z nich otwiera stronę bez hasła administratora. W październiku 2026 dwa incydenty pokazały, co się dzieje, gdy taki klucz trafi w złe ręce. Ten poradnik pomoże ci spisać wszystkie dostępy, cofnąć zbędne i wymienić resztę, niezależnie od tego, czy masz WordPressa, WooCommerce, Shopify, czy stronę na własnym kodzie.
Co się stało z UpdraftCentral w październiku 2026
W komunikacie TeamUpdraft firma podaje, że w weekend 17 i 18 października wykryła nieuprawniony dostęp do serwisu teamupdraft.com i uważa, że baza klientów została odczytana. Były w niej imiona i nazwiska, adresy e-mail, zahaszowane hasła, ustawienia dwuskładnikowego logowania oraz klucze połączeń UpdraftCentral, UpdraftVault i UpdraftClone. Danych kart firma nie przechowuje. Napastnik wykorzystał połączenie ze stronami klientów do zakładania kont administratorów i instalowania złośliwych wtyczek, a w kolejnej aktualizacji TeamUpdraft ostrzegł przed nieoczekiwanymi kontami z rolą redaktora. UpdraftPlus 1.26.13 (darmowy) i 2.26.13 (Premium), wydane 19 października, rozłączają każde połączenie UpdraftCentral utworzone przed 18 października, godz. 13:07 czasu brytyjskiego.
Analiza Patchstack wyjaśnia, dlaczego zwykłe zabezpieczenia nie zadziałały. Polecenia były podpisane prawdziwymi kluczami panelu, więc wtyczka uznawała je za poprawne. Podłączona strona wykonuje każde podpisane polecenie z uprawnieniami użytkownika, który utworzył połączenie, i nikt nie zatwierdza poleceń pojedynczo. Wielu właścicieli w ogóle tego nie wybrało: przy łączeniu konta TeamUpdraft.com pole dodające stronę do UpdraftCentral było domyślnie zaznaczone. Klucze nie wygasały, Patchstack widział klucze z listopada 2025 działające w październiku 2026. Konta tylnych drzwi wyglądały jak redaktorzy, ale miały uprawnienia manage_options i install_plugins, więc przegląd listy administratorów ich nie pokazywał.
Kilka dni wcześniej Rank Math poinformował, że wersja PRO 3.0.123 pobrana między 15 października, 20:02 UTC, a 16 października, 07:12 UTC, zawierała złośliwy kod. Czysta wersja to 3.0.124, a darmowa wtyczka z WordPress.org nie była dotknięta. Kto aktywował zainfekowaną wersję, ma założyć, że wszystkie sekrety na stronie wyciekły, i wymienić: hasła WordPressa, dane dostępowe do bazy, klucze i sole w wp-config.php, klucze bramek płatności, dane SMTP, pozostałe klucze API, dostępy do hostingu, FTP i SSH, a także sprawdzić dwuskładnikowe logowanie administratorów. Szerszy obraz takich ataków opisujemy w tekście o atakach na łańcuch dostaw w WordPressie w 2026 roku.
Jak sprawdzić, kto ma dostęp do strony firmowej
Klucze działają w dwie strony. Twoja strona przechowuje klucze do cudzych systemów (płatności, poczta, kopie zapasowe), a cudze systemy przechowują klucze do twojej strony (panele zarządzania, aplikacje, wdrożenia). Lista z Rank Math dotyczy pierwszego kierunku, incydent UpdraftCentral drugiego.
Spis zbierasz z trzech miejsc: z samej strony (użytkownicy, wtyczki lub aplikacje, ustawienia), z kont firmy (faktury, menedżer haseł, skrzynka, na którą przychodzą potwierdzenia rejestracji) i z infrastruktury (DNS, CDN, panel hostingu, repozytorium kodu). Przy każdej pozycji zapisz: usługę, co może zrobić, kto utworzył klucz, gdzie leży klucz po obu stronach, kiedy był ostatnio użyty i kto w firmie za niego odpowiada. Pozycja bez właściciela to pierwszy kandydat do usunięcia.
Panele zarządzania wieloma stronami
UpdraftCentral, ManageWP, MainWP i Jetpack łączą się ze stroną przez komponent zainstalowany w WordPressie: UpdraftPlus zawiera klienta UpdraftCentral, ManageWP używa wtyczki ManageWP Worker, a MainWP wtyczki MainWP Child. Druga połowa danych dostępowych leży na serwerach dostawcy albo na serwerze agencji. Przejrzyj listę wtyczek razem z zakładką wtyczek obowiązkowych (must-use) i zapytaj agencję, z jakich paneli korzysta. Wniosek Patchstack dotyczy każdego produktu tego typu: usunięcie strony z panelu nie wystarcza, bo klucz, który się liczy, jest zapisany na stronie.
Aplikacje sklepu i integracje z dostępem do API
W Shopify otwórz ustawienia, sekcję aplikacji, i kliknij każdą z nich. Według dokumentacji Shopify strona aplikacji pokazuje obszary sklepu, które może odczytywać lub zmieniać, z datą ostatniej aktywności w każdym obszarze. Uprawnienia nieużywane od 30 dni trafiają do osobnej podsekcji nieużywanego dostępu. Uprawnienie read_all_orders rozszerza dostęp poza domyślne okno zamówień z ostatnich 60 dni (zakresy dostępu), więc zapytaj dostawcę, po co mu ono. Zanim odinstalujesz aplikację, wyeksportuj potrzebne dane, bo Shopify ostrzega, że części z nich nie da się potem odzyskać.
W WooCommerce klucze znajdziesz w ustawieniach WooCommerce, w zakładce zaawansowanej, sekcja REST API. Każdy klucz jest przypisany do użytkownika WordPressa i ma uprawnienia do odczytu, zapisu albo obu, a sekret klienta wyświetla się tylko raz (dokumentacja WooCommerce). Sprawdź, do kogo należy każdy klucz i czy ta osoba nadal z tobą pracuje. To samo dotyczy kluczy do Przelewy24, PayU czy hurtowni, wpisanych w ustawieniach wtyczek.
Hasła aplikacji i konta techniczne w WordPressie
Hasła aplikacji pozwalają narzędziu logować się do REST API przez Basic Auth. Tworzysz je i cofasz na ekranie edycji użytkownika. Rdzeń WordPressa nie ogranicza ich zakresu: przewodnik integracji wymienia zawężanie uprawnień jako plan na przyszłość, więc hasło aplikacji może wszystko, co jego użytkownik. WordPress zapisuje ostatnie użycie (z dokładnością do doby) i ostatni adres IP. Z WP-CLI:
wp user list --role=administrator
wp user list --role=editor
wp user application-password list 1 --fields=name,created,last_used,last_ipLista redaktorów jest tu ważna, bo konta tylnych drzwi w sprawie UpdraftCentral miały właśnie tę rolę.
Tokeny CDN i DNS
Token z prawem edycji DNS wystarczy, żeby przekierować domenę albo rekordy poczty. W Cloudflare token API ograniczasz do wybranych uprawnień i stref, a dodatkowo do adresów IP i czasu ważności (tworzenie tokenu). Starszy Global API key ma dostęp do wszystkich zasobów użytkownika z jego pełnymi uprawnieniami i Cloudflare odradza go w nowych wdrożeniach (Global API key). Jeśli wtyczka, skrypt CI albo czyszczenie cache wciąż go używa, zastąp go tokenem dla jednej strefy.
Klucze wdrożeniowe w GitHubie
Klucz wdrożeniowy (deploy key) w GitHubie to klucz SSH z dostępem do jednego repozytorium. Domyślnie tylko do odczytu, a z prawem zapisu może tyle, co członek organizacji z uprawnieniami administratora. Według dokumentacji GitHuba takie klucze nie mają daty wygaśnięcia, zwykle nie mają hasła i pozostają aktywne po usunięciu z repozytorium osoby, która je dodała. Przegląd zrobisz w ustawieniach repozytorium, w sekcji kluczy wdrożeniowych: nieznane usuń, prawidłowe zatwierdź.
Klucze płatności, poczty i kopii zapasowych
Stripe pozwala tworzyć klucze ograniczone z uprawnieniami, które sam wybierasz, a przy wymianie klucza w panelu decydujesz, kiedy wygaśnie stary: od razu albo po czasie, który daje integracji okno na przełączenie (klucze API Stripe). Hasło SMTP albo klucz API dostawcy poczty transakcyjnej leży we wtyczce albo w wp-config.php; gdzie dokładnie, pokazujemy w przewodniku po SMTP, SPF i DKIM.
Kopia zapasowa zawiera pełną bazę z danymi klientów i wszystkimi kluczami zapisanymi w ustawieniach. TeamUpdraft odłączył wszystkie strony od UpdraftVault i wydał nowe dane dostępowe, a stronom, do których wszedł napastnik, zalecił ponowną autoryzację magazynów (Google Drive, Dropbox, Amazon S3) i zmianę kluczy dostępu do nich. Sprawdź, kto może czytać twój magazyn kopii i czy narzędzie do kopii ma prawo kasować stare wersje.
Lista kontrolna dostępów do strony i sklepu
| Typ usługi | Gdzie leży klucz | Jak cofnąć | Kiedy wymienić |
|---|---|---|---|
| Panel zarządzania (UpdraftCentral, ManageWP, MainWP, Jetpack) | Ustawienia wtyczki łączącej na stronie oraz panel dostawcy lub agencji | Najpierw usuń klucz na stronie, potem stronę z panelu | Incydent u dostawcy, zmiana agencji, panel nieużywany |
| Aplikacja Shopify | Uprawnienia aplikacji w ustawieniach sklepu | Wyeksportuj dane, odinstaluj aplikację | Nieużywany dostęp, incydent u dostawcy, aplikacja zbędna |
| Klucz REST API WooCommerce | Ustawienia WooCommerce, przypisany do użytkownika WordPressa | Link cofnięcia przy kluczu | Odejście przypisanego użytkownika, zmiana integracji |
| Hasło aplikacji WordPressa | Profil użytkownika, w bazie jako skrót | Cofnięcie na ekranie użytkownika albo w WP-CLI | Brak użycia od ostatniego audytu, odejście osoby, włamanie |
| Token CDN lub DNS (Cloudflare) | Konto Cloudflare i narzędzie, które wywołuje API | Usunięcie tokenu w profilu Cloudflare | Token w logach lub repozytorium, odejście osoby lub narzędzia |
| Klucz wdrożeniowy (GitHub) | Klucz prywatny na serwerze, publiczny w ustawieniach repozytorium | Usunięcie w sekcji kluczy wdrożeniowych | Przebudowa lub włamanie na serwer, zmiana agencji |
| Klucz płatności (Stripe, Przelewy24, PayU) | Ustawienia wtyczki sklepu lub zmienne środowiskowe | Wymiana z terminem wygaśnięcia starego klucza | Włamanie, koniec współpracy z programistą |
| Klucz poczty lub SMTP | Wtyczka SMTP, wp-config.php, zmienne środowiskowe | Usunięcie klucza u dostawcy poczty | Włamanie, zmiana wtyczki lub dostawcy |
| Dane dostępowe do magazynu kopii | Ustawienia wtyczki kopii i uprawnienia u dostawcy magazynu | Cofnięcie u dostawcy magazynu i ponowna autoryzacja | Incydent u dostawcy, włamanie |
Jak cofnąć klucz API, żeby strona dalej działała
Na zdrowej stronie kolejność jest taka: ustal, co używa klucza (opis, ostatnie użycie, logi narzędzia), utwórz następcę z węższymi uprawnieniami, wpisz go w narzędziu i sprawdź, że działa, a dopiero potem cofnij stary klucz. Przez kilka dni obserwuj nieudane zamówienia, brakujące maile i zepsute wdrożenia. Okno wygaśnięcia w Stripe powstało właśnie po to.
Na stronie po włamaniu kolejność się odwraca: najpierw cofasz, a integracje, które przestaną działać, podłączasz od nowa. Tak wyglądają instrukcje TeamUpdraft dla użytkowników UpdraftCentral: logujesz się do każdej strony bezpośrednio, aktualizujesz, usuwasz klucz połączenia, kasujesz nieznane konta i wtyczki, zmieniasz hasła administratorów i dopiero wtedy łączysz ponownie. Jeśli klucz ma dwa końce, cofnij go na obu. Klucz skasowany tylko w panelu dostawcy strona może nadal akceptować, a klucz skasowany tylko na stronie może dalej leżeć w bazie dostawcy.
Kiedy wymieniać klucze API
Wymieniaj po zdarzeniach, bo sam kalendarz nikogo nie uratował w październiku 2026. Do procedury warto wpisać:
- incydent bezpieczeństwa u dostawcy, który ma klucz do twojej strony albo dostaje od niej klucz,
- złośliwy kod uruchomiony na stronie, czyli wszystko z listy Rank Math powyżej,
- odejście pracownika, freelancera albo agencji z dostępem,
- klucz znaleziony tam, gdzie nie powinien być: w repozytorium, zgłoszeniu, wątku mailowym, na zrzucie ekranu,
- zastąpienie integracji innym narzędziem.
Do tego raz w roku stały przegląd, na którym usuwasz każdy klucz, którego nikt nie umie wyjaśnić. Klucze bez daty wygaśnięcia, jak klucze wdrożeniowe GitHuba albo klucze UpdraftCentral badane przez Patchstack, działają, dopóki ktoś ich nie usunie.
Czego wymagać od agencji i dostawców oprogramowania
Agencja, która utrzymuje stronę, tworzy klucze w twoim imieniu. Od 3 kwietnia 2026 obowiązuje nowelizacja ustawy o krajowym systemie cyberbezpieczeństwa (Dz.U. 2026 poz. 252), której definicja dostawcy usług zarządzanych obejmuje wsparcie i aktywną administrację, także zdalną. Czy twoja agencja podlega ustawie, zależy od progów i sektora, co rozpisujemy w tekście o KSC 2026 i agencjach WordPress. Niezależnie od wyniku te punkty warto mieć w umowie:
- rejestr wszystkich kluczy, tokenów i kont, które agencja tworzy, z celem i właścicielem, przekazywany na żądanie i na koniec współpracy,
- klucze zakładane na twoich kontach tam, gdzie platforma na to pozwala, na przykład token Cloudflare na twoim koncie, ograniczony do twojej strefy, żeby cofnięcie nie zależało od agencji,
- osobny klucz dla każdej strony i każdego narzędzia oraz imienne konta zamiast wspólnego loginu agencji,
- cofnięcie wszystkich dostępów w ustalonej liczbie dni po zakończeniu umowy, potwierdzone na piśmie,
- termin zgłoszenia incydentu. Agencja z dostępem do danych klientów jest zwykle podmiotem przetwarzającym w rozumieniu RODO, więc potrzebujesz umowy powierzenia z art. 28. Według art. 33 RODO podmiot przetwarzający zgłasza naruszenie administratorowi bez zbędnej zwłoki, a ty masz 72 godziny, jeśli to wykonalne, na zgłoszenie do UODO. Wpisz w umowę konkretną liczbę godzin.
Zanim zainstalujesz wtyczkę lub aplikację z funkcjami zdalnymi, zapytaj dostawcę, czy połączenie zdalne jest domyślnie włączone i czy jego klucze wygasają. W przypadku UpdraftCentral Patchstack ustalił, że pole zgody było zaznaczone z góry, a klucze nie miały terminu ważności.
Taki przegląd robimy w ramach audytu bezpieczeństwa WordPress, a rejestr kluczy aktualizujemy przy utrzymaniu stron opartych o WordPress. W sklepach WooCommerce to część planu niezawodności sklepu, a w sklepach Shopify uprawnienia aplikacji przeglądamy przy pracach programisty Shopify. O tym, jak aktualizacje wtyczek trafiają na stronę i gdzie może się wśliznąć podmieniona wersja, piszemy w tekstach o opóźnieniu aktualizacji w WordPress.org i o czterech backdoorach w miesiąc.







