Raport z usunięcia podatności
Weryfikacja usunięcia podatności PHP2Shell
Ocena stanu
DobrzeWymaga poprawyZagrożenie
Przed 48
Przed 31
Przed 58
Przed 38
Przed 92
Oceny podsumowują kontrole z tego raportu z wagami: bezpieczeństwo 40%, kopie zapasowe 25%, aktualizacje 20% i wydajność 15%. Opisują ryzyko w zarejestrowanym momencie i nie stanowią certyfikacji.
1Podsumowanie dla kierownictwa
Produkcyjny serwer WWW działał na PHP 8.3.35, podatnym na obie podatności PHP2Shell. W uzgodnionym oknie serwisowym zaktualizowaliśmy PHP do wersji 8.3.36, ponownie uruchomiliśmy wszystkie procesy robocze PHP-FPM i potwierdziliśmy, że aplikacja obsługuje ruch z poprawionego środowiska. Wszystkie uzgodnione testy funkcjonalne zakończyły się powodzeniem i nie odnotowano nowych błędów.
Przegląd wykazał również pulę PHP 7.4 po zakończeniu wsparcia, znajdującą się poza uzgodnionym zakresem, oczekujący restart jądra oraz luki w pokryciu kopiami zapasowymi. Nie mają one wpływu na usunięcie podatności PHP2Shell, ale należy się nimi zająć. Każdą z tych kwestii wraz z priorytetem podano w zaleceniach.
- Stan PHP2Shell
- Zaktualizowano
- Testy funkcjonalne
- Zaliczono 8 z 8
- Przestój
- Nie odnotowano
- Działania następcze
- 6, w tym 2 o wysokim priorytecie
2Zakres i metoda
W zakresie
- Jeden serwer produkcyjny,
web-01 - Pula PHP-FPM
wwwobsługująca aplikację sklepu - PHP CLI używane przez zadania harmonogramu
- Uzgodnione testy logowania, wyszukiwania, składania zamówienia, formularzy, przesyłania plików i zadań harmonogramu
Poza zakresem
- Pula PHP 7.4
legacy(zgłoszona, bez zmian) - Wewnętrzna konfiguracja serwera bazy danych i kod aplikacji
- Wykrywanie złośliwego oprogramowania i badanie włamania
- Środowiska testowe i deweloperskie
Metoda
Inwentaryzacja w trybie tylko do odczytu przez SSH z kluczem o ograniczonym czasie ważności; pochodzenie pakietów sprawdzone w repozytorium dostawcy i komunikacie PHP; migawka ze zweryfikowanym rozruchem przed jakąkolwiek zmianą; aktualizacja wdrożona przez systemowy menedżer pakietów; ponowne uruchomienie procesów roboczych; testy funkcjonalne na kontach testowych klienta. Tymczasowy dostęp usunięto o 22:31.
3Inwentaryzacja serwera
Zarejestrowano na początku okna prac, przed jakąkolwiek zmianą.
| Nazwa hosta | web-01.example-retail.test |
|---|---|
| Rola | Produkcyjny serwer WWW i aplikacji |
| Hosting | Serwer VPS, 4 vCPU, 8 GB pamięci |
| System operacyjny | Ubuntu 24.04.3 LTS |
| Działające jądro | 6.8.0-85-generic Zainstalowano nowsze jądro, wymagany restart |
| Czas pracy | 142 dni |
| Dysk | Wolumin systemowy 80 GB, zajęte 61% |
| Serwer WWW | nginx 1.24.0 |
| Pule PHP-FPM | www (PHP 8.3), legacy (PHP 7.4) |
| Baza danych | MySQL 8.0.43 na osobnym, zarządzanym hoście |
| Źródło pakietów PHP | ppa:ondrej/php |
| Automatyczne aktualizacje bezpieczeństwa | Wyłączone |
| Synchronizacja czasu | Aktywna |
| Monitorowanie | Tylko kontrola dostępności; brak alertów dotyczących zasobów i błędów aplikacji |
4Środowiska PHP
Zidentyfikowano wszystkie pliki binarne i pule PHP na serwerze, w tym te spoza uzgodnionego zakresu.
| Środowisko PHP | Obsługuje | Przed | Po | Stan |
|---|---|---|---|---|
php8.3-fpm / www | Aplikacja sklepu | 8.3.35 | 8.3.36 | Zaktualizowano |
php8.3-cli | Zadania harmonogramu | 8.3.35 | 8.3.36 | Zaktualizowano |
php7.4-fpm / legacy | Zarchiwizowany sklep pod adresem /old-shop | 7.4.33 | 7.4.33 | Wymaga działania |
Wsparcie PHP 7.4 zakończyło się w listopadzie 2022 r. i wersja ta nie otrzymuje już poprawek bezpieczeństwa. Na podstawie samej wersji nie można wykluczyć narażenia starszej puli; zob. zalecenie R1.
Obserwacje konfiguracji
expose_phpma wartość Off, adisplay_errorsma wartość Off w środowisku produkcyjnym.- OPcache jest włączony i ma 128 MB pamięci, co wystarcza dla aplikacji.
session.upload_progress.enabledma wartość On, choć aplikacja z tego nie korzysta.- Każda pula działa jako osobny użytkownik systemowy z własnym gniazdem.
5Stan podatności
| Komunikat | Podatne środowisko | Przed | Po | Dowody |
|---|---|---|---|---|
CVE-2026-109618 | php8.3 | Podatne | Usunięto | Dziennik zmian pakietu i działająca wersja |
CVE-2026-109619 | php8.3 | Podatne | Usunięto | Dziennik zmian pakietu i działająca wersja |
CVE-2026-109618, CVE-2026-109619 | php7.4 | Nie oceniono | Nie oceniono | Poza uzgodnionym zakresem |
Poprawka przeniesiona przez dostawcę do starszego wydania może mieć inny numer wersji. Właściwy raport odwołuje się do odpowiedniego komunikatu dostawcy. Pomyślna weryfikacja poprawki nie dowodzi, że nigdy nie doszło do włamania do środowiska.
6Kopie zapasowe i odtwarzanie
Kopie zapasowe sprawdzono przed jakąkolwiek zmianą. Aktualizację można było rozpocząć dopiero po utworzeniu zweryfikowanej migawki.
| Kopia zapasowa | Harmonogram | Ostatnie powodzenie | Retencja | Lokalizacja | Test odtwarzania |
|---|---|---|---|---|---|
| Zrzut bazy danych | Codziennie, 03:15 | 2026-10-22 03:16 | 14 dni | Poza siedzibą, szyfrowana | Nigdy |
| Pliki aplikacji | Codziennie, 03:40 | 2026-10-22 03:52 | 14 dni | Ten sam dostawca, osobny wolumin | Nigdy |
| Migawka serwera przed zmianą | Wykonana na potrzeby tych prac | 2026-10-22 21:04 | 7 dni | Dostawca hostingu | Rozruch zweryfikowany |
Ustalenia
- Kopia zapasowa plików nie obejmuje katalogu
/var/www/shop/uploads, w którym przechowywanych jest około 6,2 GB dokumentów klientów. - Dla żadnej z zaplanowanych kopii zapasowych nie odnotowano testu odtwarzania. Na kopii zapasowej, której nigdy nie odtworzono, nie można polegać przy odzyskiwaniu danych.
- Zrzuty bazy danych są szyfrowane i przechowywane u innego dostawcy, co chroni je w razie utraty serwera lub konta hostingowego.
Plan wycofania tej zmiany
Ponowna instalacja poprzednich pakietów PHP z lokalnej pamięci podręcznej pakietów i przeładowanie PHP-FPM albo uruchomienie migawki sprzed zmiany. Szacowany czas przywrócenia: 15 minut. Wycofanie zmian nie było potrzebne.
7Dziennik zmian
| Godzina | Działanie | Wynik |
|---|---|---|
21:00 | Otwarto dostęp; zarejestrowano stan bazowy wersji, usług i czasów odpowiedzi | Zakończono |
21:04 | Utworzono migawkę serwera przed zmianą i zweryfikowano jej rozruch | Zakończono |
21:12 | Wykonano bazowe testy funkcjonalne | Zaliczono 8 z 8 |
21:18 | Zaktualizowano pakiety PHP 8.3 z wersji 8.3.35 do 8.3.36 | Zakończono |
21:20 | Ponownie uruchomiono PHP-FPM; nie pozostał żaden proces roboczy starej wersji | Zakończono |
21:24 | Potwierdzono działającą wersję przez serwer WWW i CLI | Zakończono |
21:31 | Wykonano testy funkcjonalne po zmianie | Zaliczono 8 z 8 |
21:55 | Monitorowano dzienniki błędów i czasy odpowiedzi przez 20 minut | Brak nowych błędów |
22:31 | Usunięto tymczasowy klucz dostępu i zamknięto sesję | Zakończono |
8Weryfikacja po zmianie
| Sprawdzany element | Metoda | Wynik |
|---|---|---|
| Wersja PHP obsługująca żądania WWW | Tymczasowy skrypt diagnostyczny, usunięty po użyciu | 8.3.36 |
| Procesy robocze PHP-FPM | Lista procesów i stan usługi | Zaliczony |
| Logowanie klienta | Konto testowe klienta | Zaliczony |
| Logowanie administratora | Konto testowe klienta | Zaliczony |
| Wyszukiwanie produktów | Trzy frazy wyszukiwania uzgodnione z klientem | Zaliczony |
| Składanie zamówienia | Zamówienie testowe w trybie testowym operatora płatności | Zaliczony |
| Formularz kontaktowy | Testowe zgłoszenie, dostarczenie potwierdzone przez klienta | Zaliczony |
| Przesyłanie plików | Testowy dokument przesłany i pobrany | Zaliczony |
| E-mail resetowania hasła | Konto testowe, e-mail odebrany | Zaliczony |
| Zadania harmonogramu | Kolejne zaplanowane uruchomienie sprawdzone w dziennikach | Zaliczony |
| Dziennik błędów | Porównano 30 minut przed zmianą i po niej | Brak nowych błędów |
| Czas odpowiedzi strony głównej | Mediana z 20 żądań | 182 ms → 176 ms |
9Ustalenia i zalecenia
Uporządkowane według priorytetu. Żadna z tych pozycji nie blokuje usunięcia podatności PHP2Shell.
| ID | Priorytet | Ustalenie | Zalecenie |
|---|---|---|---|
R1 | Wysoki | Pula PHP 7.4 nie ma już wsparcia i może być narażona. | Wycofaj zarchiwizowany sklep lub ogranicz dostęp do niego do uwierzytelnionych użytkowników. Jeśli musi pozostać dostępny, przenieś go na wspieraną wersję PHP. Wyceniane osobno. |
R2 | Wysoki | Nowsze jądro jest zainstalowane, ale nie działa; serwer nie był restartowany od 142 dni. | Zaplanuj restart w najbliższym oknie serwisowym, a następnie potwierdź działające jądro. |
R3 | Średni | Oczekują 23 aktualizacje systemu operacyjnego, w tym OpenSSL i nginx. | Wdroż je w zaplanowanym oknie i włącz automatyczne aktualizacje bezpieczeństwa. |
R4 | Średni | Kopii zapasowych nigdy nie przetestowano pod kątem odtwarzania, a kopia plików nie obejmuje plików przesłanych przez klientów. | Dodaj katalog przesłanych plików do kopii zapasowej plików i co kwartał przeprowadzaj udokumentowany test odtwarzania. |
R5 | Niski | Śledzenie postępu przesyłania jest włączone, ale nieużywane. | Wyłącz session.upload_progress.enabled w celu zmniejszenia powierzchni ataku. |
R6 | Niski | Monitorowanie obejmuje tylko dostępność. | Dodaj alerty dotyczące miejsca na dysku, wysycenia PHP-FPM i błędów aplikacji. |
10Dowody i przekazanie
- Identyfikatory środowiska i uzgodnione okno prac
- Źródło pakietu, pełna wersja i właściwy komunikat dostawcy
- Identyfikator kopii zapasowej, dziennik zmian i dowody ponownego uruchomienia procesów
- Uzgodnione testy funkcjonalne, wyniki i ograniczenia
- Pełny zapis poleceń i fragmenty dziennika zmian pakietów
11Ograniczenia
Raport obejmuje uzgodnione środowisko i testy w zapisanym czasie. Nie jest certyfikatem bezpieczeństwa, gwarancją ochrony przed przyszłymi podatnościami ani stwierdzeniem, że wcześniej nie doszło do włamania. Podejrzenie włamania wymaga osobnego badania.