Pe 21 octombrie 2026, proiectul PHP a publicat actualizări de securitate pentru două vulnerabilități critice de execuție remote a codului (RCE), urmărite sub denumirea colectivă PHP2Shell: CVE-2026-109618 și CVE-2026-109619, ambele evaluate la CVSS v4.0 9.2. Vulnerabilitățile se află în motorul PHP, nu în framework-uri sau cod aplicație, ceea ce înseamnă că niciun patch la nivel de aplicație nu mitigate riscul. Orice server web care rulează PHP — Apache cu mod_php, NGINX cu PHP-FPM, containere, instanțe bare-metal — este expus. Exploatarea nu necesită autentificare și poate avea loc înainte ca orice cod PHP al aplicației să fie executat. Dacă administrezi servere dedicate, VPS-uri sau clustere Kubernetes care servesc aplicații PHP (WordPress, Drupal, Magento, Laravel, Symfony sau dashboards interne), acest articol îți oferă planul concret de identificare, patching și verificare a compromisului.
Ghid ServerSpan relevant: CVE-2026-12184: Ghid de Patch pentru DoS în PHP-FPM (8.3.32 / 8.4.21 / 8.5.6).
–
Versiunile PHP Patchuite și Pachetele Distribuțiilor — Ce Trebuie Să Instalezi Acum
Fixurile oficiale sunt disponibile în următoarele versiuni upstream: PHP 8.5.12, 8.4.27, 8.3.36 și 8.2.35 (ultima ramură 8.2, EOL 31 decembrie 2026). Ramura 8.6 RC4 include fixul, dar imaginea oficială php:8.6-rc era pe RC3 la 21 octombrie — reconstruiește după publicarea RC4. Pentru PHP 8.1 și mai vechi, nu există release-uri oficiale; PHP a publicat backport-uri minime de sursă pentru 7.4, 8.0 și 8.1, dar doar distribuțiile pot livra pachete patched.
Dacă PHP vine din pachetele distribuției (apt, dnf, apk), upgrade-ează pachetul, nu compilă din sursă. Versiunile pachetelor patched la 22 octombrie 2026:
| Distribuție | Pachet PHP | Versiune Patched | |––––-|––––|––––––| | Ubuntu 26.04 | php8.5 | 8.5.4-0ubuntu1.5 | | Ubuntu 24.04 | php8.3 | 8.3.6-0ubuntu0.24.04.13 | | Ubuntu 22.04 | php8.1 | 8.1.2-1ubuntu2.28 | | Debian 13 | php8.4 | 8.4.27-1~deb13u1 | | Debian 12 | php8.2 | 8.2.35-1~deb12u1 | | Alpine 3.24 | php83/php84/php85 | 8.3.36 / 8.4.27 / 8.5.12 | | RHEL 10 | php / php8.4 | 8.3.36-1.el10_2 (RHSA-2026:87070) / 8.4.27-1.el10_2 (RHSA-2026:87071) | | RHEL 9 | php:8.2 / php:8.3 | 8.2.35-1 (RHSA-2026:87072) / 8.3.36-1 (RHSA-2026:87079) — php:8.4 nu avea fix la 22 oct | | RHEL 8 | php:7.4 | 7.4.33-8 (RHSA-2026:87080) — stream-uri retrase (7.2, 7.3, 8.0) fără fix |
Important: Ubuntu și Red Hat mențin numărul de versiune upstream vechi și backportează fixul. Compara versiunile pachetelor, nu outputul php -v. După upgrade, repornește fiecare proces care rulează PHP (php-fpm, httpd, nginx, containere).
Pentru infrastructură gazduită pe servere dedicate sau VPS-uri gestionate, verifică compatibilitatea cu oferta de servere dedicate pentru a te asigura că hardware-ul suportă versiunile PHP necesare.
–
Identifică Proiectele PHP din GitLaB — Container Scanning, Orbit și Code Search
Înainte de a patcha, trebuie să știm ce rulează PHP. GitLab oferă trei perspective statice; folosește-le în această ordine:
1. Container Scanning — Detectează PHP Instalat ca Pachet OS
Activează template-ul în .gitlab-ci.yml:
include:
- template: Security/Container-Scanning.gitlab-ci.yml
container_scanning:
variables:
# Experimental, Ultimate only: raportează runtime-uri instalate fără package manager
CS_BINARY_SCAN: "true"
Analizorul container scanning 8.7.0 (lansat 29 octombrie) adaugă scanare binară experimentală (CS_BINARY_SCAN: "true") care detectează PHP compilat din sursă — imaginile oficiale php:* nu lăsând înregistrare de pachet. La nivel de grup, o scan execution policy forțează scanning-ul pe toate proiectele; o merge request approval policy blocă merge-ul dacă o modificare reintroduce o versiune vulnerabilă.
Limitare: Fără
CS_BINARY_SCAN, container scanning nu vede PHP din imaginile oficiale (compilat din sursă). Pașii 2 și 3 acoperă acest gol.
2. GitLab Orbit — Graficul Cunoașterii pentru Toate Proiectele
Cu Orbit activat pe grupul top-level, un agent poate lista toate proiectele care conțin cod PHP, inclusiv cele care folosesc imagini php:* oficiale sau compilă PHP. Orbit indexează doar branch-ul default și e în beta pe Premium/Ultimate (GitLab.com și Self-Managed). Nu parsează încă Dockerfile-urile (issue #1416) — deci folosește lista Orbit pentru a restrânge code search-ul următor.
Poți întreba Orbit: «Care proiecte au finding-uri deschise pentru CVE-2026-109618 sau CVE-2026-109619?» după ce scan-urile au rulat.
3. Exact Code Search — Găsește Dockerfile-uri și Composer.json
La nivel de grup top-level, activează regex (butonul .* dreapta casetei de căutare) și rulează:
Imagini de bază container (inclusiv derivate: wordpress, frankenphp, bitnami/php-fpm):
lang:Dockerfile ^FROM.*php
Proiecte Composer (chiar fără Dockerfile sau cu FROM $BASE_IMAGE):
file:composer\.json$
Verifică versiunea pentru fiecare rezultat: citește linia
FROM php:<tag>sau ruleazăphp -vîn containerul pornit și compară cu tabelul de mai sus. Lista de dependențe grup arată pachete Composer și versiuni framework, nu versiunea runtime PHP.
4. Compară cu Inventarul Runtime — Golul Real
Container scanning și code search arată ce declară și construiește repo-ul, nu ce rulează. PHP poate rula pe servere configurate manual (mod_php, PHP-FPM în config nginx), pe host-uri Ansible/Puppet/Chef, sau în containere Kubernetes fără pipeline activ. Pentru K8s, operational container scanning (agent GitLab) scanează imaginile care rulează în cluster — aceeași detecție doar-pachet.
Tratează fiecare runtime PHP care apare într-o singură vizualizare (static vs. runtime) ca un gol de investigat. Pentru infrastructură fizică sau virtualizată, un inventar CMDB sau Ansible fact collection e esențial. Dacă folosești servere dedicate pentru găzduire aplicații PHP, asigură-te că monitorizarea infrastructurii include inventory-ul complet al runtime-urilor.
–
Remediere la Scară cu GitLab Duo Agent Platform — Automatizează Fixul și Review-ul
Descoperirea e doar începutul. GitLab Duo Agent Platform poate executa pașii de mai sus și să automatizeze remedierea repetitivă:
- Creează epic cu issue-uri per proiect via Agentic Chat: un issue per proiect afectat, asignat Developer Flow.
- Developer Flow deschide MR care actualizează tag-ul imaginii de bază (
FROM php:8.3.35-apache→php:8.3.36-apache) sau versiunea pachetului în Dockerfile / fișiere CI. - Flow trigger pe evenimentul
Assignpornește automat remedierea la asignare. - Code Review Flow (cu automatic reviews) aplică custom review instructions ale echipei tale — primul review e făcut de agent, tu aprobi și merge-ui.
- Merge Request Approval Policy (din Pasul 1) blochează orice MR care reintroduce PHP vulnerabil; Scan Execution Policy menține container scanning activ.
Un exemplu de agent skill (read-only, dezvoltat de GitLab Developer Advocacy) verifică: imagini container, job-uri CI, pachete OS, variabile config management, pin-uri Composer, medii — și returnează tabel cu dovezi de deployment și goluri deschise. Skill-ul nu face modificări; MR-urile de remediere rămân pas separat, revizuit. Adaptează skill-ul la mediul tău înainte de producție.
–
Verifică Compromisul — Indicii Concreți în Log-uri și Sistem
Rapoartele de exploatare difera: cercetători au văzut încercări de exploit pe 17 octombrie 2026 (înainte de divulgare), iar după release au urmat alte rapoarte. Proiectul PHP nu a identificat exploit-uri funcționale la momentul release-ului. Dacă un server internet-facing a rulat PHP vulnerabil, analizează log-urile de la 17 octombrie 2026 înainte pentru:
- Cereri multipart urmate de erori
memory_limitsau răspunsuri HTTP 500 repetitive - Cookie-uri
PHPSESSIDanormal mari sau malformate în răspuns - Restart-uri neexplicate ale workerilor PHP sau procese shell pornite de workeri PHP (
ps auxfaratăphp-fpm→sh/bash) - Fișiere neașteptate pe document root, conexiuni outbound de la workeri PHP (
ss -tnp | grep php-fpm), intrări cron suspecte (crontab -l,/etc/cron.*)
Atenție: Un exploit reușit poate returna HTTP 200 și lăsa workerul vif — absența erorilor nu exclude compromisul. CVE-2026-109619 poate expune memoria procesului chiar fără RCE. Dacă găsești semne, izolează serverul, pornește investigație incident, capturează memorie/disc/log-uri înainte de patching și restart (restartul poate șterge dovezi). Rotește toate credențialele, token-urile, cheile pe care procesul PHP le putea citi.
Pentru mai multe detalii despre această parte a subiectului, vezi Actualizare Importantă: Securitate și Performanță PHP Îmbunătățite pentru Hosting Partajat.
Notă: Scanner-ele pot flag-ui imaginea
gemnasium:6(deprecata din GitLab 17.9) pentru PHP-ul său bundlat. E folosit doar ca tool CLI, nu gestionează request-uri HTTP, deci nu e exploatabil. Versiune fixată deja livrată sub același tag.
–
Pași Practici Imediati — Checklist de Acțiune
- Inventariază toate host-urile, containerele și imaginile care rulează PHP (CMDB, Ansible,
docker images,kubectl get pods -A -o jsonpath='{.spec.containers[*].image}'). - Upgrade-ează pachetele OS la versiunile patched din tabel (apt/dnf/apk upgrade) și repornește serviciile (systemctl restart php8.3-fpm httpd nginx).
- Reconstruiește imaginile container cu
docker build --pull --no-cache -t myimage:php8.3.36 .și redeploiează (actualizează tag-uri floatantephp:8.3→php:8.3.36). - Activează Container Scanning + CS_BINARY_SCAN pe toate proiectele GitLab; rulează pipeline-uri complete.
- Rulează Code Search (Dockerfile + composer.json) pe grupul top-level; validează versiuni pentru fiecare rezultat.
- Compară rezultatele statice cu runtime inventory; investighează discrepanțele.
- Verifică log-urile de la 17 oct 2026 pentru IOC-urile listate; rotesc credențialele dacă e cazul.
- Configurează MR Approval Policy + Scan Execution Policy pentru prevenire regresie.
- Testează skill-ul PHP2Shell pe GitLab Duo Agent Platform în mediu de staging înainte de producție.
- Documentează tot procesul în runbook-ul de incident pentru viitoare vulnerabilități runtime.
–
Concluzie
PHP2Shell nu e o vulnerabilitate de framework pe care o patch-uiezi cu composer update — e un defect al motorului PHP care expune orice server care interpretează PHP la RCE pre-autentificare. Singura mitigere reală e upgrade-ul runtime-ului la versiunile patched (8.5.12, 8.4.27, 8.3.36, 8.2.35 sau pachetele distribuției), urmat de repornire completă a proceselor și reconstruire a imaginilor container. Folosește GitLab (Container Scanning, Orbit, Code Search, Duo Agent Platform) pentru a descoperi, remedia și preven la scară — dar validează întotdeauna împotriva inventarului real al workload-urilor care rulează. Și, crucial, presupune compromisul pe orice server internet-facing care a rulat PHP vulnerabil după 17 octombrie: analizează log-urile, capturează dovezile, rotește secretele. Infrastructura ta — fie ea pe servere dedicate, VPS sau cloud — merită această disciplină.
–