Aktualna sytuacja: PHP2Shell. Dwie krytyczne luki w PHP (CVSS 9,2) umożliwiają wykonanie złośliwego kodu bez logowania. Poprawki od 21.10.2026.Co należy teraz zrobić →

Bezpieczeństwo Symfony po PHP2Shell: jak zabezpieczyć projekty i workery

Aplikacje Symfony są dotknięte przez PHP2Shell poprzez PHP. Ważne są poprawka i restart także workerów Messengera, chronione sekrety, czysty cache i brak profilera w produkcji.

Stan 4 min czytaniaPlatformy

Krótko: Bezpieczeństwo Symfony po PHP2Shell oznacza: załatać PHP, zrestartować wszystkie procesy, w tym workery Messengera, a następnie sprawdzić sekrety, cache i profiler. Luka leży w PHP, a nie w Symfony; sama aktualizacja Symfony jej nie zamyka.

Dlaczego PHP2Shell dotyczy każdego projektu Symfony

Symfony jest podstawą wielu aplikacji firmowych, API i portali, a ponadto tkwi w systemach takich jak Shopware 6 i Contao. Luki PHP CVE-2026-109618 i CVE-2026-109619 umożliwiają według zespołu PHP wykonanie złośliwego kodu bez logowania. To, czy aplikacja jest czysto zaprogramowana, nie odgrywa tu roli.

Zespół PHP ocenia ryzyko przy mod_php jako najwyższe, ale dotknięte są także PHP-FPM, php-cgi, FrankenPHP i LiteSpeed. Projekty Symfony uruchamiane przez Symfony Runtime z FrankenPHP lub innymi stale działającymi serwerami wymagają po aktualizacji pełnego restartu lub nowego obrazu.

Bezpieczeństwo Symfony: sprawdzanie wersji PHP i procesów

php bin/console about pokazuje wersję Symfony, środowisko, tryb debugowania i wersję PHP wiersza poleceń. Żądania sieciowe działają jednak przez PHP-FPM lub serwer aplikacji, a to może być inna wersja. Proszę sprawdzić obie ścieżki lub zlecić ich potwierdzenie operatorowi.

Naprawione wersje upstream to 8.5.12, 8.4.27, 8.3.36 i 8.2.35; backporty dystrybucji noszą często starsze numery. To, które wersje PHP obsługuje Państwa wersja Symfony, można sprawdzić w wymaganiach systemowych w dokumentacji na symfony.com.

# Wyświetlenie środowiska, trybu debugowania i wersji PHP
php bin/console about
# Zakończenie workerów Messengera po bieżącej wiadomości
php bin/console messenger:stop-workers
# Znane luki w zależnościach
composer audit

Jeśli kilka instancji działa za load balancerem lub w kontenerach, każda z osobna musi być załatana i zrestartowana. Zapomniana instancja nadal obsługuje część żądań na starym PHP.

Workery Messengera, polecenia cron i inne procesy w tle ładują PHP jeden raz przy starcie. Dopóki nie zostaną zrestartowane, działają ze starym PHP w pamięci. Menedżer procesów musi je po zatrzymaniu uruchomić ponownie.

Gdzie aplikacje Symfony są podatne na atak

Miejsce Zawartość Punkt kontroli
.env, .env.local, .env.local.php Zmienne środowiskowe, często baza danych i klucze API Niedostępne w webroot, po podejrzeniu odnowić wartości
config/secrets/prod/ Zaszyfrowane sekrety Prywatny klucz deszyfrujący nie należy do repozytorium
public/ Katalog główny dokumentów z index.php Dodatkowe pliki PHP
var/cache/prod/ Wygenerowany kontener i szablony jako PHP Po podejrzeniu usunąć i wygenerować od nowa
var/log/ Logi Zabezpieczyć
config/packages/security.yaml Firewalle, role, reguły dostępu Nieoczekiwane zmiany

Cache to niedoceniana kryjówka. Symfony generuje tam pliki PHP, które są ładowane przy każdym żądaniu. Zmiana w tych plikach nie rzuca się w oczy w repozytorium, ponieważ cache nie jest wersjonowany.

Ważne

