Ajankohtainen tilanne: PHP2Shell. Kaksi kriittistä PHP-haavoittuvuutta (CVSS 9.2) sallii haittakoodin suorittamisen ilman kirjautumista. Korjaukset 21.10.2026 alkaen.Mitä nyt on tehtävä →

Laravelin haavoittuvuus PHP2Shell: sovellusten oikea suojaus

PHP2Shell osuu Laravel-sovelluksiin PHP:n kautta. Korjauksen lisäksi Laravelissa tärkeitä ovat queue-workerit, Octane, .env-tiedosto ja storage-kansio.

Tilanne Lukuaika 3 minAlustat

Lyhyesti: Laravelin haavoittuvuus, jota monet kehittäjät nyt etsivät, on PHP2Shell, ja se on PHP:ssä itsessään. Laravel-päivitys ei sulje sitä. Tärkeitä ovat korjattu PHP, kaikkien prosessien, myös queue-workerien ja Octanen, uudelleenkäynnistys sekä .env:n, storage:n ja public:n tarkistus.

Mitä PHP2Shell tarkoittaa Laravel-sovelluksille

Laravel on monen omatekoisen ratkaisun perusta: asiakasportaalit, sisäiset työkalut, varausjärjestelmät, sovellusten rajapinnat. PHP-tiimin mukaan PHP-haavoittuvuudet CVE-2026-109618 ja CVE-2026-109619 sallivat haittakoodin suorittamisen etänä ilman kirjautumista. Sillä, kuinka siistiä Laravel-koodi on, ei ole tässä merkitystä.

Haavoittuvia ovat ajotavat PHP-FPM, Apache mod_php:llä, php-cgi, FrankenPHP ja LiteSpeed. Laravel Octane voi käyttää FrankenPHP:tä palvelimena; silloin PHP on FrankenPHP-ohjelmassa tai konttikuvassa ja päivittyy sen mukana. Miltä tämä näyttää FrankenPHP:n kohdalla, kuvaa sivu FrankenPHP:n suojaus.

Laravelin haavoittuvuus: PHP-version ja prosessien tarkistus

Komentorivillä php artisan about näyttää PHP-version, Laravel-version ja tärkeitä asetuksia, kuten ympäristön ja debug-tilan. Se on kuitenkin CLI-PHP:n versio. Verkkopyynnöt käsittelee PHP-FPM tai Octane, ja se voi olla eri versio. Pyytäkää epäselvässä tapauksessa ylläpitäjää vahvistamaan, mikä pakettitila on käytössä kaikilla reiteillä.

Korjatut upstream-versiot ovat 8.5.12, 8.4.27, 8.3.36 ja 8.2.35; backportit voivat kantaa vanhempia numeroita. Mitä PHP-versioita teidän Laravel-versionne tukee, tarkistatte järjestelmävaatimuksista laravel.comin dokumentaatiosta.

Päivityksen jälkeen tulee Laravelissa useimmin unohtuva osa: pitkäikäiset prosessit.

# Näytetään versiot ja asetukset
php artisan about
# Käsketään queue-workerit päättymään nykyisen työn jälkeen
php artisan queue:restart
# Lopetetaan Horizon, jotta prosessinhallinta käynnistää sen uudelleen
php artisan horizon:terminate

Workerit käynnistyvät sen jälkeen uudelleen vain, jos prosessinhallinta, kuten Supervisor tai systemd, valvoo niitä. Octane-palvelimet ja kontit on käynnistettävä kokonaan uudelleen tai otettava käyttöön uudella kuvalla. Konttiympäristöissä pätee PHP:n korjaus Docker-konteissa.

Missä Laravel-sovellukset ovat haavoittuvia

Paikka Sisältö Tarkistuskohde
.env APP_KEY, tietokanta, sähköposti, API-avaimet ei saa koskaan olla avattavissa verkon kautta
bootstrap/cache/config.php välimuistissa oleva asetus salaisuuksineen oikeudet, muutospäivä
public/ dokumenttijuuri: index.php ylimääräiset PHP-tiedostot
storage/app/public lataukset, saavutettavissa polun public/storage kautta ei PHP-tiedostoja
storage/logs/ laravel.log, usein pyyntötietoineen talteen, ei julkiseksi
vendor/ Composer-paketit composer audit, vertailu tiedostoon composer.lock

Hakemisto storage/app/public on saavutettavissa symbolisen linkin kautta polussa public/storage. Sinne tallennettu PHP-tiedosto voidaan palvelimen asetuksista riippuen suorittaa suoraan. Estäkää se verkkopalvelimen tasolla.

Tärkeää

