Rapporto sulla compromissione del repository git e del database utenti del progetto PHP

Sono stati pubblicati i primi risultati dell'analisi dell'incidente legato alla scoperta di due commit dannosi con backdoor nel repository Git del progetto PHP, attivabile tramite una richiesta con un'intestazione User Agent appositamente formattata. Dall'analisi delle tracce delle attività degli attaccanti è emerso che il server git.php.net, dove era ospitato il repository Git, non è stato compromesso, ma è stato compromesso il database contenente gli account degli sviluppatori del progetto.

Non si esclude che i malintenzionati siano riusciti a scaricare il database degli utenti, memorizzato nel DBMS sul server master.php.net. I contenuti di master.php.net sono già stati trasferiti su un nuovo server, main.php.net, installato da zero. Tutte le password degli sviluppatori utilizzate per accedere all'infrastruttura php.net sono state reimpostate e è stato avviato il processo di cambio tramite un modulo speciale di recupero della password. I repository git.php.net e svn.php.net rimangono accessibili in modalità sola lettura (lo sviluppo è stato trasferito su GitHub).

Dopo aver scoperto il primo commit dannoso effettuato tramite l'account di Rasmus Lerdorf, il fondatore di PHP, si è ipotizzato che il suo account fosse stato compromesso e che Nikita Popov, uno dei principali sviluppatori di PHP, avesse annullato le modifiche e bloccato i diritti di commit per l'account problematico. Dopo un po' di tempo, ci si è resi conto che il blocco non aveva senso, poiché senza la verifica dei commit tramite firma digitale, qualsiasi partecipante con accesso al repository php-src poteva apportare modifiche utilizzando un nome autore fittizio.

Successivamente, gli aggressori hanno inviato un commit dannoso a nome dello stesso Nikita. Attraverso l'analisi dei log del servizio gitolite, utilizzato per gestire l'accesso ai repository, è stata effettuata un tentativo di identificare il partecipante che aveva effettivamente effettuato le modifiche. Nonostante fosse attivato il tracciamento di tutti i commit, non sono state trovate registrazioni per due delle modifiche dannose nel log. È diventato chiaro che c'era una compromissione dell'infrastruttura, poiché i commit erano stati aggiunti direttamente, bypassando la connessione tramite gitolite.

Il server git.php.net è stato disattivato e il repository principale è stato trasferito su GitHub. Nella fretta è stata trascurata l'osservazione che, oltre all'accesso SSH usando gitolite, c'era un altro modo per inviare commit tramite HTTPS. In questo caso, per l'interazione con Git veniva utilizzato il backend git-http-backend, e l'autenticazione avveniva tramite il server HTTP Apache2, che verificava le credenziali confrontandole con un database collocato in un DBMS su server master.php.net. L'accesso era consentito non solo con le chiavi, ma anche con una normale password. L'analisi dei log del server HTTP ha confermato che le modifiche malevole erano state aggiunte tramite HTTPS.

Dall'analisi dei log risulta che gli attaccanti non si sono connessi al primo tentativo, ma inizialmente hanno cercato di indovinare il nome dell'account. Una volta identificato, sono entrati al primo colpo, dimostrando di conoscere in anticipo le password di Rasmus e Nikita, ma non i loro nomi utente. Se gli attaccanti sono riusciti ad accedere al DBMS, non è chiaro perché non abbiano immediatamente utilizzato il corretto nome utente presente. Questa discrepanza non ha ancora ricevuto una spiegazione attendibile. L'hacking di master.php.net è considerato lo scenario più probabile, poiché su di esso server è stato utilizzato un codice molto vecchio e un sistema operativo obsoleto, che non era stato aggiornato da tempo e presentava vulnerabilità non corrette.

Tra le azioni intraprese, si segnala la reinstallazione dell'ambiente del server master.php.net e il passaggio degli script alla nuova versione PHP 8. Il codice per interagire con il DBMS è stato riscritto per utilizzare query parametrizzate, rendendo più difficile l'inserimento di codice SQL. Per memorizzare gli hash delle password nel database, è stato adottato l'algoritmo bcrypt (in precedenza, le password erano memorizzate utilizzando l'affidabile hash MD5). Le password esistenti sono state resettate e si è proposto di impostarne una nuova tramite il modulo di recupero password. Poiché l'accesso ai repository git.php.net e svn.php.net tramite HTTPS era legato agli hash MD5, è stato deciso di mantenere git.php.net e svn.php.net in modalità di sola lettura e di trasferire tutti i repository rimanenti delle estensioni PECL su GitHub, analogamente al repository principale di PHP.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster