Descoperirea a două vulnerabilități critice în motorul PHP — denumite colectiv PHP2Shell — a tras pe picioare comunitatea de hosting și DevOps pe 21 octombrie 2026. Ambele CVE-uri (CVE-2026-109618 și CVE-2026-109619) au scor CVSS v4.0 de 9.2 și permit execuție de cod la distanță neautentificată înainte ca orice cod de aplicație să ruleze. Deoarece defectele se află în nucleul PHP, nu există mitigări la nivel de framework (Laravel, Symfony, WordPress etc.), validare de input sau actualizări Composer. Orice server web care servește cereri prin PHP — Apache cu mod_php, NGINX cu PHP-FPM, FrankenPHP, LiteSpeed, php-cgi — este expus. Pentru furnizorii de hosting și echipele de platformă, prioritatea absolută este upgrade-ul fiecărui runtime PHP de pe host-uri bare-metal, VM-uri și imagini container la versiunile patchuite: 8.5.12, 8.4.27, 8.3.36 sau 8.2.35 (EOL 31 decembrie 2026), respectiv pachetele backportate de distribuții.
Ghid ServerSpan relevant: CVE-2026-12184: Ghid de Patch pentru DoS în PHP-FPM (8.3.32 / 8.4.21 / 8.5.6).
Versiunile patchuite și pachetele de distribuție — ce trebuie să instalați acum
Tabelul de mai jos consolidează versiunile oficiale PHP și pachetele de distribuție confirmate la 22 octombrie 2026. Important: Ubuntu și Red Hat păstrează numărul de versiune upstream și backportează fixul; comparați versiunea pachetului, nu output-ul php -v.
| Branșă PHP | Versiune fixată oficial | |––––|––––––––| | 8.5.x | 8.5.12 | | 8.4.x | 8.4.27 | | 8.3.x | 8.3.36 | | 8.2.x | 8.2.35 (EOL 31 dec 2026) | | 8.6 RC | 8.6.0RC4 (RC3 vulnerabil) | | ≤ 8.1 | Niciun release oficial; există backport-uri minime sursă pentru 7.4, 8.0, 8.1 — verificați distribuția |
| Distribuție | Pachet patchuit (22 oct 2026) | |––––-|––––––––––-| | 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 8.3.36, php84 8.4.27, php85 8.5.12 | | RHEL 10 | php 8.3.36-1.el10_2 (RHSA-2026:87070), php8.4 8.4.27-1.el10_2 (RHSA-2026:87071) | | RHEL 9 | php 8.0.30-8.el9_8.1 (RHSA-2026:87151), php:8.2 8.2.35-1 (RHSA-2026:87072), php:8.3 8.3.36-1 (RHSA-2026:87079); php:8.4 fără 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 |
Acțiune imediată: după upgrade, reporniți toate procesele care rulează PHP (systemd units, PHP-FPM pools, Apache). Pe servere dedicate sau VPS-uri administrate prin Ansible/Puppet, un playbook care face apt upgrade php* / dnf update php* urmat de systemctl reload php8.3-fpm httpd (sau echivalentul) elimină fereastra de expunere în minute. Pentru infrastructuri la scară largă, dedicated-servers.ro oferă servere bare-metal cu imagine-uri de bază actualizate regulat, reducândタイム-ul de deploy al patch-urilor.
Reconstrucția imaginilor container — floating tags sunt un risc
Dacă folosiți tag-uri flotante ale imaginilor oficiale php (php:8, php:8.3, php:8.3-apache, php:latest), reconstruiți cu --pull și redeployați:
docker build --pull -t registry.example.com/app:php2shell-fix .
docker push registry.example.com/app:php2shell-fix
# actualizați deployment-ul Kubernetes / Docker Swarm / Compose
Imaginile care punează versiunea patch (php:8.3.35-apache) necesită schimbarea tag-ului în Dockerfile la versiunea fixată înainte de rebuild. Derivatele (wordpress, drupal, bitnami/php-fpm, frankenphp) primesc fixul doar după ce maintainer-ii lor publică imagini noi — verificați upstream-ul înainte de rebuild. Pentru clustere Kubernetes gestionate prin GitLab, operational container scanning scanează imaginile care rulează efectiv în cluster, detectând pachetele OS vulnerable (la fel ca container scanning-ul clasic). Dacă găzduiți containere pe VM-uri proprii, serverspan.ro oferă VPS-uri cu imagini de bază actualizate și suport pentru orchestrare container.
Descoperirea proiectelor PHP la scară largă cu GitLab — patru pași complementari
Găsirea tuturor proiectelor care rulează PHP necesită două perspective: statică (ce declară repo-urile și imaginile) și runtime (ce rulează de fapt). GitLab acoperă partea statică prin trei feature-uri; comparați rezultatele cu inventarul runtime.
1. Container Scanning — pachete OS (apt, apk, dnf)
Activează template-ul în .gitlab-ci.yml sau, mai eficient, o scan execution policy la nivel de grup pentru a o impune pe toate proiectele:
include:
- template: Security/Container-Scanning.gitlab-ci.yml
Rezultatele apar în Vulnerability Report pe default branch. Limitare: container scanning detectează doar PHP instalat ca pachet OS. PHP compilat din sursă (inclusiv imaginile oficiale php:*) nu are înregistrare de pachet — un proiect poate trece scan-ul și tot rula PHP vulnerabil.
Pentru mai multe detalii despre această parte a subiectului, vezi Actualizare Importantă: Securitate și Performanță PHP Îmbunătățite pentru Hosting Partajat.
2. GitLab Orbit — graf interogabil al proiectelor (beta, Premium/Ultimate)
Orbit indexează proiecte, pipeline-uri, finding-uri și cod sursă. Un agent poate lista toate proiectele care conțin cod PHP, inclusiv cele care compilează PHP sau folosesc imaginile oficiale php:* (pe care container scanning le ratează). La 22 octombrie, Orbit nu parsează încă Dockerfile-uri (issue #1416); folosiți lista ca scope pentru code search-ul următor. Poți întreba Orbit și ce proiecte au finding-uri deschise pentru cele două CVE-uri odată ce scan-urile au rulat.
3. Exact Code Search — două query-uri esențiale (regex activat)
Rulați la top-level group cu toggle-ul .* (regex) activat:
Imagini de bază container (Dockerfile):
lang:Dockerfile ^FROM.*php
Găsește FROM php:..., FROM wordpress:..., FROM frankenphp:..., FROM bitnami/php-fpm:... etc. Așteptați false positives — validați manual.
Proiecte Composer (fără Dockerfile sau cu FROM $BASE_IMAGE):
file:composer\.json$
Exact code search coveră doar default branch. Pe GitLab.com e activat implicit pentru planuri plătite; pe Self-Managed necesită instalarea Zoekt; GitLab Dedicated nu-l suportă.
4. Comparați cu inventarul runtime — găsiți gap-urile
Container scanning și code search arată ce declară proiectele, nu ce rulează. PHP poate rula în afara proiectelor GitLab: servere web cu mod_php/PHP-FPM configurat manual, host-uri gestionate de Ansible/Puppet/Chef, containere în clustere fără pipeline activ. Comparați rezultatele statice cu inventarul din CMDB, cloud provider sau tool-uri de inventory VM. Orice runtime PHP care apare doar într-o dintre cele două vizualizări e un gap de investigat.
Remediere la scară largă cu GitLab Duo Agent Platform
După descoperire, GitLab Duo Agent Platform automatizează munca repetitivă, lăsând oamenii pe review și merge.
Automatizați fix-ul: Folosiți Agentic Chat pentru a crea un epic cu un issue per proiect afectat și atribuiți Developer Flow fiecăruia. Flow-ul deschide un MR care actualizează tag-ul imaginii de bază sau pachetul la versiunea patchuită. Un flow trigger pe evenimentul Assign pornește remedierea imediat la atribuire. Activați Code Review Flow cu automatic reviews care urmează instrucțiunile custom de review ale organizației. Review-uieți și merge-uieți fiecare MR, apoi închideți issue-ul odată ce versiunea fixată e deployată.
Impuneți cu policy-uri: Merge request approval policy din pasul 1 blochează orice schimbare care reintroduce o versiune PHP vulnerabilă fără aprobare; scan execution policy menține container scanning activ în fiecare proiect, astfel încât o regresie apare în Vulnerability Report.
Skill-ul PHP2Shell Inventory (read-only, dezvoltat de echipa Developer Advocacy GitLab) rulează pe GitLab Duo Agent Platform / MCP server / glab CLI (compatibil cu Claude Code, Codex, Cursor). Verifică: imagini container, job-uri CI, pachete OS, variabile CM, pin-uri Composer, environment-uri. Returnează tabel de finding-uri cu dovezi de deployment și gap-uri deschise. Nu face modificări; MR-urile de remediere rămân pas separat, revizuit. Nu poate confirma ce rulează pe host-uri inaccesibile — verificați-le direct. Adaptați skill-ul la mediul vostru înainte de producție.
Verificare de compriză — semne concrete de exploatare
Rapoartele de exploatare difera. Cercetătorii au raportat o încercare de exploit pe 17 octombrie 2026 (Amazon honeypots), înainte de divulgare publică; urmat de alte rapoarte post-release. Proiectul PHP n-a identificat exploit-uri funcționale la momentul release-ului. Dacă un server internet-facing a rulat PHP vulnerabil, inspectați log-urile de la 17 octombrie încolo pentru:
- Request-uri multipart urmate de erori
memory_limitsau HTTP 500 repetitive - Cookie-uri
PHPSESSIDde răspuns anormal de mari sau malformate - Restart-uri neexplicate ale worker-ilor PHP sau procese shell pornite de worker-i PHP
- Fișiere neașteptate pe document root, conexiuni outbound de la worker-i PHP, intrări cron neașteptate
Atenție: Un exploit reușit poate returna HTTP 200 și lăsa worker-ul rulând — absența erorilor nu exclude comprizarea. Dacă găsiți semne, izolați serverul și inițiați investigație de incident. Când e posibil, capturați memorie, disc și log-uri înainte de patch și restart; repornirea worker-ilor PHP poate șterge dovezi. CVE-2026-109619 poate expune memoria procesului chiar și fără execuție de cod — rotiți toate credențialele, token-urile și cheile pe care procesul PHP le putea citi.
Notă: Scanerele pot flag-ui imaginea gemnasium:6 (depreciată din GitLab 17.9) pentru PHP-ul său bundlat. E folosită doar ca tool CLI și nu gestionează request-uri HTTP, deci nu e exploatabilă; o versiune fixată a fost deja publicată sub același tag.
Pași practici — checklist de acțiune imediată
- Inventariazați toate rulările PHP (hosturi bare-metal, VM, containere, serverless) — folosiți CMDB, cloud inventory,
ps aux | grep php,systemctl list-units '*php*'. - Upgradeazăți runtime-ul PHP la versiunile patchuite (tabelul de mai sus) pe fiecare host și imagine; reporniți procesele PHP.
- Rebuildați imaginile container cu
docker build --pull; actualizați tag-urile în Dockerfile la versiuni patchuite; verificați imaginile derivate upstream. - Activați Container Scanning via scan execution policy la nivel de grup; rulați Exact Code Search cu cele două query-uri regex.
- Activați GitLab Orbit (dacă e disponibil) pentru a lista proiectele cu cod PHP pe care container scanning le ratează.
- Comparați rezultatele statice cu inventarul runtime; investigați orice discrepănță.
- Lansați remedierea la scară largă cu GitLab Duo Agent Platform (Agentic Chat → epic → Developer Flow → Code Review Flow).
- Impuneți merge request approval policy + scan execution policy pentru a preveni regresii.
- Auditați log-urile de la 17 oct 2026 pentru semne de exploatare; rotați credențialele dacă e cazul.
- Documentați întregul proces într-un runbook pentru viitoare vulnerabilități de tip engine-level.
Concluzie
PHP2Shell demonstră că o vulnerabilitate în motorul de limbaj — nu în codul aplicației — transformă orice server web care servește PHP într-o suprafață de atac critică. lipsa de mitigări la nivel de aplicație înseamnă că patch-ul runtime-ului e singura soluție reală. Combinând inventariere automate (Container Scanning, Orbit, Code Search), remediere orchestrată prin agenți AI (GitLab Duo) și policy-as-code pentru prevenirea regresiilor, echipele de platformă pot reduce fereastra de expunere de la zile la ore. Verificarea de compriză rămâne obligatorie: exploatarea pre-disclosure (17 oct) și natura „silent success” a atacurilor impun analiza forenizică înainte de restart. Pentru infrastructuri care trebuie patcheate acum, serverele dedicate și VPS-urile cu imagini de bază actualizate de la dedicated-servers.ro și serverspan.ro elimină overhead-ul de provisionare și accelerează deploy-ul fix-urilor.