Dabartinė padėtis: PHP2Shell. Du kritiniai PHP pažeidžiamumai (CVSS 9,2) leidžia vykdyti kenkėjišką kodą be prisijungimo. Pataisos nuo 2026-10-21.Ką dabar daryti →

Symfony saugumas po PHP2Shell: kaip apsaugoti projektus ir vykdytojus

Symfony programos per PHP paveiktos PHP2Shell. Svarbi pataisa ir paleidimas iš naujo, taip pat Messenger vykdytojams, apsaugotos paslaptys (secrets), švari talpykla ir jokio Profiler gamyboje.

Būsena 3 min. skaitymoPlatformos

Trumpai: Symfony saugumas po PHP2Shell reiškia: pataisyti PHP, iš naujo paleisti visus procesus, įskaitant Messenger vykdytojus, o po to patikrinti paslaptis (secrets), talpyklą ir Profiler. Spraga yra PHP, o ne Symfony; vien Symfony atnaujinimas jos neuždaro.

Kodėl PHP2Shell liečia kiekvieną Symfony projektą

Symfony yra daugelio įmonių programų, API ir portalų pagrindas, be to, jis slypi tokiose sistemose kaip Shopware 6 ir Contao. PHP komandos teigimu, PHP spragos CVE-2026-109618 ir CVE-2026-109619 leidžia vykdyti kenkėjišką kodą be prisijungimo. Ar programa švariai užprogramuota, čia nesvarbu.

PHP komanda didžiausią riziką priskiria mod_php, tačiau paveikti ir PHP-FPM, php-cgi, FrankenPHP bei LiteSpeed. Symfony projektams, veikiantiems per Symfony Runtime su FrankenPHP ar kitais nuolat veikiančiais serveriais, po atnaujinimo reikia visiško paleidimo iš naujo arba naujo atvaizdo (image).

Symfony saugumas: PHP versijos ir procesų patikra

php bin/console about rodo Symfony versiją, aplinką, derinimo režimą ir komandinės eilutės PHP versiją. Tačiau žiniatinklio užklausos eina per PHP-FPM ar programų serverį, ir tai gali būti kita versija. Patikrinkite abu kelius arba leiskite operatoriui juos patvirtinti.

Ištaisytos oficialios (upstream) versijos yra 8.5.12, 8.4.27, 8.3.36 ir 8.2.35; distribucijų atgaliniai perkėlimai (backport) dažnai turi senesnius numerius. Kurias PHP versijas palaiko jūsų Symfony versija, pagal sistemos reikalavimus dokumentacijoje patikrinkite symfony.com.

# Rodyti aplinką, derinimo režimą ir PHP versiją
php bin/console about
# Leisti Messenger vykdytojams pasibaigti po dabartinės žinutės
php bin/console messenger:stop-workers
# Žinomos priklausomybių spragos
composer audit

Jei keli egzemplioriai veikia už apkrovos balansuotojo (load balancer) arba konteineriuose, kiekvienas turi būti pataisytas ir paleistas iš naujo. Pamirštas egzempliorius toliau aptarnauja dalį užklausų su senu PHP.

Messenger vykdytojai, cron komandos ir kiti foniniai procesai PHP įkelia vieną kartą paleidimo metu. Kol jie nepaleisti iš naujo, veikia su sena PHP versija atmintyje. Procesų tvarkyklė po sustabdymo turi juos vėl pakelti.

Kur Symfony programos pažeidžiamos

Vieta Turinys Patikros punktas
.env, .env.local, .env.local.php Aplinkos kintamieji, dažnai duomenų bazė ir API raktai nepasiekiama iš žiniatinklio šaknies, reikšmes atnaujinti kilus įtarimui
config/secrets/prod/ užšifruotos paslaptys (secrets) privatus iššifravimo raktas saugykloje neturi būti
public/ Dokumentų šaknis su index.php papildomi PHP failai
var/cache/prod/ sugeneruotas konteineris ir šablonai kaip PHP kilus įtarimui ištrinti ir sugeneruoti iš naujo
var/log/ Žurnalai išsaugoti
config/packages/security.yaml Užkardos, rolės, prieigos taisyklės netikėti pakeitimai

Talpykla yra nuvertinta slėptuvė. Symfony ten generuoja PHP failus, įkeliamus per kiekvieną užklausą. Šių failų pakeitimas saugykloje nepastebimas, nes talpykla nėra versijuojama.

Svarbu

