PHP2Shell: dlaczego internet płonie i dlaczego PixelUnion nie jest zagrożone

PHP2Shell: dlaczego internet płonie i dlaczego PixelUnion nie jest zagrożone

Jeśli pracujesz w pobliżu serwera WWW, dzisiaj nie jest spokojna środa. Dwie krytyczne luki w PHP, nazwane PHP2Shell, wyciekły do sieci, zanim zespół PHP zdążył wydać poprawkę. Administratorzy na całym świecie czekają teraz na łatkę zaplanowaną na dzisiaj na 14:00 UTC, a obok nich czekają atakujący.

Krótko dla użytkowników PixelUnion: Twoim zdjęciom nic nie grozi. Dłuższa wersja poniżej.

Czym jest PHP2Shell

PHP2Shell to nazwa dwóch luk, CVE-2026-109618 i CVE-2026-109619. Obie mają ocenę 9,2 na 10 w skali CVSS v4.0. Taka ocena oznacza, że atakujący może uruchomić własny kod na podatnym serwerze bez logowania. W praktyce: wysyłasz odpowiednie żądanie do strony i dostajesz powłokę na maszynie, która za nią stoi. Stąd nazwa.

Dokładna przyczyna nie została opublikowana. Badacze podejrzewają błąd pamięci (tzw. use-after-free) w tej części PHP, która obsługuje wgrywanie plików, ale nie jest to potwierdzone, a co najmniej jeden audyt to kwestionuje. Potwierdzone jest to, że firma bezpieczeństwa watchTowr twierdzi, że odtworzyła jedną z dwóch luk i że “these vulnerabilities are indeed real.” Nie wiadomo też jeszcze, których wersji PHP to dotyczy. Pierwsze doniesienia mówią o wszystkim aż do PHP 5.4, a PHP nie opublikowało oficjalnego zakresu.

Dlaczego internet płonie

Trzy rzeczy sprawiają, że ta sprawa jest gorsza niż przeciętny biuletyn bezpieczeństwa.

Po pierwsze, zasięg. PHP obsługuje mniej więcej trzy czwarte wszystkich stron, dla których znany jest język serwera. Opiera się na nim WordPress, większość sklepów internetowych, niezliczone panele hostingowe i fora. Luka umożliwiająca zdalne wykonanie kodu w samym PHP, a nie w jednej wtyczce czy aplikacji, dotyka ogromnej części sieci naraz.

Po drugie, wyciek. Zwykle najpierw wychodzi poprawka, a szczegóły dopiero później, co daje obrońcom przewagę. Tym razem szczegóły wyszły przed łatką. Obejście, które krążyło jako pierwsze, czyli wyłączenie w PHP funkcji postępu wgrywania, okazało się niepełne. Przez jakiś czas wszyscy wiedzieli, że drzwi są otwarte, a nikt nie miał zamka.

Po trzecie, sama łatka staje się mapą. Gdy poprawione wersje będą publiczne, atakujący mogą porównać stary i nowy kod i zobaczyć dokładnie, co się zmieniło. Firma bezpieczeństwa Sansec spodziewa się masowej eksploatacji w ciągu około 15 minut od wydania. Do tego skany pokazują, że około 884 000 serwerów dostępnych z internetu nadal deklaruje PHP 8.1 lub starsze. Te gałęzie dobiegły końca wsparcia i prawdopodobnie nigdy nie dostaną poprawki.

Dlatego dziś wiele osób patrzy na stronę z wydaniami, gotowych zaktualizować system w chwili publikacji. Niektórzy nie zdążą.

Dlaczego PixelUnion nie jest zagrożone

PixelUnion działa na Immich, a Immich nie jest napisany w PHP. Serwer to TypeScript uruchamiany na Node.js, z osobną usługą uczenia maszynowego w Pythonie. Na drodze między Twoim telefonem a Twoimi zdjęciami nie ma żadnego interpretera PHP. Błąd w obsłudze wgrywania w PHP nie może zostać wywołany na serwerze, który nie uruchamia PHP.

Dla porządku: faktycznie mieliśmy jedną małą usługę peryferyjną w PHP. Działała poza platformą zdjęć, na osobnej infrastrukturze, i nie miała dostępu do Twojej biblioteki. Nie chcieliśmy stawiać na to, że nieznana łatka pojawi się na czas, więc wyłączyliśmy ją przed oknem wydania. Pozostanie wyłączona, dopóki nie zweryfikujemy poprawionej wersji.

Nic z tego nie znaczy, że uważamy się za odpornych na problemy z bezpieczeństwem. Każdy stos ma błędy, nasz też. Liczy się dokładna wiedza o tym, co gdzie działa, utrzymywanie małej powierzchni ataku i szybka reakcja, gdy trafia się coś takiego. Na tym polega ta praca i nadal ją wykonujemy.

Jeśli prowadzisz własne strony w PHP, sprawdź komunikaty bezpieczeństwa PHP i zainstaluj łatkę, gdy tylko wydanie się ukaże. Jeśli szukasz miejsca na swoje zdjęcia, zbudowanego z taką starannością, chętnie Cię u nas powitamy.

Zacznij za darmo z PixelUnion →

Zdjęcie na okładce: Ricardo Gomez Angel na Unsplash.