Fenyegetettségi elemzés · Web · PHP

PHP2Shell: kritikus PHP-sérülékenységek (CVE-2026-109618, CVE-2026-109619)

Hitelesítés nélküli távoli kódfuttatás minden webes PHP-telepítésen, amelyet már a javítás megjelenése előtt kihasználtak. Kit érint, mit kell tenni, és mire figyeljen a naplókban.

2026. november 3. · P1R4T3 Kutatás

Röviden

2026. október 21-én a PHP-projekt soron kívüli biztonsági frissítést adott ki két kritikus sérülékenységre (CVE-2026-109618 és CVE-2026-109619, gyűjtőnevén „PHP2Shell”). Mindkettő hitelesítés nélküli távoli kódfuttatást tesz lehetővé, CVSS v4.0 pontszámuk 9.2. A támadás a PHP kérésfeldolgozójában történik, még mielőtt az alkalmazás saját kódja lefutna: a bejelentkezés, a WAF-szabályok egy része és az alkalmazás-szintű védelem ezért nem állítja meg. A CISA október 26-án mindkét hibát felvette az aktívan kihasznált sérülékenységek (KEV) katalógusába.

Kit érint?

  • Minden webes PHP-telepítést a 8.2.35, 8.3.36, 8.4.27 és 8.5.12 előtti verziókon: Apache-modul (mod_php), PHP-FPM, php-cgi, LiteSpeed, FrankenPHP. A legnagyobb a kockázat mod_php esetén.
  • A PHP 8.1 és régebbi ágak is érintettek. A 7.4, 8.0 és 8.1 ágra csak minimális forráskód-szintű javítás, illetve a disztribúciók és LTS-szállítók csomagjai érhetők el; a 7.3 és régebbi verziókra nincs javítás.
  • PHP-t beágyazó termékek: NAS-eszközök, tűzfalak és appliance-ek webes felületei. A gyártók saját frissítést adnak ki, gyakran a PHP-verziószám megváltoztatása nélkül, ezért a gyártói tájékoztatót kell ellenőrizni.
  • A magyar kkv-k jelentős része osztott tárhelyen futtat WordPress-, webáruház- vagy egyedi PHP-oldalt. Itt a frissítés a szolgáltató feladata, de érdemes rákérdezni, és ellenőrizni, hogy a tárhelyen kiválasztott PHP-verzió a javított ágra mutat-e.

Mi a hiba lényege?

  • CVE-2026-109618 – memóriasérülés memóriahiánykor. Ha a PHP a kérés felépítése közben kifogy a memóriából (memory_limit), a belső adatszerkezet félig felépített állapotban marad, és a takarító kód ezt érvényesnek tekinti.
  • CVE-2026-109619 – elavult állapot a következő kérésben (use-after-free). A worker szintű állapot már felszabadított, egy korábbi kéréshez tartozó memóriára mutathat. Az egyik ismert útvonal a feltöltés-feldolgozás (session.upload_progress, amely alapértelmezetten be van kapcsolva, és session_start() nélkül is fut).

Mindkét hibához elég egy speciálisan összeállított, hitelesítés nélküli HTTP POST kérés. A sikeres kihasználás nem feltétlenül okoz összeomlást vagy hibás HTTP-választ, ezért a naplókban könnyen elsikkad.

Idővonal

  • Október 17. – Az AWS kihasználási kísérleteket jelzett, négy nappal a nyilvános közzététel előtt (Datadog).
  • Október 20. – A részletek idő előtt kiszivárogtak; a PHP-projekt soron kívüli kiadást jelentett be.
  • Október 21. – Megjelentek a javított verziók; a watchTowr honeypot-hálózata ugyanezen a napon kihasználást észlelt.
  • Október 23. – A PHP egy harmadik, még javítatlan hibát is jelzett (CVE-2026-115560, lehetséges távoli kódfuttatás a feltöltés-követésben); a részletek és a javítás a következő rendes kiadással érkeznek.
  • Október 26. – A CISA mindkét CVE-t felvette a KEV-katalógusba, október 29-i javítási határidővel a szövetségi szervek számára.

Mit tegyen most?

  1. Leltár: minden PHP-futtatókörnyezet számít – szerverek, konténerképek, beágyazott PHP-t használó eszközök. Elsőként az internetről elérhető rendszerek.
  2. Frissítés a javított verzióra (8.2.35, 8.3.36, 8.4.27, 8.5.12) vagy a disztribúció, illetve a gyártó javított csomagjára.
  3. Újraindítás: konténerképek újraépítése, minden PHP-worker újraindítása. Amíg a régi worker fut, a régi kód fut.
  4. Átmeneti intézkedések, ha a frissítés késik (ezek csak szűkítik a kockázatot, nem szüntetik meg):
    • session.upload_progress.enabled = 0 – a CVE-2026-109619 egyik útvonalát és a még javítatlan CVE-2026-115560-at is lezárja; a workereket újra kell indítani;
    • PHP 8.5-ön fatal_error_backtraces = 0;
    • memory_limit = -1 adminisztrátori szinten, a kérés méretének korlátozásával a reverse proxyn és konténer-memóriakorláttal együtt;
    • a frissíthetetlen rendszerek internetes elérésének korlátozása.
  5. Mivel a kihasználás a javítás megjelenése előtt elkezdődött, a frissítés után is érdemes kompromittálódásra utaló jeleket keresni.

Mire figyeljen a naplókban?

  • PHP memóriahiba „Allowed memory size of … bytes exhausted” bejegyzés Unknown on line 0 hellyel, vagyis a kérés inicializálása közben – különösen több ilyen rövid időn belül ugyanazon a workeren.
  • Apache-ban AH00052: child pid … exit signal Segmentation fault (11); PHP-FPM workerek váratlan leállása.
  • PHP_SESSION_UPLOAD_PROGRESS vagy PHPSESSID nevű multipart mezők ott, ahol az alkalmazás nem használ ilyet; <?php vagy |O: karaktersor a feltöltött fájlnévben; szokatlanul sok részből álló vagy mélyen beágyazott mezőnevű kérések.
  • A legerősebb jel: a webszerver vagy a PHP-worker által indított shell vagy letöltő program (sh, bash, curl, wget).

Hogyan segítünk

Külső támadásifelület-figyelésünk (ASM) a kitett szolgáltatásokat a CISA KEV-katalógusával veti össze, és riaszt, ha aktívan kihasznált sérülékenység jelenik meg az ügyfél rendszerein. Ha nem biztos benne, hol fut PHP a szervezetében, vagy a frissítés után kompromittálódási vizsgálatra van szüksége, vegye fel velünk a kapcsolatot.

Források

A cikk a 2026. november 3-i állapotot tükrözi. A konkrét verziószámokat és beállításokat a beavatkozás előtt mindig a PHP-projekt és a saját szállítója hivatalos tájékoztatóján ellenőrizze.