Stručne: Bezpečnosť Symfony po PHP2Shell znamená: záplatovať PHP, reštartovať všetky procesy vrátane workerov Messenger a potom skontrolovať secrets, cache a profiler. Zraniteľnosť je v PHP, nie v Symfony; samotná aktualizácia Symfony ju neuzatvorí.
Prečo PHP2Shell zasahuje každý projekt Symfony
Symfony je základom mnohých podnikových aplikácií, API a portálov a nachádza sa aj v systémoch, ako sú Shopware 6 a Contao. Zraniteľnosti PHP CVE-2026-109618 a CVE-2026-109619 podľa tímu PHP umožňujú spustenie škodlivého kódu bez prihlásenia. Či je aplikácia čisto naprogramovaná, na tom nezáleží.
Tím PHP hodnotí riziko pri mod_php ako najvyššie, dotknuté sú však aj PHP-FPM, php-cgi, FrankenPHP a LiteSpeed. Projekty Symfony, ktoré sa prevádzkujú cez Symfony Runtime s FrankenPHP alebo inými trvalo bežiacimi servermi, potrebujú po aktualizácii úplný reštart alebo nový obraz.
Bezpečnosť Symfony: skontrolovať verziu PHP a procesy
php bin/console about zobrazuje verziu Symfony, prostredie, režim ladenia a verziu PHP z príkazového riadku. Webové požiadavky však bežia cez PHP-FPM alebo aplikačný server a to môže byť iná verzia. Skontrolujte obe cesty alebo si ich nechajte potvrdiť od prevádzkovateľa.
Opravené upstream verzie sú 8.5.12, 8.4.27, 8.3.36 a 8.2.35; backporty distribúcií často nesú staršie čísla. Ktoré verzie PHP vaša verzia Symfony podporuje, skontrolujte podľa systémových požiadaviek v dokumentácii na symfony.com.
# Zobraziť prostredie, režim ladenia a verziu PHP
php bin/console about
# Nechať workery Messenger ukončiť po aktuálnej správe
php bin/console messenger:stop-workers
# Známe zraniteľnosti v závislostiach
composer audit
Ak beží viac inštancií za load balancerom alebo v kontajneroch, musí byť každá jednotlivá záplatovaná a reštartovaná. Zabudnutá inštancia naďalej vybavuje časť požiadaviek na starom PHP.
Workery Messenger, príkazy cron a iné procesy na pozadí načítajú PHP raz pri štarte. Kým sa nereštartujú, bežia so starým PHP v pamäti. Správca procesov ich musí po zastavení opäť spustiť.
Kde sú aplikácie Symfony napadnuteľné
| Miesto | Obsah | Bod kontroly |
|---|---|---|
.env, .env.local, .env.local.php |
Premenné prostredia, často databáza a kľúče API | Nesmú byť dostupné z webrootu, hodnoty pri podozrení obnoviť |
config/secrets/prod/ |
Zašifrované secrets | Súkromný dešifrovací kľúč nepatrí do repozitára |
public/ |
Koreň dokumentov s index.php |
Ďalšie súbory PHP |
var/cache/prod/ |
Vygenerovaný kontajner a šablóny ako PHP | Pri podozrení zmazať a vytvoriť znovu |
var/log/ |
Protokoly | Zálohovať |
config/packages/security.yaml |
Firewally, roly, pravidlá prístupu | Neočakávané zmeny |
Cache je podceňovaný úkryt. Symfony tam vytvára súbory PHP, ktoré sa načítavajú pri každej požiadavke. Zmena v týchto súboroch v repozitári nepadne do oka, pretože cache nie je verziovaná.
V produkcii patria APP_ENV=prod a APP_DEBUG=0 a WebProfilerBundle tam nesmie byť aktívny. Verejne dostupný profiler pod /_profiler prezrádza konfiguráciu a údaje požiadaviek.
Administračné oblasti, bundly a závislosti
Projekty Symfony majú podľa štruktúry vlastné administračné oblasti, často s bundlami, ako sú EasyAdmin alebo Sonata. V security.yaml skontrolujte, ktoré cesty vyžadujú ktoré roly, a v databáze, kto tieto roly má. Administračné cesty, ktoré sa potrebujú len interne, by mali byť na úrovni webového servera obmedzené na známe siete.
Bundly a balíky Composeru sú cudzí kód s vlastnými zraniteľnosťami. composer audit zobrazuje známe problémy; podrobnejšie na stránke Skontrolovať závislosti Composeru na zraniteľnosti. Zastarané balíky sú navyše najčastejším dôvodom, prečo aktualizácia PHP v projektoch Symfony trvá dlhšie, než sa plánovalo.
Čo aktualizácia Symfony dokáže a čo nie
Aktualizácia komponentov Symfony uzatvára chyby vo frameworku. PHP nezáplatuje, nereštartuje workery, neobnoví uniknuté secrets a neodstráni zmanipulovanú cache. Či existujú známky útoku, popisuje stránka Som už kompromitovaný?. Keďže neexistujú potvrdené Indicators of Compromise, pomáha predovšetkým pozorovanie nezvyčajného správania, napríklad neočakávaných procesov alebo odchádzajúcich spojení.
Ak sa projekt dodáva ako kontajner, nové PHP patrí do základného obrazu. Obraz zostavte znovu, aj keď sa na kóde nič nezmenilo, a nasaďte ho vo všetkých prostrediach. Pohľad do Dockerfile ukáže, ktorý základný obraz sa používa; pevne nastavený starý tag by inak zabránil tomu, aby nové zostavenie vôbec dostalo záplatované PHP. Podrobnosti sú na stránke Záplatovanie PHP v kontajneroch Docker.
Ako konkrétne pomáha PHP SOS?
- Zisťujeme, ktoré PHP používa web, CLI a worker vášho projektu Symfony, a sprevádzame usporiadaný reštart.
- Zálohujeme logy od 20. 10. 2026 a porovnávame kód na serveri s vaším repozitárom.
- Kontrolujeme súbory prostredia, secrets, cache, nastavenia profileru a admin roly.
- Na priebežné sledovanie procesov a spojení ponúkame security monitoring.
Časté otázky
Týka sa PHP2Shell Symfony?
Samotné Symfony nemá novú zraniteľnosť. PHP2Shell je v PHP, teda v prostredí behu každej aplikácie Symfony. Zraniteľnosť sa uzatvára aktualizáciou PHP alebo potvrdeným backportom a reštartom všetkých procesov PHP.
Ako zastavím workery Messenger po aktualizácii PHP?
Príkazom php bin/console messenger:stop-workers sa bežiacim workerom prikáže ukončiť sa po aktuálnej správe. Správca procesov, ako je Supervisor alebo systemd, ich potom spustí znovu s novým PHP.
Prečo je profiler Symfony v produkcii nebezpečný?
Profiler ukazuje požiadavky, konfiguráciu a často aj premenné prostredia. Ak je aktívny na verejnom serveri, môže tieto informácie získať ktokoľvek. Patrí iba do vývojového prostredia.
Čo sa stane s cache po útoku?
Cache pod var/cache obsahuje vygenerovaný kód PHP. Útočník tam môže uložiť kód, ktorý sa vykonáva pri každej požiadavke. Pri podozrení by sa cache mala zmazať a vytvoriť znovu zo skontrolovaného zdrojového kódu.