Luka w Ghostscripcie (CVE-2026-39919): jak jeden PDF może przejąć serwer i kogo to naprawdę dotyczy

Kotek przebrany za duszka pod białym materiałem na biurku w serwerowni, kobieta unosi rąbek materiału

Większość ludzi nigdy nie zainstalowała Ghostscriptu i nie wie, że go używa. A jednak ten program siedzi pod spodem w ogromnej liczbie serwerów: to on zamienia wgrany PDF w miniaturkę w WordPressie, w systemie obiegu dokumentów, w bramce pocztowej czy w usłudze „skompresuj PDF online”. We wrześniu 2026 roku załatano w nim lukę, przez którą odpowiednio spreparowany PDF może doprowadzić do wykonania obcego kodu na maszynie, która ten plik przetwarza.

Poniżej jest to, co wiadomo na pewno, czego nie wiadomo, jak sprawdzić własny serwer i co z tej historii wynika dla każdego, kto wysyła swoje dokumenty do przetworzenia w sieci.

W skrócie

  • Luka: CVE-2026-39919, przepełnienie bufora na stercie w obsłudze obrazów JPEG 2000 w Ghostscripcie. Wystarczy PDF z odpowiednio przygotowanym obrazem.
  • Podatne wersje: według odkrywców od 9.21 do 10.07.1 (rekord CVE mówi ogólnie „przed 10.08.0”).
  • Poprawka: Ghostscript 10.08.0, wydany 8 września 2026. Dystrybucje Linuksa przenoszą poprawkę do starszych numerów wersji, więc liczy się pełna wersja pakietu, a nie to, co pokazuje gs --version.
  • Ocena: 9,8 w CVSS 3.1 według rekordu CVE, 7,8 („Moderate”) według Red Hata. Obie liczby są uczciwe, opisują po prostu różne scenariusze.
  • Ataki w praktyce: do dziś nie potwierdzono żadnego. Działający exploit powstał w laboratorium i był dopasowany do jednej, konkretnej kompilacji.
  • Przełącznik -dSAFER nie chroni. Błąd zachodzi także przy włączonej piaskownicy.

Co się stało

Lukę znalazł zespół Wordfence, firmy zajmującej się bezpieczeństwem WordPressa, swoim narzędziem Argus wspomaganym przez AI. Działo się to 23 sierpnia 2026 roku, podczas przeglądu bezpieczeństwa WordPressa 7.1. Narzędzie prześledziło drogę wgranego pliku dalej niż kod PHP, który go przyjął: przez rozszerzenie Imagick, przez ImageMagick, aż do Ghostscriptu i dekodera JPEG 2000 na samym dole.

Artifex, firma rozwijająca Ghostscript, potwierdził zgłoszenie następnego dnia, a 8 września wydał wersję 10.08.0 z poprawką. Rekord CVE opublikowano 15 września. Szczegóły techniczne Wordfence opisał publicznie 12 października, dzień później temat podchwycił BleepingComputer i reszta mediów branżowych.

Jak działa sam błąd

Nie trzeba znać języka C, żeby to zrozumieć. Obraz to siatka próbek. JPEG 2000 pozwala, by poszczególne składowe obrazu (na przykład jasność i przezroczystość) miały różną rozdzielczość, a pojedyncza próbka zajmowała mniej niż 8 bitów. Przy próbkach 2-bitowych w jednym bajcie mieszczą się cztery.

W przykładzie opisanym przez odkrywców jeden wiersz obrazu ma 1024 takie próbki. Spakowane zajmują 256 bajtów i Ghostscript poprawnie rezerwuje 256 bajtów. Tyle że pętla, która ten wiersz wypełnia, gdy oba wspomniane warunki wystąpią naraz, zapisuje cały bajt na każdą próbkę zamiast pakować po cztery. Do 256-bajtowego bufora trafia 1024 bajty. Nadmiarowe 768 bajtów w każdym wierszu nadpisuje pamięć, w której Ghostscript trzyma własne dane porządkowe. A ponieważ te bajty pochodzą z obrazu, ich treść wybiera autor pliku.

