
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 .
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ì |
Questa è considerata una delle vulnerabilità di Esecuzione Remota di Codice più facili da sfruttare perché l'attaccante si limita a inviare una richiesta HTTP appositamente costruita.
Non distribuire mai snapshot di sviluppo di PHP su sistemi di produzione.
Se un server risultasse in esecuzione con la build compromessa:
Questo incidente ha dimostrato diverse lezioni importanti:
La compromissione ha accelerato i cambiamenti all'infrastruttura di sviluppo di PHP e ha evidenziato la crescente importanza della sicurezza della supply chain del software in tutto il settore. :contentReference[oaicite:3]{index=3}
La backdoor User-Agentt di PHP 8.1.0-dev rimane uno degli esempi più significativi di attacco alla supply chain del software che abbia colpito un importante progetto open source. Piuttosto che sfruttare un difetto di programmazione, gli attaccanti hanno inserito una backdoor nascosta direttamente nel codice sorgente del linguaggio, consentendo l'esecuzione remota non autenticata di codice PHP arbitrario tramite un'intestazione HTTP User-Agentt appositamente costruita. Sebbene gli snapshot di sviluppo compromessi siano stati rapidamente rimossi e nessuna versione stabile di PHP sia stata interessata, l'incidente ha sottolineato l'importanza critica di proteggere l'infrastruttura di sviluppo del software, verificare la provenienza del codice ed evitare la distribuzione di build di sviluppo in ambienti di produzione. Oggi la vulnerabilità è ampiamente studiata come un caso emblematico nella sicurezza della supply chain e serve a ricordare che l'integrità del processo di build del software è importante tanto quanto la sicurezza del codice stesso.