Trumpai: Laravel saugumo spraga, kurios dabar ieško daug kūrėjų, yra PHP2Shell ir slypi pačiame PHP. Laravel atnaujinimas jos neuždaro. Svarbu pataisytas PHP, visų procesų, įskaitant eilės vykdytojus (queue worker) ir Octane, paleidimas iš naujo ir .env, storage bei public patikra.
Ką PHP2Shell reiškia Laravel programoms
Laravel yra daugelio savos kūrimo sprendimų pagrindas: klientų portalų, vidinių įrankių, rezervacijos sistemų, programėlių API. PHP komandos teigimu, PHP spragos CVE-2026-109618 ir CVE-2026-109619 leidžia vykdyti kenkėjišką kodą nuotoliniu būdu be prisijungimo. Kaip švarus Laravel kodas, čia nesvarbu.
Paveikti veikimo būdai: PHP-FPM, Apache su mod_php, php-cgi, FrankenPHP ir LiteSpeed. Laravel Octane gali naudoti FrankenPHP kaip serverį; tada PHP yra FrankenPHP programoje ar konteinerio atvaizde (image) ir atnaujinamas kartu su juo. Kaip tai atrodo su FrankenPHP, aprašo FrankenPHP apsauga.
Laravel saugumo spraga: PHP versijos ir procesų patikra
Komandinėje eilutėje php artisan about rodo PHP versiją, Laravel versiją ir svarbius nustatymus, tokius kaip aplinka ir derinimo režimas. Tačiau tai CLI PHP versija. Žiniatinklio užklausas apdoroja PHP-FPM arba Octane, ir tai gali būti kita versija. Abejodami leiskite operatoriui patvirtinti, kokia paketų būsena veikia visais keliais.
Ištaisytos oficialios (upstream) versijos yra 8.5.12, 8.4.27, 8.3.36 ir 8.2.35, atgaliniai perkėlimai (backport) gali turėti senesnius numerius. Kurias PHP versijas palaiko jūsų Laravel versija, pagal sistemos reikalavimus dokumentacijoje patikrinkite laravel.com.
Po atnaujinimo ateina dalis, kurią Laravel atveju pamiršta dažniausiai: ilgai veikiantys procesai.
# Parodyti versijas ir konfigūraciją
php artisan about
# Nurodyti eilės vykdytojams pasibaigti po dabartinės užduoties
php artisan queue:restart
# Užbaigti Horizon, kad procesų tvarkyklė jį paleistų iš naujo
php artisan horizon:terminate
Vykdytojai po to pasileidžia iš naujo tik jei juos prižiūri procesų tvarkyklė, pavyzdžiui, Supervisor ar systemd. Octane serveriai ir konteineriai turi būti visiškai paleisti iš naujo arba išskleisti su nauju atvaizdu (image). Konteinerių sąrangoms galioja PHP pataisymas Docker konteineriuose.
Kur Laravel programos pažeidžiamos
| Vieta | Turinys | Patikros punktas |
|---|---|---|
.env |
APP_KEY, duomenų bazė, paštas, API raktai |
niekada negali būti pasiekiamas per žiniatinklį |
bootstrap/cache/config.php |
sukaupta konfigūracija su paslaptimis | Teisės, keitimo data |
public/ |
Dokumentų šaknis su index.php |
papildomi PHP failai |
storage/app/public |
Įkėlimai, pasiekiami per public/storage |
jokių PHP failų |
storage/logs/ |
laravel.log, dažnai su užklausų duomenimis |
išsaugoti, ne viešai |
vendor/ |
Composer paketai | composer audit, palyginimas su composer.lock |
Aplankas storage/app/public pasiekiamas per simbolinę nuorodą adresu public/storage. Ten padėtas PHP failas, priklausomai nuo serverio konfigūracijos, gali būti vykdomas tiesiogiai. Užblokuokite tai žiniatinklio serverio lygiu.
APP_DEBUG gamyboje turi būti false. Klaidos puslapis su derinimo išvestimi gali parodyti aplinkos kintamuosius, kelius ir kodo dalis ir palengvina bet kurio užpuoliko darbą.
Administravimo sąsajos ir paketai kaip rizika
Laravel programos neturi vieningos administravimo sąsajos. Dažnai tai savos sritys arba paketai, tokie kaip Filament ar Nova. Patikrinkite, kas turi administratoriaus teises, ar prisijungimas turi dviejų veiksnių pakopą ir ar administravimo maršrutai privalo būti pasiekiami iš išorės. Taip pat API žetonus, pavyzdžiui, iš Sanctum ar Passport, kilus įtarimui reikėtų atšaukti ir išduoti iš naujo.
Patikrinkite ir tai, ar gamyboje pasiekiami kūrimo įrankiai, pavyzdžiui, derinimo juostos, Telescope ar bandomieji maršrutai. Jie dažnai rodo užklausas, užklausų vykdymą ir konfigūraciją ir turi būti už prisijungimo arba visiškai pašalinti iš gamybos aplinkos.
Composer paketai yra antras didelis blokas. Kiekviena priklausomybė atneša savo kodą, o paketai be priežiūros vėliau blokuoja PHP atnaujinimus. composer audit rodo žinomas spragas, bet nepakeičia savo kodo patikros.
Ką gali Laravel atnaujinimas ir ko ne
Laravel ar atskirų paketų atnaujinimas uždaro šio kodo klaidas. Jis netaiso PHP, nepaleidžia vykdytojų iš naujo, neatnaujina nutekėjusio APP_KEY ir nepašalina failų iš storage ar public. Ar iki pataisos kas nors įvyko, galima išsiaiškinti tik patikrinus žurnalus, failus ir duomenų bazę.
Komandoms su diegimo grandine (deployment pipeline) galioja: PHP atnaujinimas turi patekti ir į kūrimo aplinką bei bazinius atvaizdus (image), kitaip kitas diegimas vėl atneš seną versiją. Taip pat patikrinkite, ar bandomosios (staging) ar peržiūros aplinkos pasiekiamos viešai. Jos dažnai veikia su APP_DEBUG=true ir tikrais duomenimis ir atliekant saugumo atnaujinimus lengvai pamirštamos.
Kaip PHP SOS padeda konkrečiai?
- Tikriname jūsų Laravel programos žiniatinklio, CLI ir vykdytojų PHP ir lydime tvarkingą visų procesų paleidimą iš naujo.
- Išsaugome žurnalus nuo 2026 m. spalio 20 d., duomenų bazę ir kodo būseną ir lyginame ją su jūsų saugykla.
- Tikriname
.env, konfigūracijos talpyklą,storage,public, administratorių paskyras ir API žetonus. - Gilesnei savo kodo patikrai per specializuotus partnerius tarpininkaujame dėl saugumo audito ar skverbties testo.
Dažni klausimai
Ar dėl PHP2Shell turiu atnaujinti Laravel?
Laravel atnaujinimas PHP2Shell neuždaro, nes spraga yra PHP interpretatoriuje. Vis tiek laikykite Laravel naujausią. Dėl PHP2Shell reikia pataisyto PHP ir visų PHP procesų, taip pat vykdytojų, paleidimo iš naujo.
Kodėl Laravel dažnai nepakanka iš naujo paleisti PHP-FPM?
Eilės vykdytojai (queue worker), Horizon, Octane ir planuoklis veikia kaip atskiri PHP procesai komandinėje eilutėje. Jie PHP įkelia vieną kartą paleidimo metu ir po to toliau dirba su sena versija atmintyje, kol nepaleidžiami iš naujo.
Ką daryti, jei failas .env galėjo nutekėti?
Tada reikėtų atnaujinti APP_KEY, duomenų bazės slaptažodį ir visus raktus išorinėms paslaugoms. Atkreipkite dėmesį, kad naujas APP_KEY nutraukia esamas sesijas ir paverčia senuoju raktu užšifruotus duomenis neperskaitomais; tai planuokite su savo kūrėjais.