Drewniane przegródki na listy w starej poczcie, w każdej siedzi kotek, a na końcu rzędu kotki wysypują się na podłogę

Tak wygląda klasyczna droga od „program się wysypał” do „program zrobił to, co kazał mu napastnik”. Nowoczesne systemy mocno tę drogę utrudniają (losowe rozmieszczenie pamięci i inne zabezpieczenia), ale nie zamykają jej całkowicie.

Jak PDF dociera do Ghostscriptu w WordPressie

WordPress sam nie rysuje podglądów PDF-ów. Od wersji 4.7 potrafi wygenerować obrazek pierwszej strony wgranego dokumentu i robi to rękami innych programów. Łańcuch wygląda tak:

WordPress → rozszerzenie PHP Imagick → ImageMagick → Ghostscript

Ghostscript uruchamia się jako osobny proces, zwykle na tym samym koncie co serwer WWW. Startuje tylko wtedy, gdy ktoś poprosi o obrazek z PDF-a. Formularz, który zapisuje plik na dysku i nic więcej z nim nie robi, nigdy go nie wywoła.

Atak tą drogą wymaga, by wszystkie cztery warunki były spełnione jednocześnie:

  1. ktoś z zewnątrz (anonimowo albo z kontem o niskich uprawnieniach) może wgrać PDF,
  2. strona zleca wygenerowanie podglądu lub miniatury tego pliku,
  3. na serwerze jest Imagick albo inne narzędzie, które w tym celu woła Ghostscript, a polityka ImageMagicka pozwala czytać PDF-y,
  4. zainstalowany Ghostscript nie ma poprawki.

Ważne zastrzeżenie: standardowy WordPress nie pozwala anonimowym gościom wgrywać plików do biblioteki mediów. Napastnik potrzebuje wtyczki, formularza z polem na załącznik albo konta, które taką drogę otwiera. Wordfence sprawdził też oficjalny obraz Dockera z WordPressem: zawierał podatny Ghostscript 10.05.1, rozszerzenie Imagick i działającą ścieżkę podglądu PDF. Sam w sobie nie wystarczał jednak do anonimowego ataku.

Jeden szczegół, który zwiększa szanse napastnika: gdy pierwsza próba wygenerowania podglądu się nie powiedzie, WordPress automatycznie próbuje drugi raz z innymi ustawieniami. Trzy złośliwe załączniki to więc sześć uruchomień Ghostscriptu. W teście Wordfence formularz i tak zgłaszał „wgrano pomyślnie”, a Ghostscript wysypywał się po cichu w tle.

To nie jest błąd WordPressa ani wtyczki z formularzem. One były tylko drogą, którą plik dotarł do Ghostscriptu.

Jak groźne to jest naprawdę

Tu warto się zatrzymać, bo nagłówki w rodzaju „jeden PDF przejmuje serwer” mówią prawdę tylko w połowie.

Skąd dwie różne oceny. Rekord CVE daje 9,8 na 10 (CVSS 3.1) i 9,3 (CVSS 4.0). Te liczby opisują najgorszy przypadek: aplikację dostępną z sieci, która przyjmuje PDF-y bez logowania i bez udziału człowieka. Red Hat ocenia tę samą lukę na 7,8 i nazywa ją „Moderate”, bo liczy scenariusz, w którym użytkownik sam otwiera złośliwy plik na swoim komputerze. Żadna z ocen nie jest błędna, odpowiadają na różne pytania.

Ile prób, ile sukcesów. Wordfence zbudował dwa działające exploity dla swojej laboratoryjnej kompilacji, a potem uruchomił je 10 240 razy na dziesięciu innych środowiskach: Debianie, Ubuntu, Fedorze, AlmaLinuksie, Alpine i oficjalnym kontenerze WordPressa. Nie zadziałały ani razu. Na kompilacji, dla której powstały, działały dalej, nawet po zmianie czcionek, ustawień językowych i jednej z bibliotek systemowych, choć nie przy każdej próbie.

