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 →

Laravel saugumo spraga PHP2Shell: kaip tinkamai apsaugoti programas

PHP2Shell paveikia Laravel programas per PHP. Be pataisos Laravel atveju svarbiausi eilės vykdytojai (queue worker), Octane, failas .env ir aplankas storage.

Būsena 4 min. skaitymoPlatformos

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.

Svarbu

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.

Š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