Kilho.net

PHP CVE-2026-109618 och CVE-2026-109619

Två sårbarheter, CVE-2026-109618 och CVE-2026-109619, har offentliggjorts. De kan möjliggöra fjärrkörning av kod (RCE) utan autentisering vid onormal avslutning av PHP-kärnans motor och hantering av förfrågningars tillstånd. Problemet finns inte i webbapplikationer som WordPress eller gnuboard, utan beror på minneskorruption och Use-After-Free i själva PHP-motorn. För att åtgärda problemet ska du omedelbart uppgradera till en version med säkerhetskorrigering, till exempel PHP 8.5.12, 8.4.27, 8.3.36 eller 8.2.35, och starta om workerprocesserna.

En sårbarhet i PHP-motorn som inte kan stoppas genom att bara uppdatera webbapplikationen

Den 21 oktober 2026 (UTC) offentliggjorde PHP-teamet två säkerhetsbrister med en angiven riskpoäng på 9,2 enligt CVSS v4.0. En angripare kan köra godtycklig kod på servern genom att skicka en manipulerad HTTP-förfrågan, utan att behöva logga in.

Bristerna finns i PHP-kärnans lager, som tolkar webbförfrågningar och rensar minne. Därför är du fortfarande utsatt om själva PHP-körtiden är gammal, även om webbplatsens CMS och plugin-program hålls uppdaterade. I synnerhet har det bekräftats att en enda förfrågan i miljöer med Apache och standardkonfigurationen mod_php kan räcka för att köra kod innan webbapplikationens kod ens börjar köras.

Om attacken lyckas får angriparen behörighet till det systemkonto som PHP-processen körs under. Det innebär inte omedelbart root-behörighet, men angriparen kan skapa ett webbshell i webbrotens katalog eller läsa anslutningsuppgifter till databasen från konfigurationsfiler och därmed läcka eller ändra interna data. Om flera webbplatser på samma server delar PHP-FPM-kontot finns även en risk att ett intrång på en webbplats sprids till andra webbplatser på servern.

Så uppstår minneskorruption och Use-After-Free vid onormal avslutning

Båda sårbarheterna uppstår när minnet inte rensas säkert efter ett exceptionellt tillstånd under behandlingen av en förfrågan. Förutsättningarna och den interna funktionen skiljer sig åt.

CVE-2026-109618 (minneskorruption under hantering av överskriden minnesgräns): När PHP överskrider den tillåtna minnesgränsen (Out-Of-Memory) under behandlingen av en förfrågan anropar PHP longjmp() för att omedelbart avbryta körningen. Om arbetet avbryts innan den interna datastrukturen för förfrågan har initierats helt, kan det ofullständiga tillståndet bli kvar utan att återställas. När den efterföljande rutinen för rensning (cleanup) behandlar detta oinitierade minne som giltiga data kan det leda till minneskorruption och fjärrkörning av kod.

CVE-2026-109619 (Use-After-Free genom referens till frigjort minne från en tidigare förfrågan): Vissa globala tillstånd och felhanteringstillstånd i PHP pekar tillfälligt på ett minnesområde som ägs av en enskild förfrågan. När en förfrågan avslutas onormalt på grund av ett allvarligt fel (fatal error) eller minnesbrist kan själva minnet frigöras, medan den interna pekarreferensen som pekar på det blir kvar utan att initieras om. I miljöer där workerprocesser återanvänds, till exempel PHP-FPM eller mod_php, kan samma worker ta emot och behandla nästa HTTP-förfrågan och läsa från det redan frigjorda minnesområdet igen (Use-After-Free), vilket skapar en väg till kodkörning.

Det officiella säkerhetsmeddelandet anger funktionen för uppladdningsförlopp i sessioner (session.upload_progress), konfigurationsvarningar som skrivs ut före initieringen av en förfrågan och backtrace vid allvarliga fel i PHP 8.5 (fatal_error_backtraces) som bekräftade vägar för CVE-2026-109619. Samtidigt framgår det att andra varianter av angreppsvägar finns kvar även om dessa vägar blockeras.

Patchstatus per PHP-version och påverkan beroende på körmiljö

PHP 8.2–8.5 i versioner lägre än de korrigerade versionerna påverkas. Version 8.1 och äldre, som inte längre stöds, omfattas inte av PHP-projektets officiella uppdateringar. När det gäller körsätt omfattas alla installationer som behandlar webbförfrågningar, däribland PHP-FPM, mod_php, php-cgi, FrankenPHP och LiteSpeed. I det officiella meddelandet bedöms risken vara högst för mod_php. Red Hat klassificerar PHP-FPM som villkorligt påverkat via vägar på applikationsnivå.