Wniosek jest dwojaki. Nie ma jednego pliku, który otwiera każdy serwer na świecie. Ale napastnik nie potrzebuje uniwersalnego pliku, jeśli celuje w konkretną firmę albo w hosting, na którym setki stron stoją na identycznym obrazie systemu. Odkrywcy zwracają uwagę, że w podobnej sprawie z biblioteką libheif inny zespół, wspomagając się AI, dopasowywał exploit do nowego celu w dzień lub dwa.

Z jakimi uprawnieniami. Kod napastnika działa na koncie, które przetwarza PDF, czyli zwykle na koncie serwera WWW. To nie jest automatycznie root, ale to konto zwykle czyta pliki strony, w tym konfigurację z hasłem do bazy danych.

Ataki w praktyce: na dzień pisania tego tekstu nikt nie zgłosił wykorzystania tej luki poza laboratorium.

Jak sprawdzić własny serwer

Kobieta w okularach przy laptopie, obok niej pręgowany kotek wpatrzony w ekran, na biurku leży lupa

Jeśli masz dostęp do powłoki, zacznij od trzech pytań.

1. Czy w ogóle jest tu Ghostscript i w jakiej wersji pakietu?

  • Debian i Ubuntu: dpkg -s ghostscript | grep Version
  • Fedora, RHEL, AlmaLinux: rpm -q ghostscript
  • Dla porządku: gs --version, ale ten numer sam nic nie przesądza.

Dlaczego sam numer nie wystarcza? Ubuntu 22.04 załatało lukę w pakiecie 9.55.0~dfsg1-0ubuntu5.14, który na pytanie o wersję nadal odpowiada „9.55.0”. Debian 13 ma poprawkę w 10.05.1~dfsg-1+deb13u2 (biuletyn DSA-6516-1). Red Hat wydał poprawki dla RHEL 10, 9 i 8 między 1 a 6 października. Według trackera Debiana Debian 12 (bookworm) nadal jest oznaczony jako podatny. Zawsze porównuj z biuletynem swojej dystrybucji.

Jest też odwrotna pułapka: wersja kandydująca 10.08.0 (RC) przedstawia się jako 10.08.0, a poprawki nie ma. Właśnie na takiej Wordfence prowadził testy. Jeśli kompilowałeś Ghostscript ze źródeł, upewnij się, że to wydanie finalne.

2. Czy PHP ma Imagick? php -m | grep -i imagick. W panelu WordPressa: Narzędzia → Zdrowie witryny → Informacje → Obsługa mediów. To tylko punkt wyjścia: pokazuje, czy Imagick rozpoznaje PDF, ale nie mówi nic o tym, czy Ghostscript jest załatany.

3. Czy ImageMagick może czytać PDF-y? convert -list format | grep -i pdf (w ImageMagicku 7: magick -list format). Litery rw przy PDF znaczą, że ścieżka do Ghostscriptu jest otwarta.

Kontenery: restart nie wystarczy. Pobierz zaktualizowany obraz bazowy, zbuduj obraz od nowa bez warstw z pamięci podręcznej i wdroż go ponownie.

Hosting współdzielony: zwykle nie sprawdzisz tego sam. Zadaj dostawcy dwa pytania: czy pakiet Ghostscript na serwerach zawiera poprawkę CVE-2026-39919 i czy PDF-y wgrywane przez klientów są gdziekolwiek zamieniane w podglądy.

