Krótko: Bezpieczeństwo Craft CMS zależy po PHP2Shell od PHP serwera, a nie od Craft. Zwłaszcza agencje z wieloma stronami Craft powinny teraz sprawdzić każdy serwer z osobna. Po poprawce i restarcie należy skontrolować .env, Security Key, devMode, katalog główny dokumentów oraz porównanie Project Config.
Co PHP2Shell oznacza dla stron Craft
Craft CMS jest lubiany w agencjach, ponieważ oferuje elastyczne modele treści i czyste szablony. Odpowiednio wiele agencji prowadzi dziesiątki stron Craft na różnych serwerach i w różnych pakietach hostingowych. Luki PHP CVE-2026-109618 i CVE-2026-109619 umożliwiają według zespołu PHP zdalne wykonanie złośliwego kodu bez logowania, niezależnie od wersji Craft.
Dla agencji najważniejsze pytanie ma więc charakter organizacyjny: która strona działa gdzie, na jakim PHP i kto odpowiada za aktualizację? Pierwszym krokiem jest lista wszystkich instalacji z firmą hostingową, stanem PHP i osobą kontaktową. Jak wspieramy w tym agencje, opisuje artykuł Partner bezpieczeństwa dla agencji.
Bezpieczeństwo Craft CMS: sprawdzanie wersji PHP
W panelu sterowania Narzędzia > Raport systemu pokazuje wersję PHP, bazę danych i zainstalowane wtyczki. Jest to wersja, na której strona działa w sieci. Konsola Craft php craft, przetwarzanie kolejki i zadania cron korzystają natomiast z PHP wiersza poleceń. Oba muszą być załatane.
Naprawione wersje upstream to 8.5.12, 8.4.27, 8.3.36 i 8.2.35. Wiele firm hostingowych wprowadza poprawki jako backport; numer pozostaje wtedy ten sam. Które wersje są dotknięte, pokazuje artykuł Które wersje PHP są dotknięte?. To, które wersje PHP obsługuje Państwa wersja Craft, można sprawdzić w wymaganiach systemowych w dokumentacji na craftcms.com.
Craft przetwarza zadania w tle w kolejce. Jeśli działa ona jako stały proces pod menedżerem procesów, ten również musi zostać zrestartowany po aktualizacji PHP.
Katalogi i konfiguracja w Craft
| Miejsce | Zawartość | Punkt kontroli |
|---|---|---|
.env |
Dane dostępowe do bazy danych, CRAFT_SECURITY_KEY, inne klucze |
Po podejrzeniu odnowić wartości |
config/general.php |
devMode, allowAdminChanges, ścieżka do panelu sterowania |
Dopisany kod PHP |
config/project/ |
Project Config jako YAML | Porównanie z Git |
web/ |
Katalog główny dokumentów z index.php, cpresources/, często pliki przesłane |
Dodatkowe pliki PHP |
storage/ |
Logi, pliki czasu wykonania, często kopie zapasowe bazy danych | Niedostępne przez sieć |
templates/ |
Szablony Twig | Obcy JavaScript |
modules/, vendor/ |
Własne moduły i wtyczki | Zmienione pliki, composer audit |
Często pomijanym punktem jest storage/backups/. Craft zapisuje tam kopie zapasowe bazy danych, które mogą zawierać pełne dane klientów i formularzy. Ten folder nie może nigdy leżeć poniżej katalogu głównego dokumentów.
Bezpieczne kontrole w wierszu poleceń:
# Wyświetlenie różnic między Project Config a bazą danych
php craft project-config/diff
# Pliki PHP w katalogu głównym dokumentów poza index.php
find web -type f -name "*.php" ! -name "index.php"
composer audit
W produkcji devMode musi mieć wartość false. Przy włączonym devMode Craft pokazuje szczegółowe komunikaty o błędach ze ścieżkami i fragmentami kodu, które ułatwiają pracę atakującym.
Panel sterowania, użytkownicy i wtyczki
Panel sterowania znajduje się domyślnie pod /admin. Proszę sprawdzić, którzy użytkownicy mają prawa administratora, i usunąć dostępy byłych pracowników oraz freelancerów. Craft obsługuje uwierzytelnianie dwuskładnikowe; proszę z niego korzystać dla wszystkich kont z podwyższonymi uprawnieniami.
W produkcji proszę ustawić allowAdminChanges na false. Wtedy pola, sekcje i ustawienia wtyczek można zmieniać tylko przez wersjonowaną Project Config, a każde odstępstwo rzuca się w oczy przy porównaniu z Git. Wtyczki z Plugin Store wnoszą własny kod PHP; proszę sprawdzić, czy wszystkie są nadal utrzymywane i pasują do docelowej wersji PHP.
// config/general.php, fragment dla środowiska produkcyjnego
'devMode' => false,
'allowAdminChanges' => false,
Co potrafi aktualizacja Craft, a czego nie
Aktualizacja Craft lub wtyczki zamyka błędy w tym kodzie i może umożliwić nowsze wersje PHP. Nie łata PHP, nie restartuje ani PHP-FPM, ani kolejki, nie odnawia wyciekłego Security Key i nie usuwa obcych plików z web/ ani storage/.
Dla agencji z wieloma instalacjami Craft liczy się po poprawce przede wszystkim powtarzalność. Proszę zapisać dla każdej strony, jaka wersja PHP działa w sieci i w wierszu poleceń, kiedy potwierdzono restart i czy kontrole wykazały nieprawidłowości. To zestawienie pomaga przy pytaniach klientów i przy przyszłych komunikatach. Proszę pamiętać także o publicznie dostępnych środowiskach stagingowych i deweloperskich. Działają one często z devMode, starszymi wersjami i prawdziwymi danymi klientów i przy aktualizacjach chętnie się je pomija. Jeśli są wątpliwości, czy strona klienta jest dotknięta, proszę poinformować klienta rzeczowo, zamiast czekać.
Jak konkretnie pomaga PHP SOS?
- Wspólnie z Państwem rejestrujemy wszystkie instalacje Craft wraz z firmą hostingową, stanem PHP i odpowiedzialnością.
- Prosimy o potwierdzenie poprawki i restartu dla każdego serwera i zabezpieczamy logi od 20.10.2026.
- Sprawdzamy katalog główny dokumentów,
storage, konfigurację, użytkowników i porównanie Project Config. - Na życzenie przejmujemy bieżącą opiekę nad bezpieczeństwem stron Państwa klientów w ramach umowy serwisowej bezpieczeństwa, także pod Państwa nazwą.
Częste pytania
Czy Craft CMS jest dotknięty przez PHP2Shell?
Sam Craft CMS nie ma nowej luki. Działa jednak na PHP, a PHP2Shell tkwi w PHP. Każda instalacja Craft na niezałatanym serwerze jest więc potencjalnie podatna na atak, niezależnie od wersji Craft.
Gdzie Craft pokazuje wersję PHP?
W panelu sterowania w Narzędzia > Raport systemu. Znajdują się tam wersja PHP, baza danych i zainstalowane wtyczki. Wprowadzonego backportu nie da się rozpoznać po numerze; potwierdza to Państwa firma hostingowa.
Czym jest Security Key w Craft i dlaczego go odnawiać?
Security Key z pliku .env służy do podpisywania i szyfrowania danych. Kto go zna, może w pewnych okolicznościach fałszować sesje lub dane formularzy. W razie podejrzenia należy go odnowić w uzgodnieniu z Państwa agencją.
Co daje allowAdminChanges ustawione na false?
Pola, sekcje i ustawienia wtyczek nie mogą wtedy być zmieniane w produkcji przez panel sterowania. Zmiany wchodzą już tylko przez wersjonowaną Project Config, co utrudnia manipulacje i czyni je bardziej widocznymi.