Trenutno stanje: PHP2Shell. Dvije kritične PHP ranjivosti (CVSS 9.2) omogućuju zlonamjerni kod bez prijave. Zakrpe od 21. 10. 2026.Što sada učiniti →

Zaštita FrankenPHP-a

FrankenPHP donosi PHP u vlastitom programu. Zato ažuriranje distribucije nije dovoljno: binarni program ili image treba iznova izraditi i ponovno pokrenuti sve workere.

Stanje 4 min čitanjaPoslužitelji i hosting

Ukratko: FrankenPHP je aplikacijski poslužitelj na temelju Caddyja koji PHP ugrađuje u vlastiti program. Za FrankenPHP sigurnost nakon PHP2Shella to znači: ne računaju se PHP paketi distribucije, nego PHP verzija u FrankenPHP binarnom programu ili imageu kontejnera. Izradite ili preuzmite izdanje s ispravljenim PHP-om i ponovno pokrenite sve workere.

Zašto se FrankenPHP zakrpava drukčije

Kod klasičnih postavki distribucija isporučuje PHP kao paket, a ažuriranje zamjenjuje datoteke. FrankenPHP, naprotiv, sadrži PHP kao ugrađenu biblioteku. Tko koristi službeni binarni program ili image kontejnera izrađen na njemu, PHP dobiva u paketu. apt upgrade na hostu tu ništa ne mijenja.

PHP2Shell obuhvaća CVE-2026-109618 i CVE-2026-109619, svaki s CVSS v4.0 9,2. PHP projekt FrankenPHP izričito navodi među pogođenim načinima rada. Ispravljeni su PHP 8.5.12, 8.4.27, 8.3.36 i 8.2.35. Odlučujuće je, dakle, prema kojoj je PHP verziji izrađen Vaš FrankenPHP.

Worker način rada i PHP2Shell

FrankenPHP aplikacije može pokretati u worker načinu rada. Pritom se aplikacija učita jednom i zatim u istom procesu obrađuje mnogo zahtjeva zaredom. To donosi brzinu, ali produljuje trajanje svakog procesa.

CVE-2026-109619 opisuje unutarnje stanje zahtjeva koje može ostati sačuvano nakon oslobađanja memorije; kasniji zahtjev u istom workeru može ga iskoristiti prije nego što se vrati na početno stanje. U worker načinu rada međudjelovanje mnogih zahtjeva u jednom procesu uobičajeno je stanje. To nije razlog da se odreknete worker načina rada, ali jest jasan razlog da ažuriranja i ponovna pokretanja provedete osobito pažljivo. Tehničke pojedinosti nalaze se u članku CVE-2026-109619.

FrankenPHP sigurnost: provjerite verziju

Ugrađenu PHP verziju provjerite izravno u sustavu koji radi. Sljedeće naredbe samo čitaju; nazivi usluga i kontejnera su primjeri.

# Instalirani binarni program
frankenphp version

# U kontejneru koji radi (naziv kontejnera kao primjer)
docker exec app frankenphp version
docker exec app php -v

# Koji image stvarno radi? (digest prikazuje točno stanje)
docker inspect --format '{{.Image}} {{.Config.Image}}' app

Zabilježite PHP verziju iz ispisa. Ako je prije ispravljenih stanja, sustav je ranjiv. Uvijek provjerite kontejner koji radi, a ne samo posljednji izrađeni image, jer novi image djeluje tek nakon zamjene kontejnera.

Instalirajte ažuriranje i ponovno pokrenite sve workere

Kako ažuriranje izgleda, ovisi o Vašoj instalaciji:

  • Binarni program na hostu: instalirati novo FrankenPHP izdanje s ispravljenom PHP verzijom, ponovno pokrenuti uslugu.
  • Kontejner: preuzeti osnovni image s ispravljenom PHP verzijom, iznova izraditi vlastiti image, bez predmemorije za osnovni sloj, zamijeniti kontejner.
  • Samostalno kompilirano: iznova izraditi prema ispravljenoj PHP verziji, sva proširenja ponovno izraditi s istom verzijom.
# Primjer instalacije na hostu kao systemd usluga
systemctl restart frankenphp

# Primjer Docker Compose: iznova izraditi bez predmemorije i zamijeniti kontejner
docker compose build --pull --no-cache
docker compose up -d --force-recreate

Nakon toga ponovno provjerite PHP verziju u kontejneru koji radi i vrijeme pokretanja procesa. U worker načinu rada svaki worker mora biti ponovno pokrenut. Kod Kubernetesa vrijede dodatni koraci, opisani u članku Zakrpa PHP-a u Kubernetesu, a za kontejnere općenito u članku Zakrpa PHP-a u Docker kontejnerima.