PHP-versionsserie Sårbart versionsintervall Korrigerad patchversion Supportstatus och anmärkning
PHP 8.5 8.5.0 ~ 8.5.11 8.5.12 Officiell säkerhetsuppdatering tillgänglig
PHP 8.4 8.4.0 ~ 8.4.26 8.4.27 Officiell säkerhetsuppdatering tillgänglig
PHP 8.3 8.3.0 ~ 8.3.35 8.3.36 Officiell säkerhetsuppdatering tillgänglig
PHP 8.2 8.2.0 ~ 8.2.34 8.2.35 Officiell säkerhetsuppdatering tillgänglig
PHP 8.1 och äldre Omfattas inte av officiella uppdateringar Ingen officiell release Supporten har upphört (EOL). För 7.4, 8.0 och 8.1 tillhandahålls endast minimala backportar för källkodsbyggen. Kontrollera paket från distributioner och LTS-leverantörer

Verifierad miljö: Den 22 oktober 2026 uppgraderades PHP 8.4.26 till 8.4.27 i en Linux-servermiljö som använder Remi-arkivet. Omstart av PHP-FPM-worker och hantering av webbförfrågningar verifierades.

Så installerar du paketuppdateringen och tillämpar en begränsande PHP-FPM-konfiguration

PHP-teamet uppger att enbart konfigurationsändringar inte kan blockera alla angreppsvägar och att uppdatering till en patchad version är den enda fullständiga lösningen. Efter uppdateringen kan du även stänga av onödiga funktioner för att minska attackytan.

  1. Installera uppdateringen av PHP-paketen
    Uppgradera paketen via operativsystemets pakethanterare till den korrigerade versionen för den PHP-serie du använder, till exempel 8.4.27 för 8.4-serien. Kontrollera först CLI-versionen i terminalen efter installationen.

    php -v

    När kommandot körs visas den uppdaterade versionsnumret och byggdatumet, till exempel PHP 8.4.27 (cli). CLI-versionen och versionen för den PHP-process som webbservern faktiskt använder kan dock skilja sig åt. Därför måste du genomföra nästa steg.

  2. Justera PHP-FPM-inställningarna för att minska attackytan (valfri och tillfällig begränsning)
    Om det är svårt att omedelbart tillämpa uppdateringen, eller om du vill lägga till ett extra försvarslager, ska du säkerhetskopiera php.ini eller PHP-FPM-poolens konfigurationsfil (till exempel /etc/php-fpm.d/www.conf) och justera följande inställningar.

    php_admin_value[session.upload_progress.enabled] = Off
    php_admin_value[post_max_size] = 32M
    php_admin_value[upload_max_filesize] = 30M

    Genom att inaktivera session.upload_progress.enabled kan den bekräftade sessionsbaserade angreppsvägen blockeras. Om du sänker post_max_size (till exempel till 8M i miljöer där filuppladdning inte behövs eller 32M där den behövs) blir det svårare att framkalla minnesbrist med stora förfrågningar. Ta då hänsyn till storleken på multipart-tilläggshuvuden och ange upload_max_filesize något lägre än post_max_size. I PHP 8.5-miljöer ska du även tillämpa fatal_error_backtraces = 0.

  3. Kontrollera PHP-FPM-konfigurationens syntax och starta om processerna
    När konfigurationen har sparats ska du testa att den inte innehåller syntaxfel och starta om PHP-FPM-tjänsten.

    php-fpm -t
    systemctl restart php-fpm

    Om konfigurationen är korrekt visas meddelandet NOTICE: configuration file ... test is successful när php-fpm -t körs. Workerprocesserna måste startas om för att gamla workerprocesser som finns kvar i minnet ska avslutas och den nya patchen och konfigurationen ska börja gälla.

  4. Kontrollera den aktiva versionen genom en webbförfrågan
    Öppna informationsfliken Site Health i WordPress eller en diagnostiksida för webbserverintegrationen och kontrollera att PHP-FPM-workern som behandlar webbförfrågningar svarar med en patchad version, till exempel 8.4.27. Om du har skapat en tillfällig diagnostikfil ska du radera den direkt efter kontrollen, så att systeminformation inte exponeras externt.

Åtgärder vid försenad uppdatering eller bieffekter av konfigurationsändringar

