Domenica scorsa il server Git di PHP è stato violato da un cyber criminale che è riuscito ad inserire alcune istruzioni malevoli per l’installazione di una backdoor all’interno del codice sorgente del linguaggio di programmazione lato server usato nel 79% dei siti Web online in tutto il mondo.
Per l’esattezza, le modifiche non autorizzate al codice sono state apportate alla versione PHP 8.1 che non è stata ancora rilasciata nella sua forma finale e lo sarà solo a fine anno.
Secondo quanto riportato nel comunicato ufficiale, l’hacker è riuscito ad inserire il codice malevolo in due commit firmati con i nomi dei due sviluppatori e amministratori del server, Rasmus Lerdorf e Nikita Popov, ma al momento non è ancora chiaro se ciò sia stato possibile a causa di una compromissione del server stesso o degli account dei due sviluppatori (ipotesi comunque esclusa dallo stesso Popov).
In ogni caso, l’obiettivo dell’attaccante era quello di scatenare un attacco alla supply chain con una tecnica simile a quella già utilizzata recentemente per compromettere la catena di distribuzione degli aggiornamenti di sicurezza della piattaforma SolarWinds Orion.
Indice degli argomenti
PHP, server Git violato: i dettagli
La modifica non autorizzata al codice sorgente di PHP è avvenuta mediante due commit malevoli (analizzabili qui e qui) inseriti come “fix typo”, ossia spacciandoli per semplici correzioni ortografiche apportate dagli (incolpevoli) sviluppatori.
Probabilmente, però, anche grazie all’esperienza maturata dopo l’attacco a SolarWinds, questa seppur banale modifica non è passata inosservata a Popov: una prima verifica ha infatti permesso all’amministratore del server Git di individuare una modifica alla linea 370 del codice apparentemente firmata da Lerdof.
Nel codice era stata inserita l’istruzione zend_eval_string utilizzata dall’attaccante per installare la backdoor che gli avrebbe poi consentito di eseguire codice da remoto (RCE, Remote Code Execution) su qualunque sito Web avesse eseguito il codice manomesso.
In particolare, la riga di codice eseguiva codice PHP nell’intestazione HTTP useragent qualora la stringa stessa iniziasse con “zerodium”. Non è chiaro perché l’attaccante abbia utilizzato proprio Zerodium, il nome di una nota società di cyber security americana ovviamente estranea all’accaduto, come variabile di controllo per l’avvio dell’attacco.
Il secondo commit malevolo è stato poi individuato domenica sera da un altro sviluppatore, Michael Voříšek: la modifica al codice, in questo caso, era stata firmata con l’account di Popov e “ripristinava” il precedente errore di battitura.
Quale lezione dall’attacco al server PHP
La tempestiva individuazione dei due commit malevoli all’interno del codice PHP ha consentito di scongiurare un attacco su vasta scala dalle proporzioni incalcolabili.
La semplicità con cui è possibile firmare un commit a nome di qualcun altro ha inoltre spinto i gestori del server PHP a spostare il repository su GitHub perché, come ha scritto lo stesso Popov nel comunicato ufficiale, “mantenere la nostra infrastruttura Git è un rischio non necessario”.
D’ora in avanti, quindi, tutti coloro che volessero contribuire al progetto PHP dovranno prima creare un account su GitHub attivando l‘autenticazione a due fattori (2FA).
Secondo Pierluigi Paganini, Cyber Security Analyst e CEO CYBHORUS, “ci troviamo dinanzi ad un nuovo attacco alla supply chain di un software: ciò significa che, potenzialmente, la backdoor inserita nel sorgente ufficiale dell’organizzazione potrebbe aver raggiunto un numero significativo di sviluppatori e utenti”.
“Altro elemento che emerge da questo attacco”, prosegue l’analisi di Paganini, “è la compromissione del server git.php.net server, sulla cui modalità poco sappiamo in questo momento. Come sottolineato dallo sviluppatore Popov, gestire un repository interno rappresentava per l’organizzazione un rischio non trascurabile che richiedeva un effort significativo. Per questo motivo è stato deciso di utilizzare un repository su GitHub per il quale sono in uso controlli di sicurezza maggiori”.
“Resta il mistero di chi sia dietro questo attacco”, conclude Paganini, “il riferimento all’azienda Zerodium nel codice potrebbe essere un tentativo di depistaggio oppure l’intento di un hacker di dimostrare all’azienda che commercializza zero-day exploit la capacità di impiantare un codice malevolo nel sorgente dell’organizzazione sfruttando una falla ad oggi non nota. Future investigazioni consentiranno di far luce anche su questo aspetto. Il caso è tutt’altro che risolto”.
Cosa si evince, dunque, da questo pericolo scampato? Secondo Stefano Zanero, del Politecnico di Milano, “sono due gli aspetti da tenere in considerazione: da un lato, di nuovo, la fragilità della nostra supply chain software rispetto a questo tipo di attacchi. Dall’altro il rischio sotteso da alcuni progetti open source ampiamente utilizzati e in alcuni casi relativamente “poco” finanziati (avevamo già avuto l’esempio con le vulnerabilità di openSSL). Dobbiamo riflettere su questi mattoni fondamentali della nostra infrastruttura”.
È inutile dire che gli sviluppatori stanno ora passando al setaccio ogni singola riga del codice PHP alla ricerca di qualche altra backdoor, magari già attivata in una precedente compromissione del server finora non identificata.