Gdy nie możesz od razu zaktualizować

  • Przestań przyjmować PDF-y od anonimowych gości i kont o niskich uprawnieniach. Plik, który nie dotrze na serwer, nie dotrze do Ghostscriptu.
  • Wyłącz czytanie PDF-ów w polityce ImageMagicka. W pliku policy.xml (zwykle /etc/ImageMagick-6/ albo /etc/ImageMagick-7/) dodaj w sekcji <policymap> linię <policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,PDF,XPS}" />. Skutek uboczny: WordPress przestanie robić miniatury PDF-ów.
  • Ogranicz liczbę plików w jednym zgłoszeniu i częstotliwość wysyłek. To zmniejsza liczbę prób, jaką napastnik dostaje, ale niczego nie naprawia.
  • Odizoluj konwersję dokumentów w osobnej usłudze bez dostępu do sekretów strony i bez zbędnych połączeń sieciowych. To ogranicza szkody, ale też nie jest poprawką.

Czego nie robić: nie traktuj -dSAFER jako zabezpieczenia. Piaskownica Ghostscriptu ogranicza to, co dokument może zrobić udokumentowanymi funkcjami języka PostScript. Przed uszkodzeniem pamięci nie chroni, a w testach błąd zadziałał przy włączonej piaskownicy. Żadna wtyczka WordPressa tego nie naprawi, bo Ghostscript pochodzi z systemu operacyjnego albo z obrazu kontenera, nie z WordPressa.

Nie myl tej luki z CVE-2026-65640. To inna sprawa: zdalne wykonanie kodu w WordPressie przez wgranie pliku PostScript, które również przechodzi przez Imagick i Ghostscript, ale wymaga konta z prawem wgrywania plików (zwykle rola Autor lub wyższa). Naprawiono ją w WordPressie 7.0.4 z poprawkami wstecz do gałęzi 4.7.

To nie jest problem tylko WordPressa

WordPress jest jedną z wielu dróg, którą cudzy PDF może dotrzeć do Ghostscriptu. Ta sama sytuacja dotyczy systemów obiegu dokumentów, serwerów druku, programów do przetwarzania faktur, generatorów podglądów, bramek pocztowych skanujących załączniki i API do konwersji plików. Pytanie jest zawsze to samo: czy ten program renderuje PDF-y, które przyszły od kogoś innego?

Przeszukanie kodu własnej aplikacji pod kątem słowa „Ghostscript” może nic nie dać. Zwykle pośrodku siedzi ImageMagick albo inna biblioteka, a Ghostscript jest wołany dopiero przez nią.

A co to znaczy dla wysyłania PDF-ów do sieci

Ta historia ma też drugą stronę, rzadziej opisywaną. Usługa „skompresuj PDF”, „zamień PDF na obraz” albo „połącz PDF-y” w przeglądarce to dokładnie ten typ serwera, o którym mowa wyżej: przyjmuje pliki od obcych ludzi i przepuszcza je przez narzędzia, które je rozbierają i składają od nowa. Nie wiesz, czym ani w jakiej wersji przetwarzają twój dokument i czy zrobili aktualizację po 8 września. Wiesz za to, że twój plik leży przez chwilę na tej samej maszynie co pliki tysięcy innych osób, a niektóre z nich mogą być spreparowane.

To nie znaczy, że każda usługa online jest dziurawa. Znaczy, że wysyłając umowę, skan dowodu czy wyniki badań, oddajesz je w miejsce, którego bezpieczeństwa nie możesz sprawdzić. Więcej o tym piszę w tekście o tym, co dzieje się z plikiem w narzędziu online.

Uczciwie trzeba dodać, że przetwarzanie lokalne nie jest odporne z definicji. Jeśli sam kompresujesz PDF-y Ghostscriptem, jak w przykładzie z artykułu o kompresji PDF, zaktualizuj go do 10.08.0 lub nowszego. Przewaga pracy offline polega na czymś innym: dokument nie opuszcza twojego komputera, a o wersji oprogramowania decydujesz ty, a nie ktoś, kogo nie znasz.

Jeśli na co dzień łączysz, dzielisz, szyfrujesz albo konwertujesz PDF-y do Worda, możesz to robić bez wysyłania ich gdziekolwiek. PDF Manipulator jest darmowy, działa na Windowsie i Linuksie, a każdy plik zostaje na twoim komputerze.

Źródła

Zostaw komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Przewijanie do góry