Au fost publicate primele rezultate ale analizei incidentului legat de descoperirea în Git-repository-ul proiectului PHP a două commituri malițioase cu un backdoor, activat la trimiterea unei solicitări cu un headere User Agent special format. În urma studiului urmărilor activității atacatorilor, s-a ajuns la concluzia că serverul git.php.net, pe care a fost găzduit repository-ul git, nu a fost compromis, dar baza de date cu conturile dezvoltatorilor proiectului a fost afectată.
Nu se exclude posibilitatea ca atacatorii să fi putut descărca baza de utilizatori, stocată în SGBD-ul de pe serverul master.php.net. Conținutul master.php.net a fost deja mutat pe un nou server main.php.net, instalat de la zero. Toate parolele dezvoltatorilor folosite pentru accesarea infrastructurii php.net au fost resetate, iar procesul de schimbare a acestora a fost inițiat printr-un formular special de recuperare a parolei. Repository-urile git.php.net și svn.php.net rămân accesibile în modul doar citire (dezvoltarea a fost mutată pe GitHub).
După descoperirea primului commit malițios, realizat prin contul lui Rasmus Lerdorf, fondatorul PHP, s-a emis ipoteza că contul său a fost compromis și Nikita Popov, unul dintre dezvoltatorii cheie ai PHP, a revenit asupra modificărilor și a blocat drepturile de commit pentru contul problematic. După un timp, s-a realizat că blocarea nu avea sens, deoarece fără verificarea commit-urilor prin semnătura digitală, orice participant cu acces la repository-ul php-src putea aduce modificări, substituind un nume fals de autor.
Ulterior, atacatorii au trimis un commit malițios din partea lui Nikita. Prin analiza jurnalele serviciului gitolite, utilizat pentru organizarea accesului la repository-uri, a fost întreprinsă o încercare de a determina participantul care a adus cu adevărat modificările. Cu toate că s-au înregistrat toate commit-urile, pentru cele două modificări malițioase nu au existat înregistrări în log. A devenit clar că are loc o compromitere a infrastructurii, deoarece commit-urile au fost adăugate direct, ocolind conectarea prin gitolite.
Serverul git.php.net a fost dezactivat rapid, iar repository-ul principal a fost mutat pe GitHub. În grabă, s-a trecut cu vederea faptul că, pe lângă SSH folosind gitolite, exista și o altă modalitate de acces pentru a face commit-uri prin HTTPS. În acest caz, pentru interacțiunea cu Git a fost utilizat backend-ul git-http-backend, iar autentificarea a fost efectuată prin serverul HTTP Apache2, care verifica acreditivele prin intermediul unei baze de date stocate în SGBD pe server master.php.net. Se permitea accesul nu doar prin chei, ci și printr-o parolă obișnuită. Analiza jurnalelor serverului http a confirmat că modificările dăunătoare au fost adăugate prin HTTPS.
În examinarea jurnalelor s-a constatat că atacatorii nu s-au conectat din prima încercare, ci mai întâi au încercat să ghicească numele contului, dar după ce au identificat, au intrat din prima încercare, adică știau dinainte parolele lui Rasmus și Nikita, dar nu cunoșteau login-urile lor. Dacă atacatorii au reușit să acceseze SGBD-ul, nu este clar de ce nu au folosit imediat loginul corect indicat acolo. Această discrepanță nu a fost încă explicată credibil. Hack-ul master.php.net este considerat cel mai probabil scenariu, deoarece pe acest server a fost folosit un cod foarte vechi și un sistem de operare învechit, care nu au fost actualizate de mult timp și aveau vulnerabilități necorectate.
Dintre acțiunile întreprinse se numără reinstalarea mediului serverului master.php.net și migrarea scripturilor la noua versiune PHP 8. Codul pentru lucrul cu SGBD-ul a fost refăcut pentru a utiliza interogări parametrizate, complicând substituția codului SQL. Algoritmul bcrypt a fost folosit pentru stocarea hash-urilor parolelor în bază de date (în trecut, parolele erau stocate folosind hashingul nesigur MD5). Parolele existente au fost resetate și s-a propus să se stabilească o nouă parolă prin intermediul formularului de recuperare a parolei. Deoarece accesul la repository-urile git.php.net și svn.php.net prin HTTPS era legat de hash-urile MD5, s-a decis lăsarea git.php.net și svn.php.net în modul doar citire, precum și mutarea tuturor repository-urilor rămase de extensii PECL pe GitHub, similar cu repository-ul principal PHP.
Sursa: opennet.ro
