Descoperitele din octombrie 2026 au scos la suprafață două vulnerabilități critice în motorul PHP, denumite colectiv PHP2Shell (CVE-2026-109618 și CVE-2026-109619), ambele cu scor 9.2 CVSS v4.0. Esențial de reținut: defectele se află în nucleul PHP, nu în cadre, biblioteci sau cod aplicație, deci nu există mitigări la nivel de aplicație — orice server web care rulează PHP (nginx cu php-fpm, Apache cu mod_php, containere, VM-uri bare-metal) este expus. GitLab a confirmat că produsele sale nu sunt afectate (aplicația nu e scrisă în PHP și nu rulează PHP pentru request-uri web), dar a publicat un ghid operativ pentru echipele care gestionează proiecte PHP pe platforma lor. Mai jos găsiți versiunile corectate per ramură și per distribuție, metode concrete de descoperire a tuturor runtime-urilor PHP din organizație, automatizarea remedierii la scară și indicatoarele de compromis de verificat în log-uri.
Ghid ServerSpan relevant: CVE-2026-12184: Ghid de Patch pentru DoS în PHP-FPM (8.3.32 / 8.4.21 / 8.5.6).
Versiunile corectate și acțiunea imediată de upgrade
PHP a lansat patch-urile pe 21 octombrie 2026, 14:00 UTC. Versiunile fixe upstream sunt:
| Ramură | Versiune fixă | Notă | |–––|–––––|––| | PHP 8.5.x | 8.5.12 | — | | PHP 8.4.x | 8.4.27 | — | | PHP 8.3.x | 8.3.36 | — | | PHP 8.2.x | 8.2.35 | EOL 31 decembrie 2026 | | PHP 8.6 RC | 8.6.0RC4 | RC3 (imagine oficială php:8.6-rc la 21 oct) nu conține fixul | | PHP 8.1 și mai vechi | Niciun release oficial | PHP a publicat backport-uri minime de sursă pentru 7.4, 8.0, 8.1; unele distribuții liverează pachete patchuite |
Dacă PHP vine din pachete de distribuție, actualizați pachetul — comparați versiunile pachetelor, nu php -v, pentru că Ubuntu și Red Hat păstrează numărul de versiune upstream și backportează fixul. Versiunile pachetelor confirmate la 22 octombrie 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.4nu avea fix la 22 oct - RHEL 8:
php:7.4 7.4.33-8(RHSA-2026:87080); stream-urile retrase (7.2, 7.3, 8.0) nu primesc fix
Reconstruiți imaginile container. Dacă folosiți tag-uri flotante (php:8, php:8.3, php:8.3-apache, php:latest), faceți rebuild cu docker build --pull și redeploy. Imaginile care punează versiunea patch (php:8.3.35-apache) trebuie să schimbe tag-ul la versiunea fixată înainte de rebuild. Derivatele (wordpress, drupal, frankenphp, bitnami/php-fpm) primesc fixul doar după ce maintainer-ii publică imagine actualizată — verificați upstream-ul înainte de rebuild. Restartați toate procesele care rulează PHP după upgrade (php-fpm, Apache cu mod_php, worker-e CLI de lungă durată).
Descoperirea proiectelor PHP în grupurile GitLab
Orice proiect care servește request-uri web cu PHP are nevoie de runtime fixat — inclusiv cele uite de ușor: dashboarde interne, site-uri marketing, imagini de CI job. GitLab oferă trei viziuni statice complementare; folosiți-le în această ordine:
1. Container Scanning
Detectează vulnerabilități în pachete OS (apt, apk, dnf), deci găsește PHP instalat ca pachet și raportează cele două CVE-uri odată ce intră în baza de date a scanner-ului. Activați-l per proiect adăugând î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
Sau la nivel de grup cu o scan execution policy — la următoarea rulare de pipeline, container scanning va fi inclus automat. Rezultatele pentru branch-ul default apar în Vulnerability Report. Pentru blocare la merge, adăugați o Merge Request Approval policy cu container scanning: orice schimbare care reintroduce un PHP vulnerabil va fi blocată fără aprobare.
Limitare: Container scanning vede doar PHP instalat ca pachet. PHP compilat din sursă (inclusiv imaginile oficiale php:*) nu are înregistrare de pachet — un proiect poate trece scanning-ul și tot rula PHP vulnerabil.
2. GitLab Orbit (beta, Premium/Ultimate)
Orbit indexează proiecte, pipeline-uri, finding-uri de securitate și cod sursă (inclusiv PHP) într-un graf interogabil. Cu Orbit activat pe grupul top-level, un agent poate lista toate proiectele care conțin cod PHP — și cele care compilă PHP sau folosesc imaginile oficiale php pe care container scanning-ul le ratează. Orbit nu parsează încă Dockerfile-uri (issue #1416), deci folosiți lista pentru a restrânge code search-ul următor. De asemenea, puteți întreba Orbit ce proiecte au finding-uri deschise pentru CVE-2026-109618 / CVE-2026-109619 după ce scan-urile au rulat. Notă: Orbit indexează doar branch-ul default.
3. Exact Code Search (regex mode)
Căutați la nivel de grup top-level cu regex activat (butonul .* în căsuța de search):
- Imagini de bază container:
lang:Dockerfile ^FROM.*php— găsește oriceFROMcare conținephp(inclusiv derivate:wordpress,frankenphp,bitnami/php-fpm). Așteptați câteva false positives pe care le eliminați citind rezultatul. - Proiecte Composer:
file:composer\.json$— găsește proiecte PHP chiar și fără Dockerfile sau când Dockerfile-ul ia imaginea din build arg (FROM $BASE_IMAGE).
Exact code search acoperă doar branch-ul default. Pe GitLab.com e activ implicit pentru planuri plătite. Pe Self-Managed trebuie să instalați Zoekt. GitLab Dedicated nu suportă exact code search.
Pentru fiecare rezultat, confirmați versiunea: citiți linia FROM php:<tag> sau rulați php -v în containerul rulant și comparați cu tabelele de mai sus. Lista de dependențe de grup arată pachete Composer și versiuni framework, dar nu versiunea runtime-ului PHP.
4. Comparați cu inventarul runtime
Container scanning și code search arată ce declară și construiesc proiectele, nu ce rulează efectiv. PHP poate rula în afara proiectelor GitLab: servere web cu mod_php / php-fpm activat doar în config, host-uri configure manual, containere care rulează în clustere fără pipeline activ. Pentru Kubernetes, operational container scanning scanează imaginile care rulează în clustere (aceeași detecție doar-pachet). Tratați orice runtime PHP care apare într-o singură dintre cele două viziuni (statică vs. runtime) ca pe un gap de investigat.
Remediere la scară cu GitLab Duo Agent Platform
GitLab Duo poate rula pașii de descoperire de mai sus pe toate proiectele, prin Orbit și code search. De acolo, lăsați agenții să facă munca repetitivă și păstrați oamenii pe review și merge.
Automatizați fixul. 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 merge request care actualizează tag-ul imaginii de bază sau pachetul la versiunea fixată. Un flow trigger pe evenimentul Assign pornește remedierea în momentul asignării. Activați review-uri automate cu Code Review Flow pentru o primă verificare care urmează custom review instructions ale organizației. Review-uiați și merge-uiați fiecare MR, apoi închideți issue-ul odată ce versiunea fixată e deployată.
Impuneți cu policy-uri. Policy-ul de aprobărare MR din Pasul 1 blochează orice schimbare care reintroduce un PHP vulnerabil fără aprobare, iar scan execution policy-ul menține container scanning activ în fiecare proiect ca o regresie să apară în vulnerability report.
Un agent skill exemplu de la echipa GitLab Developer Advocacy (read-only, nu face modificări) verifică: imagini container, job-uri CI, pachete OS, variabile config management, pin-uri Composer, environment-uri. Returnează un tabel de finding-uri citate cu dovezi de deployment și gap-uri deschise. Nu poate confirma ce rulează pe host-uri la care nu are acces — verificați-le direct. Adaptați skill-ul la mediul vostru înainte de utilizare.
Verificarea compromiterii
Rapoartele de exploatare diferă. Cercetători au raportat o încercare de exploit pe 17 octombrie 2026, înainte de divulgare publică, urmate de alte raporte după release. Proiectul PHP nu a identificat exploaturi funcționale la momentul release-ului. Dacă un server internet-facing a rulat PHP vulnerabil, revizuiți log-urile de la 17 oct 2026 încoace pentru:
- Request-uri multipart urmate de erori memory-limit sau răspunsuri 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 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 — absența erorilor nu exclude compromisul. Dacă găsiți semne de exploatare, izolați serverul și inițiază investigația de incident. Unde e posibil, capturați 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 dacă atacatorul nu obține execuție de cod. Rotați orice credențiale, token-uri sau chei pe care procesul PHP le putea citi.
Notă: Scanerele pot semnala imaginea Gemnasium dependency scanning (
gemnasium:6), deprecată 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 livrată sub același tag.
–
Pași practici de acțiune imediată
- Inventariază toate runtime-urile PHP (host-uri, containere, VM-uri, funcții serverless, appliance-uri vendor) — comparați static (GitLab) cu runtime (CMDB, cloud inventory, k8s operational scanning).
- Upgradează fiecare runtime la versiunea fixată corespunzătoare (tabelul de mai sus) și restartați procesele.
- Rebuild-uieți toate imaginile container cu tag-uri flotante sau derivate; verificați upstream pentru
wordpress,drupal,bitnami/*. - Activați container scanning + MR approval policy pe toate proiectele GitLab cu PHP.
- Rulați Orbit + exact code search pentru a găsi proiecte rateate de container scanning.
- Verificați log-urile de la 17 oct 2026 pentru indicatoarele de compromis; rotați credențialele expuse.
- Automatizați remedierea la scară cu GitLab Duo Agent Platform (Agentic Chat → Developer Flow → Code Review Flow).
- Documentați gap-urile rămase (host-uri fără gestionare GitLab, PHP compilat din sursă, stream-uri EOL) și planificați migrarea sau mitigarea lor.
–
Concluzie: PHP2Shell nu e o vulnerabilitate de framework — e un defect de motor care expune orice server care rulează PHP la RCE neautentificat. Patching-ul runtime-ului e singura apărare completă; WAF-uri și validări aplicație nu ajută pentru că PHP procesează request-ul înainte ca codul aplicației să ruleze. Folosiți instrumentele GitLab (container scanning, Orbit, exact code search, Duo Agent Platform) pentru a descoperi, patch-uia și verifica la scară, dar nu uitați să comparați cu realitatea runtime — acolo se ascund cel mai des riscurile. Pentru infrastructură dedicată care rulează PHP la scară, asigurați-vă că serverele și imaginile de bază sunt actualizate acum — nu la următoarea fereastră de mentenanță. Dacă aveți nevoie de servere dedicate optimizate pentru workload-uri PHP critice, consultați oferta de la dedicated-servers.ro sau soluțiile de colocation de la serverspan.ro pentru control total pe hardware și stack.