
Backdoor User-Agentt di PHP 8.1.0-dev per l'Esecuzione Remota di Codice (RCE)
User-Agentt in PHP 8.1.0-dev – Esecuzione Remota di Codice (RCE)Gravità: Critica (Equivalente CVSS: 10.0)
Tipo di vulnerabilità: Backdoor nella supply chain / Esecuzione Remota di Codice (RCE)
Software interessato: PHP 8.1.0-dev (Solo build di sviluppo)
Vettore di attacco: Remoto (Non autenticato)
Autenticazione richiesta: No
Interazione utente: Nessuna
Impatto: Compromissione completa del sistema
La backdoor User-Agentt di PHP 8.1.0-dev è uno dei compromessi della supply chain più infami nella storia del software open source. A differenza delle vulnerabilità tradizionali che derivano da errori di programmazione, questo problema è stato causato da codice dannoso inserito intenzionalmente nel repository ufficiale del codice sorgente di PHP.
La backdoor è apparsa negli snapshot di sviluppo di PHP 8.1.0-dev nel marzo 2021, dopo che gli attaccanti hanno compromesso con successo l'infrastruttura Git di PHP. I commit dannosi si spacciavano per mantenitori PHP di fiducia e introducevano un meccanismo nascosto in grado di eseguire codice PHP arbitrario ogni volta che veniva ricevuta un'intestazione HTTP appositamente costruita.
Sebbene la backdoor sia esistita solo per breve tempo prima di essere scoperta e rimossa, qualsiasi server che avesse distribuito una delle build di sviluppo compromesse è diventato immediatamente vulnerabile a Esecuzione Remota di Codice (RCE) non autenticata.
Questo incidente ha cambiato radicalmente il flusso di lavoro di sviluppo di PHP e ha infine portato alla migrazione del repository del codice sorgente di PHP lontano dalla sua infrastruttura Git self-hosted. :contentReference[oaicite:0]{index=0}
La maggior parte delle vulnerabilità di esecuzione remota di codice deriva da:
Questa vulnerabilità era diversa.
Non era un errore di programmazione.
Era una backdoor inserita deliberatamente nascosta all'interno del codice sorgente PHP legittimo.
Invece di sfruttare una debolezza esistente, gli attaccanti hanno modificato PHP stesso per eseguire codice PHP arbitrario fornito da chiunque effettuasse una richiesta HTTP.
Ciò rende questo incidente uno degli esempi più noti di attacco alla supply chain del software.
Il 28 marzo 2021, due commit sospetti sono comparsi nel repository Git di PHP.
Entrambi i commit sembravano provenire da noti mantenitori di PHP.
Inizialmente sembravano innocui.
I messaggi dei commit somigliavano a normali correzioni di refusi.
Tuttavia, i ricercatori hanno rapidamente notato codice sospetto aggiunto all'interprete PHP.
Il codice inserito cercava nelle richieste HTTP in arrivo un'intestazione personalizzata:
User-Agentt
Notate la "t" in più.
Questa sottile differenza ortografica ha aiutato a nascondere la backdoor durante una revisione superficiale.
Se l'intestazione iniziava con la stringa di attivazione:
zerodium
PHP eseguiva immediatamente tutto ciò che seguiva utilizzando:
zend_eval_string()
Questo di fatto consentiva a chiunque di eseguire codice PHP arbitrario da remoto.
I commit dannosi sono stati rimossi entro poche ore dalla scoperta. Le indagini successive hanno indicato che gli attaccanti avevano compromesso l'infrastruttura Git di PHP piuttosto che ottenere legittimamente le chiavi di firma dei mantenitori. :contentReference[oaicite:1]{index=1}
Il codice inserito eseguiva approssimativamente la seguente logica:
Incoming HTTP Request
│
▼
Read User-Agentt Header
│
▼
Does header start with "zerodium"?
│
Yes ▼
Execute remaining text as PHP
│
▼
Attacker gains Remote Code Execution
Invece di trattare l'intestazione come metadati innocui, PHP la valutava direttamente come codice PHP eseguibile.
Normalmente una richiesta HTTP contiene intestazioni simili a:
GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla Firefox
La versione PHP compromessa elaborava inoltre:
User-Agentt:
Se il suo valore iniziava con:
zerodium
PHP chiamava:
zend_eval_string()
Il contenuto rimanente diventava PHP eseguibile.
Concettualmente:
User-Agentt:
zerodium
│
▼
zend_eval_string(payload)
│
▼
Remote Code Execution
Attacker
│
│ HTTP Request
▼
GET /
User-Agentt: zerodiumsystem("id");
│
▼
PHP 8.1.0-dev
│
▼
Backdoor Triggered
│
▼
system("id")
│
▼
Command Executed
│
▼
Output Returned
Nessuna autenticazione.
Nessuna sessione.
Nessuna credenziale.
Una sola richiesta HTTP era sufficiente.
Gli attaccanti hanno scelto intenzionalmente
User-Agentt
invece di
User-Agent
perché:
Questo minuscolo refuso nascondeva una backdoor completa di esecuzione remota di codice.
Solo:
PHP 8.1.0-dev
Nello specifico, gli snapshot di sviluppo compromessi pubblicati durante l'incidente del marzo 2021.
Le versioni stabili come:
non sono state mai interessate.
L'attaccante aveva bisogno solo di:
Nessuna autenticazione.
Nessuna forza bruta.
Nessun login.
Nessun accesso precedente.
Lo sfruttamento con successo consente agli attaccanti di:
In pratica, questa vulnerabilità porta a compromissione completa del server.
| Tecnica | Descrizione |
|---|---|
| T1195 | Compromissione della supply chain |
| T1059 | Interprete di comandi e script |
| T1505 | Componente software del server |
| T1105 | Trasferimento di strumenti in ingresso |
| T1071 | Protocollo del livello applicativo |
| T1106 | API nativa |
| T1055 | Iniezione di processi (possibile post-sfruttamento) |
| T1027 | File o informazioni offuscati |
Gli amministratori dovrebbero indagare immediatamente sui sistemi che espongono:
PHP/8.1.0-dev
all'interno di intestazioni di risposta come:
X-Powered-By:
PHP/8.1.0-dev
I log HTTP dovrebbero inoltre essere esaminati per richieste sospette contenenti:
User-Agentt
o
zerodium
Molti sistemi di rilevamento delle intrusioni e prodotti IPS ora includono firme specifiche per questo schema di attacco. :contentReference[oaicite:2]{index=2}
I possibili indicatori includono:
User-Agenttzerodium| Proprietà | Valore |
|---|---|
| Autenticazione | Nessuna |
| Interazione utente | Nessuna |
| Complessità | Molto bassa |
| Privilegi richiesti | Nessuno |
| Remota | Sì |