När paket inte kan hämtas eftersom speglingen i tredjepartsarkiv som Remi är försenad

Strax efter en kritisk säkerhetspatch kan hög trafik eller fördröjd synkronisering göra att uppdateringspaket inte visas direkt i tredjepartsarkiv, till exempel rpms.remirepo.net, eller att nedladdningen går långsamt. Det officiella meddelandet uppger att uppdateringar inte publiceras i detta volontärdrivna arkiv samma dag som de tillkännages och rekommenderar att du byter till distributionspaket eller bygger från källkod.

I så fall kan du ange adressen till en spegelserver med normal hastighet och slutförd synkronisering direkt i arkivets konfiguration och genomföra uppdateringen. Även om du ändrar spegel manuellt ska GPG-signaturkontrollen (gpgcheck=1) vara aktiverad för att förhindra manipulation av paketen. Om speglar inte kan användas ska du använda operativsystemets officiella backportpaket eller kompilera källkoden direkt.

När minnesbrist (OOM) eller nekade uppladdningar befaras efter en begränsande konfiguration

Det officiella meddelandet anger memory_limit = -1 (obegränsat) som en begränsning för CVE-2026-109618 när uppdateringen inte kan genomföras direkt, och rekommenderar samtidigt minnesbegränsningar för containrar eller cgroup. På en server med begränsat fysiskt minne kan ett borttaget minnestak dock leda till att en enda förfrågan förbrukar allt serverminne och att operativsystemets OOM Killer tvingar viktiga daemoner att avslutas. Detta är endast en tillfällig åtgärd före uppdateringen. När du har uppdaterat till den patchade versionen är det säkrare att återställa den ursprungliga minnesgränsen.

När du sänker post_max_size från det tidigare värdet, till exempel 64MB, ska du först kontrollera hur webbplatsen överför filer. På webbplatser där administratörer laddar upp stora säkerhetskopior eller plugin-program direkt via en webbsida kan förfrågningar blockeras. Om stora filer däremot överförs via SFTP eller rsync, eller om applikationen redan har en gräns på högst 30MB, påverkas tjänsten inte av att PHP:s uppladdningsgräns sänks till 32MB.

Om PHP-FPM-workern dessutom avslutas onormalt då och då efter en versionsuppgradering kan OPcache-inställningen för JIT (Just-In-Time) vara värd att undersöka. JIT-funktionen, till exempel opcache.jit=1255, har ingen direkt koppling till den här säkerhetsbristen, men om den tidigare har orsakat stabilitetsproblem vid versionsbyten kan du inaktivera den med opcache.jit=off i konfigurationsfilen för att förebygga krascher.

Vanliga frågor

Löser det problemet att uppdatera WordPress eller plugin-program till den senaste versionen?

Nej. Sårbarheten finns i PHP-kärnans motor, innan WordPress eller säkerhetsplugin-program körs. Du kan tillfälligt blockera kända attackmönster med en brandvägg för webbapplikationer (Cloudflare, AWS WAF med flera), men den grundläggande lösningen är att uppdatera PHP-versionen på servern via hostingleverantören eller serveradministratören.

Är det säkert att inte uppdatera om jag stänger av session.upload_progress.enabled?

Nej. Det officiella meddelandet uppger att inställningen endast blockerar den bekräftade sessionsvägen och inte andra varianter. Inställningen ska dessutom placeras i php.ini, PHP-FPM-poolen eller serverkonfigurationen, där den tillämpas innan förfrågan tolkas, inte i ini_set() eller FPM:s .user.ini. Alla workerprocesser måste startas om. Den fullständiga lösningen är att installera patchen.

Kan jag gå direkt i produktion utan ytterligare kontroller när patchen är installerad?

Uppdateringen stoppar framtida angrepp, men visar inte om ett tidigare intrång har skett. Det är därför bra att kontrollera om webbplatsen redan har komprometterats även efter uppdateringen. Kontrollera om PHP-filer, till exempel webbshell, nyligen har skapats eller ändrats på ett avvikande sätt i webb katalogen och undersök webbserverns åtkomstloggar och PHP:s felloggar efter onormalt stora POST-förfrågningar eller upprepade minnesfel.

Hur ska jag agera i container- eller molnbildsmiljöer?

PHP-körtiden som ingår i en container ändras inte automatiskt även om du uppdaterar paketen på värdservern. Bygg därför om containerbilden med en basbild som innehåller den patchade versionen (8.5.12, 8.4.27, 8.3.36 eller 8.2.35) och distribuera den på nytt.

Källor