Gamyboje turi būti APP_ENV=prod ir APP_DEBUG=0, o WebProfilerBundle ten negali būti aktyvus. Viešai pasiekiamas Profiler adresu /_profiler atskleidžia konfigūraciją ir užklausų duomenis.

Administravimo sritys, paketai (Bundles) ir priklausomybės

Symfony projektai, priklausomai nuo sandaros, turi savo administravimo sritis, dažnai su tokiais paketais kaip EasyAdmin ar Sonata. Faile security.yaml patikrinkite, kuriems keliams kokių rolių reikia, o duomenų bazėje, kas tas roles turi. Administravimo keliai, reikalingi tik viduje, turėtų būti apriboti žinomiems tinklams žiniatinklio serverio lygiu.

Paketai (Bundles) ir Composer paketai yra svetimas kodas su savomis spragomis. composer audit rodo žinomas problemas; plačiau puslapyje Composer priklausomybių patikra dėl spragų. Pasenę paketai taip pat yra dažniausia priežastis, kodėl PHP atnaujinimas Symfony projektuose trunka ilgiau nei planuota.

Ką gali Symfony atnaujinimas ir ko ne

Symfony komponentų atnaujinimas uždaro karkaso klaidas. Jis netaiso PHP, nepaleidžia vykdytojų iš naujo, neatnaujina nutekėjusių paslapčių ir nepašalina pakeistos talpyklos. Ar yra išpuolio požymių, aprašo Ar jau esu kompromituotas?. Kadangi patvirtintų kompromitavimo indikatorių (Indicators of Compromise) nėra, labiausiai padeda neįprasto elgesio, pavyzdžiui, netikėtų procesų ar išeinančių ryšių, stebėjimas.

Jei projektas pateikiamas kaip konteineris, naujas PHP turi patekti į bazinį atvaizdą (image). Perkurkite atvaizdą, net jei kodas nepasikeitė, ir išskleiskite jį visose aplinkose. Žvilgsnis į Dockerfile parodo, koks bazinis atvaizdas naudojamas; tvirtai nustatyta sena žyma (tag) kitaip neleidžia, kad perkūrimas gautų pataisytą PHP. Išsamiau puslapyje PHP pataisymas Docker konteineriuose.

Kaip PHP SOS padeda konkrečiai?

  • Nustatome, kokį PHP naudoja jūsų Symfony projekto žiniatinklis, CLI ir vykdytojai, ir lydime tvarkingą paleidimą iš naujo.
  • Išsaugome žurnalus nuo 2026 m. spalio 20 d. ir lyginame kodą serveryje su jūsų saugykla.
  • Tikriname aplinkos failus, paslaptis (secrets), talpyklą, Profiler nustatymus ir administratorių roles.
  • Nuolatiniam procesų ir ryšių stebėjimui siūlome saugumo stebėseną.

Dažni klausimai

Ar Symfony paveiktas PHP2Shell?

Pats Symfony naujos spragos neturi. PHP2Shell slypi PHP, taigi kiekvienos Symfony programos vykdymo aplinkoje. Spraga uždaroma PHP atnaujinimu arba patvirtintu atgaliniu perkėlimu (backport) ir visų PHP procesų paleidimu iš naujo.

Kaip sustabdyti Messenger vykdytojus po PHP atnaujinimo?

Su php bin/console messenger:stop-workers veikiantiems vykdytojams nurodoma pasibaigti po dabartinės žinutės. Procesų tvarkyklė, pavyzdžiui, Supervisor ar systemd, juos tada paleidžia iš naujo su nauju PHP.

Kodėl Symfony Profiler gamyboje pavojingas?

Profiler rodo užklausas, konfigūraciją ir dažnai aplinkos kintamuosius. Jei jis aktyvus viešajame serveryje, šią informaciją gali gauti bet kas. Jam vieta tik kūrimo aplinkoje.

Kas atsitinka su talpykla po išpuolio?

Talpykloje var/cache yra sugeneruotas PHP kodas. Užpuolikas ten gali palikti kodą, kuris vykdomas per kiekvieną užklausą. Kilus įtarimui talpyklą reikėtų ištrinti ir sugeneruoti iš naujo iš patikrinto pirminio kodo.

Šaltiniai

Skubus kontaktas

Kiekviena valanda svarbi. Parašykite mums dabar.

Trumpai aprašykite sistemą, PHP versiją ir pastebėjimus. Mes atsakysime, išsiaiškinsime padėtį ir dirbsime nuotoliu, kol incidentas bus užbaigtas ir dokumentuotas.

Skubi pagalba