Lyhyesti: CVE-2026-115560 on ohje, jonka php.net julkaisi 23. lokakuuta 2026. Sen mukaan koodin suorittaminen etänä on mahdollista vain epätavallisella session-konfiguraatiolla. Seuraavaan tavalliseen bugikorjausjulkaisuun asti ratkaisu on: asettakaa session.upload_progress.enabled=0 palvelinpuolella ja käynnistäkää kaikki workerit uudelleen.
Mikä on CVE-2026-115560?
Kaksi päivää PHP2Shell-haavoittuvuuksien CVE-2026-109618 ja CVE-2026-109619 korjausten jälkeen PHP-projekti julkaisi uuden ohjeen. CVE-2026-115560 koskee PHP:n istuntojen käsittelyä yhdessä session upload progress -toiminnon kanssa, joka tallentaa käynnissä olevien tiedostolatausten etenemisen istuntoon.
php.netin mukaan haittakoodin suorittaminen etänä on mahdollista, mutta vain epätavallisessa konfiguraatiossa. Täydellinen tiedote kaikkine yksityiskohtineen on tarkoitus julkaista seuraavan tavallisen bugikorjausjulkaisun yhteydessä. Siihen asti tietämys on tietoisesti niukkaa.
Mitä session upload progress tekee?
Session upload progress on PHP:n mukavuustoiminto. Kun kävijä lataa suuremman tiedoston, PHP kirjoittaa latauksen aikana istuntoon jatkuvasti tietoja etenemisestä: kuinka paljon dataa on jo saapunut ja mitä tiedostoa parhaillaan siirretään. Sovellus voi kysyä näitä tietoja rinnakkain ja rakentaa niistä edistymispalkin.
Käytännössä vain harvat sovellukset käyttävät sitä, sillä nykyaikaiset latauslomakkeet mittaavat etenemisen yleensä suoraan selaimessa. PHP:ssä toiminto on kuitenkin oletuksena päällä. Siksi se esiintyy sekä haavoittuvuudessa CVE-2026-115560 että PHP2Shelliä vastaan tarkoitetuissa väliaikaisissa toimenpiteissä: mitä ei tarvita, sen kuuluu olla poissa käytöstä.
Milloin palvelin on CVE-2026-115560:n kohteena?
php.netin ohjeen mukaan kolmen ehdon on täytyttävä yhtä aikaa:
- Konfiguraatiossa
session.serialize_handler-arvoksi on asetettuphp_binarytaiphp_serialize. - Sovellus vaihtaa tämän arvon ajon aikana
ini_set()-funktiolla takaisin arvoonphp, ennen kuin se kutsuusession_start()-funktiota. - Session upload progress on aktiivinen.
session.serialize_handler-asetuksen oletusarvo on php. Vaihto konfiguraatiossa ja palautus koodissa on epätavallista, mutta sitä esiintyy vuosien mittaan kasvaneissa omissa kehitystöissä tai kirjastoissa, joilla on oma istunnonkäsittely. Koskeeko se teitä, voi tarkistaa.
Näin tarkistatte konfiguraationne
Ensin voimassa olevat arvot. CLI voi lukea eri php.ini-tiedoston kuin PHP-FPM tai mod_php; tarkistakaa siksi myös verkkopalvelimen tai FPM-poolin konfiguraatio.
php -i | grep -E "session.serialize_handler|session.upload_progress.enabled"
grep -rn "serialize_handler\|upload_progress" /etc/php/ 2>/dev/null # polku vaihtelee jakelun mukaan
Sen jälkeen sovelluskoodi. Seuraava haku on pelkästään lukeva ja näyttää kohdat, joissa käsittelijä asetetaan ajon aikana:
grep -rn "session.serialize_handler" /var/www/ --include="*.php"
Jos haku ei löydä mitään ja käsittelijä on konfiguraatiossa php, kuvattu yhdistelmä on epätodennäköinen. Session upload progress kannattaa silti poistaa käytöstä, sillä php.net mainitsee saman asetuksen myös väliaikaisena toimenpiteenä PHP2Shelliä vastaan.
Ratkaisu: session.upload_progress.enabled=0
Asettakaa arvo php.ini-tiedostossa, FPM-poolissa tai palvelimen konfiguraatiossa. php.netin mukaan nimenomaisesti ei ini_set()-funktiolla eikä .user.ini-tiedostolla, koska siellä se tehoaa liian myöhään tai sovellus voi ylikirjoittaa sen.
; php.ini (kaikille pooleille ja SAPI:ille, jotka lukevat tämän tiedoston)
session.upload_progress.enabled = 0
; tai FPM-poolissa
php_admin_flag[session.upload_progress.enabled] = off
# Apache mod_php:n kanssa, VirtualHostissa tai palvelimen konfiguraatiossa
php_admin_flag session.upload_progress.enabled off
Sen jälkeen käynnistäkää kaikki PHP-workerit uudelleen, esimerkiksi systemctl restart php8.3-fpm tai mod_php:n kanssa Apache. Paketti- ja palvelunimet vaihtelevat jakelun mukaan. Ilman uudelleenkäynnistystä vanha asetus pysyy voimassa. Lisää aiheesta sivulla PHP-FPM ja kaikkien workerien uudelleenkäynnistys.
Tarkistakaa uudelleenkäynnistyksen jälkeen, tehoaako asetus todella: verkkokontekstissa, ei vain komentorivillä. Lyhyesti käyttöön otettu, pääsyltä suojattu phpinfo-sivu näyttää voimassa olevan arvon; poistakaa se heti sen jälkeen.
Asemointi PHP2Shellin rinnalla
CVE-2026-115560 on selvästi suppeampi kuin kaksi PHP2Shell-haavoittuvuutta, jotka tehoavat yleisissä ajotavoissa ilman erityistä konfiguraatiota. Joka joutuu juuri priorisoimaan, kannattaa asentaa ensin PHP2Shell-päivitys ja sen jälkeen asettaa session.upload_progress.enabled=0. Molemmat onnistuvat yhdessä huoltoikkunassa.
Johdolle ja ei-teknisille: CVE-2026-115560 ei ole syy huoleen mutta kohta listalla. Asetus on nopeasti tehty, vaikuttaa tuskin mihinkään sovellukseen havaittavasti ja kattaa samalla yhden PHP2Shelliä vastaan tarkoitetuista väliaikaisista toimenpiteistä. php.netin muut väliaikaiset toimenpiteet löytyvät sivulta Pikatoimet, jos ette voi vielä korjata, yleisiä vihjeitä session-konfiguraatioon sivulta Istuntojen suojaaminen PHP:ssä.
Mitä emme vielä tiedä: mitkä PHP-versiot tarkalleen ovat vaarassa ja mikä julkaisu tuo korjauksen. Päivitämme tämän sivun heti, kun tiedote ilmestyy.
Miten PHP SOS auttaa konkreettisesti?
Palvelimen koventamisen yhteydessä toteutamme ratkaisun pysyvästi ja tarkistettavasti:
- Konfiguraation lukeminen: voimassa olevat session-arvot SAPI:ttain, poolein ja virtual hostein mukaan.
- Koodin läpikäynti: kohdat, joissa käsittelijää tai session-asetuksia muutetaan ajon aikana.
- Poiskytkeminen oikeassa paikassa: php.ini-tiedostossa, poolissa tai palvelimen konfiguraatiossa, sovelluksen ylikirjoittamattomana, uudelleenkäynnistyksen kera.
- Seuranta: Kun bugikorjausjulkaisu ilmestyy, asennamme sen ja dokumentoimme tilan.
Usein kysytyt kysymykset
Onko CVE-2026-115560 osa PHP2Shelliä?
Ilmoitus tuli kaksi päivää PHP2Shell-korjausten jälkeen ja koskee myös itse PHP:tä. Se on kuitenkin oma haavoittuvuutensa omalla CVE-numerollaan ja tehoaa vain tietyssä, epätavallisessa konfiguraatiossa. 21. lokakuuta julkaistut PHP2Shell-päivitykset eivät nykytiedon mukaan korjaa sitä.
Onko CVE-2026-115560:ta vastaan jo päivitystä?
Tilanteessa 25.10.2026 ei. php.net ilmoittaa, että täydellinen tiedote julkaistaan seuraavan tavallisen bugikorjausjulkaisun yhteydessä. Siihen asti session.upload_progress.enabled=0 on suositeltu ratkaisu.
Mikä lakkaa toimimasta, jos poistan session upload progressin käytöstä?
Toiminto ilmoittaa käynnissä olevien tiedostolatausten etenemisen sovellukselle. Vain sovellukset, jotka toteuttavat tällaisen edistymispalkin tämän PHP-toiminnon avulla, menettävät näytön. Itse lataus toimii edelleen.