Kiedy 17 lipca ogłoszono wp2shell — łańcuch dwóch luk w rdzeniu WordPressa pozwalający przejąć witrynę bez logowania — większość relacji opisała go tak, jak opisuje się każde RCE w popularnym systemie: krytyczne, łatajcie natychmiast, aktywna eksploatacja. To wszystko prawda. Ale w tym jednym przypadku zatrzymanie się na „przejęciu witryny" pomija sedno, bo pomija to, czym WordPress stał się dwa miesiące wcześniej.
20 maja 2026 wyszedł WordPress 7.0. Wśród nowości, o których pisano najwięcej — przeprojektowany panel, nowe bloki — była jedna, która zmieniała naturę systemu głębiej niż cała reszta: do rdzenia WordPressa wbudowano warstwę AI. AI Client, Abilities API i ekran Konektorów, na którym administrator jednym kluczem podłącza witrynę do zewnętrznego dostawcy modelu. Trzy konektory są domyślne, dostępne od razu po instalacji: OpenAI, Anthropic i Google. Do tego dochodzi MCP Adapter, który zamienia funkcje witryny w narzędzia wołalne przez zewnętrzne agenty — Claude Desktop, Cursora, Codex.
Innymi słowy: w maju WordPress — system napędzający, według szacunków, ponad pół miliarda stron — przestał być tylko systemem zarządzania treścią. Stał się bramą, przez którą te strony rozmawiają z modelami AI, i hostem, który wystawia się agentom. A w lipcu w rdzeniu tej samej wersji otworzyła się dziura, która pozwala wejść do środka bez znajomości loginu i hasła. wp2shell nie jest więc historią o przejmowaniu stron. Jest historią o tym, co się dzieje, gdy warstwa AI pół miliarda witryn dostaje w fundamencie drzwi bez zamka.
Co dokładnie zmienił WordPress 7
Żeby zobaczyć wagę tego połączenia, trzeba zrozumieć, czym są konektory — bo to nie jest kolejna wtyczka, lecz element rdzenia.
Przed wersją 7 każda integracja z AI w WordPressie była osobnym rozwiązaniem: wtyczka do generowania tekstów miała własny klucz i własny kod, wtyczka do obsługi klienta — inny. WordPress 7 to ujednolica. Administrator wchodzi w Ustawienia > Konektory, wpisuje raz klucz API do OpenAI, Anthropic albo Google, i od tej chwili każda wtyczka zbudowana na nowym AI Client może z tego połączenia korzystać. Klucz jest skonfigurowany centralnie, przechowywany po stronie witryny, dostępny dla całej warstwy aplikacji. To wygoda, która była celem tej zmiany — skonfiguruj AI raz, używaj wszędzie.
Druga część to Abilities API i MCP Adapter. Abilities API pozwala wtyczkom i motywom rejestrować „zdolności" — dyskretne jednostki pracy, jak pobranie danych, aktualizacja wpisu, uruchomienie diagnostyki. MCP Adapter zamienia te zdolności w narzędzia zgodne z protokołem MCP, które zewnętrzny agent AI może odkryć i wywołać. Efekt: witryna WordPress staje się serwerem, z którym agent — czyjś Claude Desktop, czyjś Cursor — może się połączyć i wykonywać na niej operacje.
Obie te rzeczy są opcjonalne i obie są potężne. I obie zakładają jedno: że dostęp do panelu administracyjnego mają wyłącznie osoby uprawnione. Cała architektura bezpieczeństwa tej warstwy AI opiera się na założeniu, że żeby sięgnąć do konektorów albo zarejestrować zdolność, trzeba być zalogowanym administratorem. wp2shell to założenie unieważnia.
Mechanizm, w skrócie — bo sedno jest gdzie indziej
Sam łańcuch jest elegancki i warto go znać, choć nie on jest tu najważniejszy. Składa się z dwóch luk w rdzeniu. Pierwsza, CVE-2026-63030, to „route confusion" w zbiorczym endpoincie REST API pod adresem /wp-json/batch/v1 — rekurencyjne wywołanie batch pozwala obejść ograniczenia, które normalnie blokują nieuwierzytelniony dostęp. Druga, CVE-2026-60137, to wstrzyknięcie SQL w parametrze author__not_in w klasie WP_Query, czyli w samym sercu mechanizmu, którym WordPress buduje zapytania do bazy. Osobno każda jest ograniczona. Połączone na wersjach 6.9 i nowszych dają nieuwierzytelnione wstrzyknięcie SQL, przez które atakujący tworzy konto administratora, loguje się i wgrywa złośliwą wtyczkę — czyli osiąga zdalne wykonanie kodu. Bez konta, bez wtyczek, bez niestandardowej konfiguracji. Domyślna instalacja wystarczy.
Efektem jest to, co CERT Polska w komunikacie 124/2026 opisał wprost: przejęcie witryny i dostęp administracyjny bez znajomości loginu i hasła. I dopiero teraz, gdy wiemy, że administrator WordPressa 7 trzyma w panelu klucze do modeli AI i może rejestrować serwery MCP, widać, co ten dostęp administracyjny naprawdę otwiera.
Oś pierwsza: przejęcie panelu to przejęcie kluczy do modeli
Zacznijmy od rzeczy najprostszej. Jeśli witryna działa na WordPressie 7.0 i administrator skonfigurował konektor — a robi się to po to, żeby wtyczki AI działały — to w panelu leży aktywny klucz API do OpenAI, Anthropic albo Google. Atakujący, który przez wp2shell uzyskał dostęp administracyjny, uzyskał też dostęp do tego klucza i do skonfigurowanego połączenia.
Konsekwencje są dwie i obie są poważne. Pierwsza to sam klucz — poświadczenie, za które ktoś płaci, i które w cudzych rękach oznacza rachunek za wykorzystanie modelu na koszt ofiary, a często też dostęp do historii i danych powiązanych z kontem u dostawcy. To jest dokładnie logika skarbca, którą opisywaliśmy przy Langflow — platforma AI nie jest celem ataku, jest kluczem do magazynu poświadczeń. Tyle że Langflow to narzędzie dla wąskiej grupy builderów, a WordPress to pół internetu. Ta sama klasa problemu, dwa rzędy wielkości większa powierzchnia.
Druga konsekwencja jest subtelniejsza i groźniejsza. Mając skonfigurowane połączenie, atakujący może wysyłać przez nie własne zapytania do modelu — w imieniu ofiary, z jej infrastruktury, jej kluczem. Jeśli witryna używa AI do generowania treści, obsługi klienta czy moderacji, napastnik wchodzi w ten strumień: może kształtować to, co model produkuje dla odwiedzających, wstrzykiwać własne instrukcje w procesy, które właściciel witryny uważa za zaufane. Przejęcie panelu przestaje być przejęciem strony. Staje się przejęciem tego, co ta strona mówi przez AI.
Oś druga: functions.php to zaproszenie do zbudowania złośliwego MCP
Druga oś jest głębsza i to ona najmocniej wiąże wp2shell z tym, o czym piszemy od miesięcy.
Gdy atakujący ma dostęp administracyjny albo wykonanie kodu, ma też kontrolę nad plikiem functions.php — plikiem motywu, który WordPress wykonuje przy każdym załadowaniu strony. To jest miejsce, w którym można zarejestrować dowolny kod uruchamiany w kontekście witryny. A w WordPressie 7, z Abilities API i MCP Adapterem w ekosystemie, functions.php staje się miejscem, w którym można zarejestrować własny, złośliwy serwer MCP — albo podmienić zachowanie istniejących zdolności.
Zastanówmy się, co to znaczy. Serwer MCP to interfejs, przez który agent AI odkrywa i wywołuje narzędzia. Jeśli atakujący postawi taki serwer we functions.php, to każdy agent, który połączy się z tą witryną — bo właściciel ją wystawił, bo ktoś w firmie używa Claude Desktop albo Cursora do pracy z tą stroną — dostanie zestaw narzędzi i opisów kontrolowanych przez napastnika. A opis narzędzia MCP trafia prosto do kontekstu modelu jako instrukcja. To jest dokładnie wektor, który opisywaliśmy przy SANDWORM_MODE, gdzie robak wpisywał podstawiony serwer MCP do konfiguracji asystentów — z tą różnicą, że tutaj napastnik nie musi nawet dosięgnąć maszyny dewelopera. Serwuje zatruty serwer MCP z zaufanej domeny ofiary, do której agent i tak się łączy.
Skutek jest taki, że wp2shell otwiera drogę do zatruwania kontekstu każdego agenta AI, który wchodzi w interakcję z przejętą witryną — nie przez włamanie do tego agenta, lecz przez kontrolę nad tym, co witryna mu podaje. Zaufana strona staje się kanałem wstrzykiwania instrukcji do modeli, które ją odczytują. A ponieważ mówimy o WordPressie, „zaufana strona" to może być dostawca, partner, źródło, któremu czyjś agent ufa z definicji.
Uczciwie: gdzie te dwie warstwy naprawdę się przecinają
Tu trzeba postawić granicę precyzyjnie, bo inaczej wpis przechyliłby się w stronę, której fakty nie udźwigną — a mocniejszy jest właśnie wtedy, gdy pokazuje dokładnie, gdzie ryzyko jest realne, a gdzie potencjalne.
Pełny łańcuch RCE wp2shell działa na wersjach 6.9.0–6.9.4 oraz 7.0.0–7.0.1. Wbudowane konektory AI pojawiły się w rdzeniu dopiero w 7.0. To znaczy, że pełne spięcie obu osi — „przejęcie bez logowania daje dostęp do konektorów AI i możliwość rejestracji złośliwego MCP w rdzeniu" — zachodzi w czystej postaci na 7.0.0 i 7.0.1. Na gałęzi 6.9 jest zdalne wykonanie kodu, ale infrastruktury konektorów w rdzeniu jeszcze nie ma, więc tam scenariusz AI zależy od doinstalowanych wtyczek, nie od samego rdzenia. To jest wąskie okno wersji — i trzeba to powiedzieć wprost.
Trzeba też dodać, że konektory są opcjonalne: świeża instalacja WordPressa 7 bez wpisanego klucza nie ma czego oddać, a MCP Adapter to wciąż osobna wtyczka, nie element rdzenia. Nie każda witryna 7.0 jest więc bramą do modelu.
Ale dwie rzeczy sprawiają, że to nie jest powód do spokoju, lecz do uwagi. Pierwsza: okno wersji jest wąskie dziś, bo WordPress 7 jest młody — a cały ekosystem właśnie na niego migruje, i każda kolejna witryna, która podłączy konektor, powiększa przecięcie. To jest trajektoria, nie stan. Druga: to jest pierwszy raz, gdy luka w rdzeniu WordPressa jest jednocześnie luką w warstwie AI — i pokazuje wzorzec, który będzie wracał, bo warstwa AI właśnie weszła do fundamentu systemu napędzającego pół sieci. wp2shell zostanie załatany. Architektura, w której przejęcie CMS-a oznacza przejęcie bramy do modeli, zostaje.
Polski kontekst i zawiedziona siatka bezpieczeństwa
CERT Polska potraktował sprawę z pełną powagą — komunikat 124/2026 z 18 lipca zapowiadał masowe wykorzystanie „w najbliższych godzinach" i rekomendował natychmiastową aktualizację, a jako doraźne zabezpieczenie: zablokowanie dostępu do /wp-json/batch/v1 na poziomie WAF. To jest właściwa, pilna reakcja.
Jest w tym komunikacie jednak zdanie, które warto wyciągnąć osobno, bo dotyczy czegoś więcej niż jednej luki. WordPress.org, ze względu na wagę problemu, uruchomił wymuszoną automatyczną aktualizację — nadzwyczajny krok, którym rdzeń sam łata podatne instalacje. A mimo to CERT ostrzega wprost: „Znane są liczne przypadki, gdzie wymuszona aktualizacja nie zadziałała". Potwierdzają to niezależnie kolejne zespoły, powtarzając ten sam refren — nie zakładaj, że automatyczna aktualizacja dotarła; sprawdź faktycznie zainstalowaną wersję.
To jest lekcja, która wykracza poza wp2shell. Mechanizm automatycznej aktualizacji jest siatką bezpieczeństwa całego ekosystemu WordPressa — tym, co pozwala pół miliarda stron, w większości bez administratora patrzącego na nie codziennie, pozostawać w miarę bezpiecznymi. Gdy ta siatka zawodzi masowo i cicho, powstaje najgorszy z możliwych stanów: administrator jest przekonany, że rdzeń załatał się sam, podczas gdy jego witryna — z kluczami do modeli w panelu — wciąż stoi otworem. Fałszywa pewność jest tu groźniejsza niż świadomy brak łaty, bo świadomy brak skłania do działania, a fałszywa pewność usypia.
Co z tego wynika dla obrońcy
Pierwsza rzecz jest natychmiastowa: nie ufaj, że automatyczna aktualizacja zadziałała — sprawdź faktyczną wersję na każdej witrynie, także na tych zapomnianych, testowych i archiwalnych. Docelowe wersje to 6.8.6, 6.9.5 i 7.0.2 lub nowsze. Jeśli natychmiastowa aktualizacja jest niemożliwa, zablokuj /wp-json/batch/v1 oraz parametr rest_route=/batch/v1 na WAF, pamiętając, że blokada REST API może zakłócić działanie serwisu.
Druga wynika wprost z warstwy AI i jest nowa. Jeśli twoja witryna działa na WordPressie 7 i ma skonfigurowany konektor, potraktuj klucze API do dostawców modeli jak poświadczenia, które mogły wyciec — i rotuj je, jeśli witryna działała w podatnej wersji w oknie eksploatacji. Przejrzyj functions.php i aktywne motywy pod kątem nieznanego kodu rejestrującego zdolności albo serwery MCP. Sprawdź, czy w panelu nie pojawiły się nieoczekiwane konta administratorów — to pierwszy krok łańcucha wp2shell.
Trzecia jest architektoniczna i to ona jest trwałą lekcją. Warstwa AI, którą WordPress 7 wniósł do rdzenia, dziedziczy model bezpieczeństwa panelu administracyjnego — a ten model zakłada, że do panelu wchodzą tylko uprawnieni. wp2shell pokazuje, że to założenie bywa fałszywe, a gdy jest fałszywe, upada razem z nim całe bezpieczeństwo konektorów i MCP. Klucze do modeli i możliwość rejestrowania narzędzi dla agentów nie powinny być chronione wyłącznie tym samym loginem, który chroni edycję wpisów. To są poświadczenia i zdolności o innej wadze i zasługują na osobną warstwę ochrony — oddzielne przechowywanie kluczy, ograniczenie, kto i skąd może konfigurować konektory, monitorowanie rejestracji nowych zdolności. Dopóki brama do modeli jest chroniona tak samo jak edytor tekstu, każda luka w panelu jest luką w warstwie AI.
Jedna myśl na koniec
Przez lata powtarzano, że WordPress jest bezpieczny na tyle, na ile bezpieczne są jego wtyczki — bo rdzeń jest twardy, a dziury siedzą w tym, co doinstalowane. wp2shell przełamuje to podwójnie: luka jest w samym rdzeniu, i trafia w wersję, w której rdzeń przestał być tylko systemem treści, a stał się bramą do modeli AI. To zmienia stawkę przejęcia. Kiedyś przejęta strona WordPress oznaczała podmienioną treść, spam, przekierowania — szkodę realną, ale ograniczoną do tej jednej witryny. Dziś przejęta strona na WordPressie 7 z konektorem oznacza cudze klucze do modeli, prompty wysyłane w imieniu ofiary i możliwość zatrucia każdego agenta, który tej witrynie zaufa. System operacyjny stron internetowych dorobił się warstwy AI — i wraz z nią odziedziczył całkiem nową klasę tego, co można stracić, gdy ktoś wejdzie bez pukania.
Źródła
CERT Polska — komunikat 124/2026 o krytycznej podatności w WordPress Core, z zakresem podatnych wersji, rekomendacją natychmiastowej aktualizacji, informacją o wymuszonej aktualizacji i ostrzeżeniem o licznych przypadkach jej niezadziałania: https://moje.cert.pl/komunikaty/2026/124/krytyczna-podatnosc-w-wordpress-core-zdalne-wykonanie-kodu-bez-uwierzytelniania/
Tenable — techniczne FAQ o wp2shell, z opisem obu luk (route confusion w batch endpoincie i SQL injection w author__not_in), warunków łańcucha RCE i potwierdzeniem aktywnej eksploatacji: https://www.tenable.com/blog/wp2shell-cve-2026-63030-cve-2026-60137-frequently-asked-questions-about-remote-code-execution
InfoQ — opis WordPress 7.0 z wbudowaną infrastrukturą AI: AI Client, Abilities API, hub Konektorów z uwierzytelnianiem dostawców oraz MCP Adapter pozwalający agentom czytać i pisać do witryn: https://www.infoq.com/news/2026/07/wordpress-7-ai/
GreenGeeks — szczegółowy przegląd zmian w WordPress 7.0, w tym trzech domyślnych konektorów (OpenAI, Anthropic, Google) i mechanizmu jednorazowej konfiguracji klucza dostępnego dla wszystkich wtyczek: https://www.greengeeks.com/blog/whats-new-in-wordpress-7-0/
Rapid7 — analiza wp2shell z opisem łańcucha od nieuwierzytelnionego SQL injection przez utworzenie konta administratora do wgrania złośliwej wtyczki i wykonania kodu: https://www.rapid7.com/blog/post/etr-cve-2026-63030-wp2shell-a-critical-remote-code-execution-vulnerability-in-wordpress-core/
















































































































































































































Nie nowy atak, tylko naprawiony błąd. Co łatka Gemini CLI mówi o tym, że tryb –yolo w potoku CI/CD to nie jest dobry pomysł