W produkcji muszą obowiązywać APP_ENV=prod i APP_DEBUG=0, a WebProfilerBundle nie może być tam aktywny. Publicznie dostępny profiler pod /_profiler ujawnia konfigurację i dane żądań.

Obszary admina, bundle i zależności

Projekty Symfony mają zależnie od budowy własne obszary admina, często z bundlami takimi jak EasyAdmin czy Sonata. Proszę sprawdzić w security.yaml, które ścieżki wymagają jakich ról, a w bazie danych, kto te role ma. Ścieżki admina potrzebne tylko wewnętrznie powinny być ograniczone na poziomie serwera WWW do znanych sieci.

Bundle i pakiety Composera to obcy kod z własnymi lukami. composer audit pokazuje znane problemy; szczegółowo opisuje to artykuł Sprawdzanie zależności Composera pod kątem luk. Przestarzałe pakiety są ponadto najczęstszym powodem, dla którego aktualizacja PHP w projektach Symfony trwa dłużej, niż planowano.

Co daje aktualizacja Symfony, a czego nie

Aktualizacja komponentów Symfony zamyka błędy we frameworku. Nie łata PHP, nie restartuje workerów, nie odnawia wyciekłych sekretów i nie usuwa zmanipulowanego cache. To, czy są oznaki ataku, opisuje artykuł Czy już doszło do kompromitacji?. Ponieważ nie ma potwierdzonych wskaźników kompromitacji (Indicators of Compromise), pomaga przede wszystkim obserwacja nietypowego zachowania, na przykład nieoczekiwanych procesów lub połączeń wychodzących.

Jeśli projekt jest dostarczany jako kontener, nowe PHP należy do obrazu bazowego. Proszę zbudować obraz od nowa, nawet jeśli w kodzie nic się nie zmieniło, i wdrożyć go na wszystkich środowiskach. Rzut oka do Dockerfile pokazuje, jakiego obrazu bazowego się używa; na stałe ustawiony stary tag uniemożliwia bowiem, aby nowy build w ogóle otrzymał załatane PHP. Szczegóły w artykule Łatanie PHP w kontenerach Docker.

Jak konkretnie pomaga PHP SOS?

  • Ustalamy, z którego PHP korzystają web, CLI i workery Państwa projektu Symfony, i towarzyszymy w uporządkowanym restarcie.
  • Zabezpieczamy logi od 20.10.2026 i porównujemy kod na serwerze z Państwa repozytorium.
  • Sprawdzamy pliki środowiskowe, sekrety, cache, ustawienia profilera i role admina.
  • Do bieżącej obserwacji procesów i połączeń oferujemy monitoring bezpieczeństwa.

Częste pytania

Czy Symfony jest dotknięte przez PHP2Shell?

Samo Symfony nie ma nowej luki. PHP2Shell tkwi w PHP, a więc w środowisku uruchomieniowym każdej aplikacji Symfony. Lukę zamyka aktualizacja PHP lub potwierdzony backport oraz restart wszystkich procesów PHP.

Jak zatrzymać workery Messengera po aktualizacji PHP?

Poleceniem php bin/console messenger:stop-workers działające workery otrzymują polecenie zakończenia po bieżącej wiadomości. Menedżer procesów, taki jak Supervisor lub systemd, uruchamia je następnie ponownie z nowym PHP.

Dlaczego profiler Symfony w produkcji jest niebezpieczny?

Profiler pokazuje żądania, konfigurację i często zmienne środowiskowe. Jeśli jest aktywny na publicznym serwerze, każdy może pobrać te informacje. Jego miejsce jest wyłącznie w środowisku deweloperskim.

Co dzieje się z cache po ataku?

Cache w var/cache zawiera wygenerowany kod PHP. Atakujący może tam umieścić kod, który uruchamia się przy każdym żądaniu. W razie podejrzenia cache należy usunąć i wygenerować od nowa ze sprawdzonego kodu źródłowego.

Źródła

Kontakt natychmiast

Liczy się każda godzina. Proszę napisać do nas teraz.

Proszę krótko opisać system, wersję PHP i obserwacje. Skontaktujemy się z Państwem, ustalimy sytuację i będziemy pracować zdalnie, aż incydent zostanie zamknięty i udokumentowany.

Natychmiastowa pomoc