Važno

Oznaka poput latest ili glavna verzija u nazivu imagea ne jamči da imate najnovije stanje. Osnovni image aktivno ponovno preuzmite i nakon toga provjerite PHP verziju u kontejneru koji radi.

Privremene mjere i ojačavanje

Ako se ažuriranje ne može odmah provesti, php.net preporučuje privremene mjere koje ne pružaju potpunu zaštitu. Kod FrankenPHP-a vrijednosti postavite u php.ini koji FrankenPHP učitava ili putem PHP postavki u Caddy konfiguraciji, a ne putem ini_set() u aplikaciji.

; php.ini u kontejneru ili na hostu
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M

Uz funkciju uploada php.net navodi post_max_size = 32M. Na PHP-u 8.5 dodaje se fatal_error_backtraces=0. Ograničenje memorije pripada na razinu kontejnera, primjerice putem ograničenja memorije kontejnera, a ne putem RLIMIT_AS ili RLIMIT_DATA. Nakon svake promjene ponovno pokrenite sve workere.

Za trajan rad isplati se imagee referencirati s fiksnim digestom, redovito ih automatski iznova izrađivati i u lanac izrade uključiti skener imagea. Zakrpa osim toga ne uklanja zlonamjerni softver koji je ubačen prije. Sačuvajte zapisnike od 20. 10. 2026.; kod kontejnera to znači osigurati ih prije zamjene.

Tko FrankenPHP koristi kao statički izrađen binarni program, trebao bi znati da su tamo uz PHP čvrsto ugrađena i sva proširenja. Ažuriranje stoga uvijek znači zamjenu cijelog binarnog programa. Nakon zamjene provjerite verziju i popis učitanih proširenja je li sve dostupno kao prije te testirajte aplikaciju prije nego što odbacite staro stanje. U okruženjima s kontejnerima preporučuje se svaki image označiti datumom izrade. Tako u svakom trenutku možete rekonstruirati koje je stanje kada radilo i po potrebi ciljano se vratiti, a da ponovno ne padnete na ranjivo stanje. Dodjelu imagea, PHP verzije i vremena zabilježite u svojoj dokumentaciji.

Kako PHP SOS konkretno pomaže?

  • Provjeravamo koja je PHP verzija stvarno ugrađena u Vaše FrankenPHP binarne programe i kontejnere koji rade.
  • Putem usluge PHP zakrpa iznova izrađujemo imagee, zamjenjujemo kontejnere i ponovno pokrećemo sve workere, uz dokaz.
  • Osiguravamo zapisnike prije zamjene i provjeravamo aplikaciju zbog tragova.
  • Za trajan rad u okviru ojačavanja poslužitelja uspostavljamo automatizirane ponovne izrade i provjere imagea.

Česta pitanja

Pomaže li apt ili dnf ažuriranje kod FrankenPHP-a?

Samo ako sam FrankenPHP potječe iz tih izvora paketa i izrađen je prema zakrpanom PHP-u. Često je PHP čvrsto ugrađen u FrankenPHP binarni program ili u image kontejnera. Tada morate ažurirati binarni program ili image.

Zašto je worker način rada kod PHP2Shella posebno važan?

U worker načinu rada aplikacija ostaje u memoriji i obrađuje mnogo zahtjeva jedan za drugim u istom procesu. CVE-2026-109619 odnosi se upravo na unutarnje stanje koje može ostati sačuvano između zahtjeva u istom workeru. Ponovno pokretanje svih workera nakon ažuriranja stoga je obvezno.

Kako provjeriti koja je PHP verzija ugrađena u FrankenPHP?

FrankenPHP binarni program pri pozivu verzije ispisuje ugrađenu PHP verziju. U kontejneru naredbu možete izvršiti putem docker exec. Pazite da verziju provjerite u kontejneru koji stvarno radi, a ne u novoizrađenom imageu.

Postoje li za FrankenPHP posebne privremene mjere?

Vrijede opće napomene php.net-a. Vrijednosti postavljate u php.ini koji FrankenPHP učitava ili u PHP konfiguraciji Caddy datoteke, a ne putem ini_set() u aplikaciji. Zatim ponovno pokrenite sve workere.

Izvori

Hitni kontakt

Svaki sat se računa. Pišite nam odmah.

Ukratko opišite sustav, verziju PHP-a i opažanje. Javit ćemo Vam se, razjasniti situaciju i raditi na daljinu dok incident nije zaključen i dokumentiran.

Hitna pomoć