APP_DEBUG on tuotannossa oltava false. Debug-tulosteella varustettu virhesivu voi näyttää ympäristömuuttujia, polkuja ja osia koodista ja helpottaa jokaisen hyökkääjän työtä.

Hallintaliittymät ja paketit riskinä

Laravel-sovelluksilla ei ole yhtenäistä hallintaliittymää. Usein ne ovat omia alueita tai paketteja, kuten Filament tai Nova. Tarkistakaa, kenellä on ylläpitäjän oikeudet, onko kirjautumisessa kaksivaiheinen vaihe ja tarvitseeko hallintareittien olla ulkopuolelta saavutettavissa. Myös API-tokenit, esimerkiksi Sanctumista tai Passportista, kannattaa epäilyn jälkeen kumota ja antaa uudet.

Tarkistakaa lisäksi, ovatko kehityksen työkalut tavoitettavissa tuotannossa, esimerkiksi debug-palkit, Telescope tai testireitit. Ne näyttävät usein pyyntöjä, kyselyjä ja asetuksia, ja ne kuuluvat kirjautumisen taakse tai kokonaan pois tuotantoympäristöstä.

Composer-paketit ovat toinen suuri lohko. Jokainen riippuvuus tuo mukanaan omaa koodia, ja ylläpitämättömät paketit estävät myöhemmin PHP-päivitykset. composer audit näyttää tunnetut aukot, mutta ei korvaa oman koodin tarkistusta.

Mihin Laravel-päivitys pystyy ja mihin ei

Laravelin tai yksittäisten pakettien päivitys sulkee tämän koodin tunnetut virheet. Se ei korjaa PHP:tä, ei käynnistä workereita uudelleen, ei uusi vuotanutta APP_KEY:tä eikä poista tiedostoja hakemistoista storage tai public. Sen, onko ennen korjausta tapahtunut jotain, voi selvittää vain tarkistamalla lokit, tiedostot ja tietokannan.

Tiimeille, joilla on käyttöönottoputki, pätee: PHP-päivitys kuuluu myös build-ympäristöön ja peruskuviin, muuten seuraava käyttöönotto tuo taas vanhan version. Tarkistakaa lisäksi, ovatko staging- tai review-ympäristöt julkisesti tavoitettavissa. Ne toimivat usein arvolla APP_DEBUG=true ja oikeilla tiedoilla, ja ne jäävät helposti huomaamatta tietoturvapäivityksissä.

Miten PHP SOS auttaa konkreettisesti?

  • Tarkistamme Laravel-sovelluksenne web-, CLI- ja worker-PHP:n ja tuemme kaikkien prosessien hallittua uudelleenkäynnistystä.
  • Varmuuskopioimme lokit 20.10.2026 alkaen, tietokannan ja koodin tilan ja vertaamme sitä repositorioonne.
  • Tarkistamme .env:n, asetusten välimuistin, storage:n, public:n, ylläpitäjätilit ja API-tokenit.
  • Oman koodin syvempää tarkastusta varten välitämme erikoistuneiden kumppaneiden kautta tietoturva-auditoinnin tai penetraatiotestin.

Usein kysytyt kysymykset

Pitääkö minun päivittää Laravel PHP2Shellin takia?

Laravel-päivitys ei sulje PHP2Shelliä, koska aukko on PHP-tulkissa. Pitäkää Laravel silti ajan tasalla. PHP2Shellia vastaan tarvitsette korjatun PHP:n ja kaikkien PHP-prosessien, myös workerien, uudelleenkäynnistyksen.

Miksi PHP-FPM:n uudelleenkäynnistys ei Laravelissa usein riitä?

Queue-workerit, Horizon, Octane ja ajastin toimivat omina PHP-prosesseinaan komentoriviltä. Ne lataavat PHP:n kerran käynnistyessään ja jatkavat sen jälkeen vanhalla versiolla muistissa, kunnes ne käynnistetään uudelleen.

Mitä tehdä, jos .env-tiedosto on voinut vuotaa?

Silloin APP_KEY, tietokannan salasana ja kaikki ulkoisten palvelujen avaimet kannattaa uusia. Huomatkaa, että uusi APP_KEY päättää voimassa olevat istunnot ja tekee vanhalla avaimella salatut tiedot lukukelvottomiksi; suunnitelkaa se kehittäjienne kanssa.

Lähteet

Pikayhteys

Jokainen tunti on tärkeä. Kirjoittakaa meille nyt.

Kuvatkaa lyhyesti järjestelmä, PHP-versio ja havainnot. Otamme yhteyttä, selvitämme tilanteen ja työskentelemme etänä, kunnes tapaus on käsitelty loppuun ja dokumentoitu.

Pikaapu