Trzy krytyczne luki ujawnione w październiku 2026 (php2shell w rdzeniu PHP, CVE-2026-110264 w GitLab i luka http2shell w Brotli) mają wspólny wzorzec: są nieuwierzytelnione, o maksymalnej lub niemal maksymalnej wadze, w tym wypadku „załatałem w zeszłym tygodniu” nie znaczy „jestem bezpieczny”. To checklista krok po kroku, której używamy wewnętrznie, aby zamknąć podatności na całej przestrzeni aplikacji oraz infrastruktury, i nie pominąć instancji o których nikt nie pamięta.
Pełna checklista jest poniżej, za darmo do czytania i udostępniania.
Zostaw e-mail, jeśli chcesz też dostać sygnał przy następnej ważnej sprawie bezpieczeństwa, wraz z praktycznymi wskazówkami, jak sobie z nią poradzić. Bez rozmowy sprzedażowej, w każdej chwili można się wypisać, a checklista i tak zostaje otwarta.
1. Zinwentaryzuj każdą narażoną powierzchnię
Nie załatasz tego, czego nie wypisałeś. Dla każdej technologii wypisz każdą instancję, w tym te łatwe do przeoczenia.
- PHP: każdy host, kontener i zarządzane środowisko serwujące PHP, z dokładną wersją, którą faktycznie serwuje warstwa WWW (PHP-FPM / mod_php), nie tylko CLI. Uwzględnij staging, panele administracyjne i stare serwery.
- GitLab: każda instancja self-managed, w tym repliki Geo, staging, serwery DR i demo. (GitLab.com i Dedicated są już załatane.)
- Front HTTP: reverse proxy, load balancery i CDN terminujące lub re-kodujące ruch (ścieżka http2shell / Brotli).
- Zapomniana instancja dostępna z internetu na podatnej wersji to pełne, nieuwierzytelnione wejście. Pełena inwentaryzacja to właściwy rezultat tego kroku.
2. Potwierdź wersję, którą każde środowisko faktycznie serwuje
- PHP: sprawdź
php-fpm -v(warstwa WWW), a nie tylkophp -v(CLI): potrafią się różnić. - GitLab: odczytaj
/opt/gitlab/embedded/service/gitlab-rails/VERSION(pakiet/Docker), kolumnęAPP VERSIONw Helm alboGET /api/v4/version. - Zanotuj wersję przed i po dla każdej instancji. Audytorzy (ISO 27001 A.8.8, SOC 2 CC7.1) będą oczekiwać datowanego zapisu.
3. Zaktualizuj do wersji z poprawką dla swojej gałęzi
- PHP: wspierane gałęzie (8.2–8.5) idą na załataną wersję (8.2.35 / 8.3.36 / 8.4.27 / 8.5.12) i restart PHP-FPM. PHP 8.1 i starsze są po end-of-life i nie dostaną poprawki w głównych repozytoriach - sprawdź backporty: rozważ aktualizację lub migrację do nowszej aplikacji.
- GitLab: zaktualizuj w obrębie gałęzi minor (19.5→19.5.1, 19.4→19.4.3, 19.3→19.3.6, 19.2→19.2.9, 19.1→19.1.9, 19.0→19.0.10, 18.11→18.11.13). Pułapka z 12 października: jeśli łatałeś wtedy (19.4.2/19.3.5/19.2.8), nadal jesteś podatny na CVE-2026-110264 i potrzebujesz wersji o jeden patch wyżej. 18.10 i starsze nie mają załatanego wydania: przejdź na wspieraną gałąź.
- Warstwa HTTP: zastosuj poprawkę producenta dla ścieżki Brotli/dekompresji i zrestartuj proxy.
- Przypnij dokładne wersje na całej flocie, żeby każdy węzeł wylądował na tym samym buildzie.
4. Uważaj na haczyki
- GitLab 19.4.3 i 19.3.6 zawierają migracje bazy danych: serwer jedno-nodowy pozostaje niedostępny do ich zakończenia; wielo-nodowy może użyć procedury zero-downtime.
- Dla żadnej z trzech luk nie ma pewnego obejścia poza załataniem lub wyłączeniem hosta. WAF może przytępić część podatności, ale nie zastępuje poprawki, bo wyzwalacz jest obsługiwany zanim zadziała Twoja aplikacja.
- Wersje EOL (PHP ≤ 8.1, GitLab ≤ 18.10) to te, które zmieniają łatkę w projekt migracji. Zaplanuj je osobno; nie zostawiaj ich publicznych i nietkniętych.
5. Zweryfikuj i sprawdź czy podatności zostały wyeliminowane skutecznie.
- Po załataniu ponownie sprawdź serwowaną wersję na każdej instancji (powtórz krok 2).
- Potwierdź, że host nie jest już podatny: nieoczekiwane procesy, nowe wpisy cron, zmodyfikowane pliki w katalogu web. Dla GitLaba uruchom opublikowane reguły detekcji na logach.
- Jeśli znajdziesz ślady udanego ataku, potraktuj host jako skompromitowany i wycofaj go z produkcji, zrotuj też wszelkie sekrety które utrzymywał: zmienne CI/CD, tokeny runnerów, klucze deploy, tokeny dostępu.
6. Zapisz to na potrzeby zgodności
Zachowaj datowany zapis per instancja: wersja przed/po, data łatania, ewentualny downtime, wyniki detekcji i zrotowane sekrety. To Twój dowód dla ISO 27001 (A.8.8 zarządzanie podatnościami, A.8.32 zarządzanie zmianą) i SOC 2 (CC7.1, CC8.1).
Najtrudniejszy w takich zdarzeniach nigdy nie jest ten jeden wspierany serwer, o którym myślisz najpierw: to host po EOL, którego nikt nie pilnuje, i instancja „załatana w zeszłym tygodniu”, która wciąż jest narażona. Jeśli chcesz, żeby ktoś rzucił okiem na Waszą ekspozycję, nasz zespół Bezpieczeństwo i Zgodność może zrobić szybki przegląd; dla hostów po end-of-life, których nie da się po prostu załatać, to rozmowa o migracji i modernizacji.