Publicat în

PHP2Shell: Actualizare Urgentă PHP pentru CVE-2026-109618 și CVE-2026-109619 — Ghid Complet de Remediere

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.

–

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ă:

  1. Creează epic cu issue-uri per proiect via Agentic Chat: un issue per proiect afectat, asignat Developer Flow.
  2. 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.
  3. Flow trigger pe evenimentul Assign pornește automat remedierea la asignare.
  4. 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.
  5. 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_limit sau răspunsuri HTTP 500 repetitive
  • Cookie-uri PHPSESSID anormal mari sau malformate în răspuns
  • Restart-uri neexplicate ale workerilor PHP sau procese shell pornite de workeri PHP (ps auxf arată 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.

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

  1. Inventariază toate host-urile, containerele și imaginile care rulează PHP (CMDB, Ansible, docker images, kubectl get pods -A -o jsonpath='{.spec.containers[*].image}').
  2. Upgrade-ează pachetele OS la versiunile patched din tabel (apt/dnf/apk upgrade) și repornește serviciile (systemctl restart php8.3-fpm httpd nginx).
  3. Reconstruiește imaginile container cu docker build --pull --no-cache -t myimage:php8.3.36 . și redeploiează (actualizează tag-uri floatante php:8.3 → php:8.3.36).
  4. Activează Container Scanning + CS_BINARY_SCAN pe toate proiectele GitLab; rulează pipeline-uri complete.
  5. Rulează Code Search (Dockerfile + composer.json) pe grupul top-level; validează versiuni pentru fiecare rezultat.
  6. Compară rezultatele statice cu runtime inventory; investighează discrepanțele.
  7. Verifică log-urile de la 17 oct 2026 pentru IOC-urile listate; rotesc credențialele dacă e cazul.
  8. Configurează MR Approval Policy + Scan Execution Policy pentru prevenire regresie.
  9. Testează skill-ul PHP2Shell pe GitLab Duo Agent Platform în mediu de staging înainte de producție.
  10. 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ă.

–

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *