Descoperită în august 2026 și exploatată activ încă de sub embargo pe 17 octombrie, vulnerabilitatea PHP2Shell reprezintă una din cele mai critice amenințări pentru infrastructura web din ultimii ani. Două falțe de execuție remote de cod (RCE) în motorul PHP — CVE-2026-109618 și CVE-2026-109619 — primesc scorul maxim 9.2 CVSS v4.0 și permit atacatorilor neautentificați să execute cod arbitrar pe orice server care rulează PHP, înainte ca orice cod de aplicație să fie invocat. Deoarece vulnerabilitățile se află în nucleul PHP, nu există mitigări la nivel de framework (Laravel, Symfony, WordPress), Composer, validare de input sau autentificare. Singura apărare reală este upgrade-ul runtime-ului PHP pe fiecare gazdă și imagine de container. Acest ghid acoperă versiunile corectate per ramură și distribuție, localizarea proiectelor PHP în GitLab la scară largă, remedieri automate cu GitLab Duo Agent Platform și verificarea semnelor de compromitere.
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 corectate și pachetele distribuției — ce să upgrade-uiești acum
Proiectul PHP a publicat corecțiile pe 21 octombrie 2026, 14:00 UTC. Tabelul de mai jos sintetizează versiunile minime necesare per ramură activă:
| Ramură PHP | Versiune corectată | Notă | |––––|––––––-|––| | 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 decembrie 2026 | | 8.6 RC | 8.6.0RC4 | RC3 (imaginea oficială php:8.6-rc la 21 oct) nu conține fixul | | 8.1 și mai vechi | Fără release oficial | Backport-uri minime de sursă pentru 7.4, 8.0, 8.1; unele distribuții livrez pachete patch-uite |
Important: Dacă PHP vine din pachetul distribuției (apt, dnf, apk), upgrade-uiește pachetul, nu recompilă din sursă. Distribuțiile mențin numărul de versiune upstream vechi și backport-ează fixul; compară versiunea pachetului, nu ieșirea php -v. Iată pachetele confirmate corectate la 22 octombrie 2026:
| Distribuție | Pachet corectat | |––––-|––––––| | 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-urile retrașe (7.2, 7.3, 8.0) nu primesc fix |
**După upgrade, restartează toate procesele care rulează PHP** (php-fpm, Apache cu mod_php, NGINX + PHP-FPM, containere). Pe servere dedicate sau VPS-uri administrate prin Ansible/Puppet/Chef, include un handler care repornește serviciul corespunzător imediat ce pachetul este actualizat.
Reconstruiește imaginile de container
Dacă imaginea ta folosește un tag flotant al imaginii officielle php (php:8, php:8.3, php:8.3-apache, php:latest), reconstruiește cu docker build --pull și redeploy-uiește. Imaginile care punează versiunea patch (php:8.3.35-apache) necesită schimbarea tag-ului la versiunea corectată înainte de rebuild. Pentru derivate (wordpress, drupal, frankenphp, bitnami/php-fpm), fixul apare doar după ce mentainer-ii publică o imagine actualizată — verifică upstream înainte de rebuild.
Pentru infrastructuri gazduite pe servere dedicate sau cloud VPS, asigură-te că imaginile de bază sunt reconstruite în registry-ul tău privat și că pipeline-urile CI/CD deploy-uiesc noile tag-uri. Dacă folosești servere dedicate sau VPS-uri cu orchestratori proprii (Kubernetes, Nomad, Docker Swarm), validează că nodurile trage noile imagini după rebuild.
Localizează proiectele PHP în grupurile GitLab — vizibilitate statică vs. runtime
Găsirea tuturor proiectelor care rulează PHP pentru a servi request-uri HTTP necesită două perspective: statică (ce declară repo-urile și imaginile) și runtime (ce rulează de fapt). GitLab acoperă vizualizarea statică cu două funcții complementare; folosește ambele, în această ordine.
1. Container Scanning — detectează PHP instalat ca pachet OS
Container Scanning raportează vulnerabilități în pachetele de sistem (apt, apk, dnf), deci găsește PHP instalat prin manager de pachete și raportează cele două CVE-uri odată ce ajung în baza de date a scanner-ului. Pentru a-l activa pe un proiect, adaugă template-ul în .gitlab-ci.yml:
Pentru mai multe detalii despre această parte a subiectului, vezi Actualizare Importantă: Securitate și Performanță PHP Îmbunătățite pentru Hosting Partajat.
include:
- template: Security/Container-Scanning.gitlab-ci.yml
Poți aplica scanning-ul la nivel de grup folosind o scan execution policy, care îl activează pentru fiecare proiect din grup la următoarea rulare de pipeline. Rezultatele pentru branch-ul default apar în Vulnerability Report după finalizarea scanner-ului. Pentru a bloca merge-uri care introduc PHP vulnerabil, configurează o Merge Request Approval Policy cu container scanning — merge-ul va fi blocat fără aprobare.
Limitație: Container Scanning detectează doar PHP instalat ca pachet OS. PHP compilat din sursă (inclusiv imaginile oficiale php:*) nu are înregistrare de pachet, deci un proiect poate trece scanning-ul și tot rulează PHP vulnerabil. Code Search acoperă această golă.
2. Exact Code Search — găsește Dockerfile-uri și proiecte Composer
Exact Code Search (disponibil implicit pe GitLab.com pentru planurile plătite; pe Self-Managed necesită instalarea Zoekt; GitLab Dedicated nu îl suportă) poate identifica două tipuri de fișiere care indică un proiect PHP. Rulează la nivelul grupului top-level cu regular expression mode activat (comutatorul .* dreapta căsuței de căutare):
Imagini de bază container (Dockerfile):
lang:Dockerfile ^FROM.*php
Acest pattern potrivește orice imagine a cărei nume sau tag conține php, inclusiv derivate (wordpress, frankenphp, bitnami/php-fpm). Așteaptă-te la câteva false positives pe care le poți elimina citind rezultatul.
Proiecte Composer (fără Dockerfile sau cu FROM $BASE_IMAGE):
file:composer\.json$
Pentru fiecare rezultat, confirmă versiunea. Verifică linia FROM php:<tag> sau rulează php -v în containerul rulant și compară cu tabelul de mai sus. Lista de dependențe de grup arată pachete Composer și versiuni de framework, nu versiunea runtime-ului PHP.
3. Compară cu inventarul tău de runtime
Container Scanning și Code Search arată ce proiectele declară și construiesc, nu ce rulează. PHP poate rula în afara proiectelor GitLab: pe web servere cu mod_php sau PHP-FPM activat doar în configurație, pe gazde configurate manual, sau în containere care încă rulează în clustere fără pipeline activ. Compară rezultatele statice cu un inventar al workload-urilor rulante din configuration management (Ansible, Puppet, Chef), cloud inventory sau VM inventory tools. Pentru Kubernetes, Operational Container Scanning scanează imaginile care rulează în clustere, cu aceeași detectare limitată la pachete. Tratează fiecare runtime PHP care apare într-o singură dintre cele două vizualizări ca o golă de investigat.
Remedieri la scară largă cu GitLab Duo Agent Platform
Pentru organizații cu zeci sau sute de proiecte PHP, remedierile manual devin inghitibile. GitLab Duo Agent Platform automatizează descoperirea, triajul și generarea de merge request-uri de remediere.
Începe întrebând GitLab Duo Agentic Chat să:
- Colecteze toate finding-urile de container scanning pentru CVE-2026-109618 și CVE-2026-109619 din Vulnerability Report între grup (necesită abonament Ultimate).
- Ruleze interogările Code Search de mai sus între grup, revizuiască fiecare potrivire și citească versiunea PHP din Dockerfile sau fișierele Composer.
- Deschidă un merge request per proiect afectat care incrementează tag-ul imaginii de bază sau pachetul la versiunea corectată, și atribuie-l maintainer-ului potrivit.
- Urmărească efortul întreg într-un epic cu un issue per proiect, închis când versiunea corectată este deploy-uită și confirmată.
Din fiecare issue, Developer Flow poate deschide un merge request care actualizează tag-ul imaginii de bază sau pachetul. Activează automatic reviews cu Code Review Flow pentru o primă revizuire care urmează custom review instructions tale. Revizuiește și merge-uiește fiecare MR, apoi închide issue-ul odată ce versiunea corectată este deploy-uită.
Căutarile găsesc candidați, dar un inginer de securitate sau platformă trebuie să revizuiască fiecare potrivire, să rezolve include-urile CI, și să distinge între ce declară codul și ce rulează de fapt. Un exemplu de agent skill de la echipa GitLab Developer Advocacy gestionează această muncă. Rulează pe GitLab Duo Agent Platform și cu agenți care folosesc GitLab MCP server sau glab CLI (Claude Code, Codex, Cursor). Skill-ul verifică imagini container, job-uri CI, pachete OS, variabile configuration management, pin-uri Composer și environmente. Returnează un tabel de finding-uri citate cu dovezi de deployment și goluri deschise. Este read-only: nu face modificări, MR-urile de remediere rămân un pas separat, revizuit. Nu poate confirma ce rulează pe gazde la care nu are acces — verifică-le direct. Adaptează skill-ul la mediul tău înainte de utilizare.
Verifică semnele de compromitere — post-exploitation forensics
Rapoartele de exploatare difera. Cercetători de securitate au raportat o încercare de exploit pe 17 octombrie 2026, înainte de divulgarea publică, urmate de altele după release. Proiectul PHP nu a identificat exploit-uri funcționale la momentul release-ului. Dacă un server internet-facing a rulat o versiune PHP vulnerabilă, revizuiește log-urile sale de la 17 octombrie 2026 încolo pentru:
- Request-uri multipart urmate de erori de memory limit sau răspunsuri HTTP 500 repetate
- Cookie-uri de răspuns
PHPSESSIDneobișnuit de mari sau malformate - Restart-uri neexplicate ale worker-ilor PHP, sau procese shell pornite de worker-i PHP
- Fișiere neașteptate pe serverul web PHP, conexiuni outbound de la worker-i PHP, sau intrări cron neașteptate
Un exploit reușit poate returna HTTP 200 și lăsa worker-ul rulând, deci absența erorilor nu exclude compromiterea. Dacă găsești semne de exploatare, izolează serverul și inițiază o investigație de incident. Unde e posibil, capturează memorie, disc și log-uri înainte de patching și restart. Restartarea worker-ilor PHP poate șterge dovezi. CVE-2026-109619 poate expune și memoria procesului, chiar când atacatorul nu reușește execuția de cod. Rotește orice credențiale, token-uri sau chei pe care procesul PHP le-a putut citi.
Notă: Scannerele pot semnala imaginea Gemnasium dependency scanning (
gemnasium:6), deprecită din GitLab 17.9, pentru PHP-ul său bundlat. Este folosită doar ca tool de command-line și nu gestionează request-uri HTTP, deci nu e exploatabilă; o versiune corectată a fost deja livrată sub același tag.
–
Pași practici imediatți
- Inventariează toate gazdele și containerele care rulează PHP (inclusiv dashboards interne, site-uri marketing, job-uri CI).
- Upgrade-uiește runtime-ul PHP la versiunile corectate (tabelul de mai sus) sau pachetele distribuției; restartează toate procesele PHP.
- Reconstruiește imaginile de container cu
docker build --pullși redeploy-uiește; verifică derivatele upstream. - Activează Container Scanning + Code Search în GitLab pentru a localiza proiectele afectate static.
- Compară rezultatele statice cu inventarul runtime (Ansible, cloud inventory, Operational Container Scanning pentru K8s).
- Folosește GitLab Duo Agent Platform pentru a genera MR-uri de remediere la scară și a urmări în epic.
- Auditează log-urile de la 17 oct 2026 pentru indicatori de compromitere; rotește secretele dacă e cazul.
–
Concluzie
PHP2Shell demonstră că vulnerabilitățile la nivel de runtime limbaj impun o disciplină operațională riguroasă: inventar complet, patching rapid al pachetelor distribuției și a imaginilor container, validare post-deploy, și forensics proactivă. GitLab oferă tooling-ul pentru a acoperi ciclu de la descoperire (Container Scanning, Code Search) la remediere scalabilă (Duo Agent Platform) și verificare continuă (Operational Container Scanning). Pentru echipele care gestionează infrastructură critică pe servere dedicate sau VPS-uri performante, integrarea acestor pratici în pipeline-urile zilnice nu e opțională — e condiția de supraviețuire în fața unui exploit care acționează înainte ca codul tău să aibă șansa să ruleze.