PHP2Shell: alvarlegir veikleikar í kjarna PHP PHP2Shell: critical vulnerabilities in core PHP
Tilkynning frá CERT-ISAdvisory from CERT-IS →
PHP2Shell er samheiti yfir alvarlegra öryggisveikleika í PHP sem nýlega hafa verið lagfærðir. Þeir geta gert óauðkenndum árásaraðilum kleift að keyra kóða á netþjóni eða komast yfir viðkvæm gögn úr minni PHP-ferla. PHP knýr um 70% vefsíðna, þar á meðal WordPress, Drupal og MediaWiki (Wikipedia).
PHP2Shell is a family of critical vulnerabilities recently fixed in core PHP. They can allow unauthenticated attackers to execute code or expose sensitive process memory. PHP powers approximately 70% of websites, including platforms such as WordPress, Drupal and Wikipedia's MediaWiki.
Hvað er PHP2Shell?What is PHP2Shell?
PHP2Shell er heiti á tveimur alvarlegum minnisöryggisveikleikum (e. memory-safety vulnerabilities) í PHP sem geta gert árásaraðilum kleift að keyra kóða á vefþjónum án auðkenningar eða komast yfir viðkvæmar upplýsingar úr minni þeirra.
Veikleikarnir eru skráðir undir CVE-2026-109618 og CVE-2026-109619 og tengjast annars vegar rangri meðhöndlun þegar tiltækt minni þrýtur (e. out-of-memory) og hins vegar ógildum minnisvísunum sem haldast á milli beiðna (e. stale global state).
Veikleikarnir eru í PHP sjálfu en ekki í þeim veflausnum sem nota PHP. Vefsíður geta því verið berskjaldaðar þótt forritskóði þeirra sé að öðru leyti öruggur.
WordPress, Drupal og Joomla voru notuð við öryggisprófanir til að sýna fram á hvernig hægt væri að nýta veikleikana til að keyra kóða á vefþjónum án auðkenningar (e. unauthenticated remote code execution). Misnotkun veikleikanna er þó ekki bundin við þessar veflausnir.
Þann 21. október 2026 voru gefnar út öryggisuppfærslur fyrir PHP sem lagfæra veikleikana. Þróunarteymi PHP brást við með miklum hraða og fagmennsku og vann náið með öryggissérfræðingum að lagfæringum.
PHP2Shell is a family of memory-safety vulnerabilities in core PHP. It comprises two related vulnerability classes, tracked as two CVEs: corruption caused by out-of-memory handling, and stale global state that survives across requests.
The vulnerable code is in PHP itself. Websites can be affected even when their application code is secure, including a simple “Hello World” application running on an affected PHP version.
Sites running the latest patched PHP releases are protected. The PHP team responded to these reports with exceptional speed and professionalism, working closely with researchers to deliver comprehensive fixes.
WordPress, Drupal and Joomla were representative targets used to demonstrate unauthenticated remote code execution. Exploitation does not require one of those applications.
Hvað geta árásaraðilar gert?What attackers can do
Prófanir sýndu fram á að hægt væri að nýta veikleikana til að keyra kóða á vefþjónum án auðkenningar. Þetta var staðfest með prófunum á WordPress, Drupal og Joomla, þar sem notaðar voru nýjustu gámamyndir (e. container images) sem tiltækar voru þegar prófanirnar fóru fram.
Einnig var sýnt fram á að hægt væri að nálgast viðkvæmar upplýsingar úr minni PHP-ferla, óháð því hvaða veflausn væri í notkun.
We demonstrated remote code execution against WordPress, Drupal and Joomla using their latest container images at the time of testing. We also demonstrated application-agnostic memory disclosure.
Keyra kóða án auðkenningarExecute code without authentication
Árásaraðilar geta keyrt kóða á viðkvæmum vefþjónum án þess að þurfa að skrá sig inn. Það getur gert þeim kleift að ná stjórn á þjónustunni, komast yfir viðkvæm gögn, færa sig yfir í önnur kerfi innan netkerfisins eða breyta efni vefsíðna.
On affected servers – potentially taking control of the server, accessing sensitive data, moving laterally, or defacing its websites.
Lesa viðkvæmar upplýsingar úr minniRead sensitive memory
Árásaraðilar geta nálgast upplýsingar úr minni PHP-ferla, svo sem lykilorð, auðkenningartákn (e. authentication tokens), API-lykla og stafræn skilríki. Upplýsingarnar geta tilheyrt öðrum beiðnum eða þjónustum sem keyra á sama netþjóni.
From the PHP process, including passwords, authentication tokens, API keys and certificates belonging to other requests or the server itself.
Stela upplýsingum án þess að keyra kóðaSteal data without code execution
Árásaraðilar geta komist yfir viðkvæmar upplýsingar beint úr minni PHP-ferla án þess að þurfa fyrst að ná fram fjarkeyrslu kóða. Slíkar árásir geta verið erfiðari í greiningu fyrir öryggislausnir sem einblína á að greina keyrslu skaðlegs kóða.
Through memory disclosure, without first achieving remote code execution. This can make the activity harder to detect with tools focused on malicious code execution.
VeikleikarnirThe vulnerabilities
| CVE | FlokkurClass | ÁhrifImpact | Sýnt fram áDemonstrated |
|---|---|---|---|
| CVE-2026-109618 | Spilling vegna minnisskorts (OOM)Out-of-memory (OOM) corruption |
Keyra kóða án auðkenningar sem PHP-vinnsluferli vefþjónsins (e. web worker)Execute code without authentication as the PHP web worker |
Fjarkeyrsla kóða án auðkenningar á WordPress, Drupal og JoomlaPre-authentication RCE on WordPress, Drupal and Joomla |
| CVE-2026-109619 | Úrelt sameiginleg staða milli beiðnaStale global state across requests |
Kalla fram use-after-free til að leka minni vinnsluferlis eða keyra kóðaTrigger a use-after-free to disclose worker memory or execute code |
Fjarkeyrsla kóða án auðkenningar á WordPress og Drupal; minnisleki óháður forritiPre-authentication RCE on WordPress and Drupal; application-agnostic remote memory disclosure |
Berskjaldaðar og lagfærðar útgáfurVulnerable and fixed PHP releases
| PHP-greinPHP branch | Berskjaldaðar útgáfurVulnerable releases | Fyrsta lagfærða útgáfaFirst fixed release |
|---|---|---|
8.2 | 8.2.34 og eldraand older | 8.2.35 |
8.3 | 8.3.35 og eldraand older | 8.3.36 |
8.4 | 8.4.26 og eldraand older | 8.4.27 |
8.5 | 8.5.11 og eldraand older | 8.5.12 |
8.3.33-1.el10_2.alma.1 lagfært
þótt 8.3.33 sé lægra en 8.3.36. Berðu pakkaútgáfuna saman við töfluna yfir stýrikerfi hér að neðan eða
öryggistilkynningu dreifingarinnar. Breytingaskrá pakkans sýnir hvað er komið inn:
rpm -q --changelog php-common | head.
Red Hat, AlmaLinux, Rocky, Debian, Ubuntu and others often backport fixes into older releases
without changing the version number. For example, 8.3.33-1.el10_2.alma.1 is patched even though
8.3.33 is below 8.3.36. Compare the package version with the operating systems table below or your
distribution's advisory. The package changelog shows what is included:
rpm -q --changelog php-common | head.
Sláðu inn PHP-útgáfuna þína (t.d. 8.3.21) til að sjá hvort hún sé viðkvæm. Enter your PHP version (e.g. 8.3.21) to see whether it is affected.
Staða lagfæringaFix status
Staða lagfæringa hjá algengustu Linux-dreifingum og PHP-veitum. Taflan er uppfærð handvirkt og staðan breytist hratt – farðu alltaf eftir tilkynningu dreifingarinnar sjálfrar.
Fix status for the most common Linux distributions and PHP sources. The table is updated by hand and the situation changes quickly – always go by your distribution's own advisory.
| DreifingDistribution | ÚtgáfaRelease | PHP | StaðaStatus | Lagfærð pakkaútgáfaFixed package | HeimildSource |
|---|---|---|---|---|---|
| Kveiktu á JavaScript til að sjá töfluna.Enable JavaScript to see the table. | |||||
PHP-útgáfan í algengustu gámamyndunum sem innihalda PHP, lesin beint úr stillingum myndanna á Docker Hub (amd64) og uppfærð sjálfkrafa á þriggja tíma fresti. Mynd sem keyrir hjá þér er aðeins lagfærð ef þú hefur sótt nýju útgáfuna og ræst gáminn upp á nýtt.
The PHP version in the most popular container images that include PHP, read directly from the image configuration on Docker Hub (amd64) and refreshed automatically every three hours. An image you run is only fixed once you have pulled the new version and recreated the container.
docker compose pull && docker compose up -d
docker compose exec <service> php -v
| GámamyndImage | PHP | StaðaStatus | ByggðBuilt | NiðurhölPulls |
|---|---|---|---|---|
| Hleð…Loading… | ||||
Eldveggir, gagnageymslur og annar búnaður sem notar PHP í vef- eða stjórnviðmóti. Þar getur þú yfirleitt ekki uppfært PHP sjálf(ur) og þarft að bíða eftir framleiðandanum. Þangað til: ekki hafa stjórnviðmótið opið á netinu – leyfðu aðeins aðgang í gegnum VPN eða frá stjórnneti. Taflan er uppfærð handvirkt; farðu alltaf eftir tilkynningu framleiðandans.
Firewalls, storage and other devices that use PHP in their web or management interface. You usually can't update PHP on them yourself and have to wait for the vendor. Until then: keep the management interface off the internet – allow access only over a VPN or from a management network. The table is updated by hand; always go by the vendor's own advisory.
| BúnaðurProduct | ÚtgáfurVersions | StaðaStatus | Lagfært íFixed in | HeimildSource |
|---|---|---|---|---|
| Kveiktu á JavaScript til að sjá töfluna.Enable JavaScript to see the table. | ||||
Hvað á að gera?What should you do?
-
Athugaðu hvaða PHP-útgáfu þú keyrirCheck which PHP version you run
Vefþjónninn getur notað aðra PHP-útgáfu en skipanalínan (t.d. PHP-FPM eða mod_php). Staðfestu útgáfuna sem vefurinn keyrir í raun og veru.
The web server may use a different PHP version than the command line (e.g. PHP-FPM or mod_php). Confirm the version your site actually runs.
php -v php-fpm -v -
Uppfærðu PHPUpdate PHP
Uppfærðu í lagfærða útgáfu fyrir þína grein (sjá töflu hér að ofan) og endurræstu PHP-FPM eða vefþjóninn svo breytingin taki gildi. Ef þú keyrir grein eldri en 8.2, sem nýtur ekki lengur stuðnings, skaltu færa þig yfir í studda grein.
Update to the fixed release for your branch (see the table above) and restart PHP-FPM or the web server so the change takes effect. If you run a branch older than 8.2, which is no longer supported, move to a supported branch.
Uppfærðu alla pakka (líka PHP frá deb.sury.org eða Ondřej-PPA):
Update all packages (also PHP from deb.sury.org or the Ondřej PPA):
sudo apt update sudo apt upgradeEndurræstu PHP-FPM, eða Apache ef þú notar mod_php:
Restart PHP-FPM, or Apache if you use mod_php:
sudo systemctl restart 'php*-fpm.service' sudo systemctl restart apache2Staðfestu útgáfuna og berðu hana saman við dálkinn „Lagfærð pakkaútgáfa“ í töflunni yfir stýrikerfi:
Check the version and compare it with the “Fixed package” column in the operating systems table:
dpkg -l 'php*-common' | grep ^iiUppfærðu PHP-pakkana (líka frá Remi):
Update the PHP packages (also from Remi):
sudo dnf upgrade 'php*'Endurræstu PHP-FPM, eða Apache ef þú notar mod_php:
Restart PHP-FPM, or Apache if you use mod_php:
sudo systemctl restart php-fpm sudo systemctl restart httpdStaðfestu útgáfuna og berðu hana saman við dálkinn „Lagfærð pakkaútgáfa“ í töflunni yfir stýrikerfi:
Check the version and compare it with the “Fixed package” column in the operating systems table:
rpm -qa 'php*-common'Á RHEL, Alma og Rocky 8 og 9 skaltu athuga hvaða PHP-straum (module stream) þú notar með
dnf module list --enabled php. Ekki eru allir straumar lagfærðir – sjá töfluna yfir stýrikerfi. SUSE:sudo zypper patch.On RHEL, Alma and Rocky 8 and 9, check which PHP module stream you use with
dnf module list --enabled php. Not every stream is fixed – see the operating systems table. SUSE:sudo zypper patch. -
Ertu með vefinn í hýsingu?Is your site hosted?
Hafðu samband við hýsingaraðilann þinn og spurðu hvort PHP hafi verið uppfært. Það dugar ekki eitt og sér að uppfæra WordPress, Drupal eða Joomla – veikleikinn er í PHP sjálfu.
Contact your hosting provider and ask whether PHP has been updated. Updating WordPress, Drupal or Joomla alone is not enough – the vulnerability is in PHP itself.
-
Endurnýjaðu leyndarmál ef grunur er um misnotkunRotate secrets if you suspect exploitation
Þar sem minnisleki getur afhjúpað lykilorð, tóka, API-lykla og skilríki skaltu íhuga að endurnýja þau ef netþjónn keyrði viðkvæma útgáfu og var aðgengilegur af netinu.
Because memory disclosure can expose passwords, tokens, API keys and certificates, consider rotating them if a server ran an affected version and was reachable from the internet.
-
Tilkynntu atvikReport incidents
Íslensk fyrirtæki og stofnanir geta tilkynnt öryggisatvik til CERT-IS, netöryggissveitar Íslands: cert.is.
Icelandic companies and organisations can report security incidents to CERT-IS, the national CERT of Iceland: cert.is.
SELinux og AppArmor: takmarkaðu tjóniðSELinux and AppArmor: limit the damage
SELinux og AppArmor eru öryggiskerfi í Linux-kjarnanum (e. mandatory access control) sem takmarka hvað hvert forrit má gera, óháð því hvaða notandi keyrir það. Þau koma ekki í veg fyrir PHP2Shell-veikleikana sjálfa og stöðva ekki minnisleka innan PHP-ferlisins. En ef árásaraðili nær að keyra kóða í gegnum PHP getur vel stillt SELinux eða AppArmor hindrað hann í að breyta vefskrám, ræsa önnur forrit, tengjast út á netið eða lesa skrár utan vefsvæðisins – og þannig stöðvað innbrotið við vefþjóninn í stað þess að það breiðist út.
Uppfærsla PHP er eina raunverulega lausnin. SELinux og AppArmor eru viðbótarvörn (e. defense in depth) sem skiptir mestu máli einmitt í veikleikum af þessu tagi.
SELinux and AppArmor are Linux kernel security systems (mandatory access control) that limit what each program may do, regardless of which user runs it. They do not prevent the PHP2Shell vulnerabilities themselves and do not stop memory disclosure inside the PHP process. But if an attacker gets code running through PHP, a well-configured SELinux or AppArmor can stop them from modifying web files, starting other programs, connecting out to the network or reading files outside the web root – containing the break-in at the web server instead of letting it spread.
Updating PHP is the only real fix. SELinux and AppArmor are defense in depth – and this kind of vulnerability is exactly where it matters most.
SELinux
Red Hat, AlmaLinux, Rocky Linux, CentOS Stream, Oracle Linux, Fedora, Amazon Linux Red Hat, AlmaLinux, Rocky Linux, CentOS Stream, Oracle Linux, Fedora, Amazon Linux
SELinux á að vera í Enforcing-ham og vefþjónninn og PHP-FPM eiga að keyra í
httpd_t-samhenginu – ekki unconfined_t. Hafðu sem fæstar httpd_*-heimildir
virkar; t.d. leyfir httpd_can_network_connect PHP að tengjast hvert sem er.
SELinux should be in Enforcing mode, and the web server and PHP-FPM should run in the
httpd_t context – not unconfined_t. Keep as few httpd_* booleans on as
possible; httpd_can_network_connect, for example, lets PHP connect anywhere.
getenforce
sestatus
# web server and PHP-FPM should show httpd_t
ps -eZ | grep -E 'httpd|php-fpm'
# booleans that widen what PHP may do
getsebool -a | grep -E 'httpd_(can_network_connect|execmem|unified|enable_cgi) '
# actions SELinux blocked today
sudo ausearch -m avc -ts today
Slökktu aldrei á SELinux (setenforce 0) til að leysa vandamál – lagaðu
frekar merkingar með restorecon eða kveiktu á einni tiltekinni heimild. Amazon Linux 2023 er sjálfgefið
í Permissive-ham, sem skráir en stöðvar ekki.
Never turn SELinux off (setenforce 0) to fix a problem – fix labels with
restorecon or enable one specific boolean instead. Amazon Linux 2023 defaults to
Permissive mode, which logs but does not block.
AppArmor
Ubuntu, Debian, SUSE / openSUSE Ubuntu, Debian, SUSE / openSUSE
AppArmor er yfirleitt virkt, en verndar aðeins forrit sem hafa snið (e. profile). Á mörgum
kerfum er ekkert snið fyrir Apache eða PHP-FPM, svo vefþjónninn keyrir óvarinn (unconfined) þótt
AppArmor sé í gangi. Athugaðu það og íhugaðu að bæta við sniði.
AppArmor is usually enabled, but it only protects programs that have a profile. On many systems
there is no profile for Apache or PHP-FPM, so the web server runs unconfined even though AppArmor
is active. Check it, and consider adding a profile.
sudo aa-status
# "unconfined" = no profile protects it
ps auxZ | grep -E 'apache2|php-fpm|nginx'
# actions AppArmor blocked
sudo journalctl -k | grep 'apparmor="DENIED"'
Snið má búa til með aa-genprof og prófa í complain-ham áður en
því er framfylgt (aa-enforce).
Profiles can be built with aa-genprof and tested in complain
mode before being enforced (aa-enforce).
Gámar: Docker notar sjálfgefið AppArmor-sniðið docker-default á Ubuntu- og
Debian-hýslum, og Podman notar SELinux (container_t) á Red Hat-hýslum. Keyrðu ekki PHP-gáma með
--privileged, --security-opt apparmor=unconfined eða --security-opt label=disable.
Containers: Docker applies the docker-default AppArmor profile by default on
Ubuntu and Debian hosts, and Podman uses SELinux (container_t) on Red Hat hosts. Don't run PHP
containers with --privileged, --security-opt apparmor=unconfined or
--security-opt label=disable.