Raportați despre compromisul depozitului git și al bazei de utilizatori a proiectului PHP

Au fost publicate primele rezultate ale analizei unui incident legat de identificarea a două comiteri rău intenționate în depozitul Git al unui proiect PHP cu backdoor activat la trimiterea unei cereri cu un antet User Agent special conceput. În cursul studierii urmelor activităților atacatorilor, s-a ajuns la concluzia că serverul git.php.net însuși, pe care se afla depozitul git, nu a fost piratat, dar baza de date cu conturile dezvoltatorilor de proiect a fost compromisă. .

Este posibil ca atacatorii să fi putut descărca baza de date de utilizatori stocată în DBMS pe serverul master.php.net. Conținutul master.php.net a fost deja migrat pe noul server main.php.net instalat de la zero. Toate parolele de dezvoltator folosite pentru a accesa infrastructura php.net au fost resetate și procesul de schimbare a acestora a fost inițiat printr-un formular special de recuperare a parolei. Arhivele git.php.net și svn.php.net rămân doar în citire (dezvoltarea a fost mutată în GitHub).

După descoperirea primei comiteri rău intenționate făcute prin contul lui Rasmus Lerdorf, fondatorul PHP, s-a presupus că contul său a fost piratat și Nikita Popov, unul dintre dezvoltatorii cheie PHP, a anulat modificările și a blocat drepturile de comitere pentru contul problematic. După ceva timp, s-a dat seama că blocarea nu avea sens, deoarece fără verificarea comiterilor folosind o semnătură digitală, orice participant cu acces la depozitul php-src putea face o schimbare prin înlocuirea unui nume de autor fictiv.

Apoi, atacatorii au trimis o comitere rău intenționată în numele lui Nikita însuși. Analizând jurnalele serviciului gitolite, utilizate pentru organizarea accesului la depozite, s-a încercat determinarea participantului care a făcut efectiv modificările. În ciuda includerii contabilității pentru toate comitările, nu au existat intrări în jurnal pentru două modificări rău intenționate. A devenit clar că a existat un compromis al infrastructurii, deoarece commit-urile au fost adăugate direct, ocolind conexiunea prin gitolite.

Serverul git.php.net a fost dezactivat imediat, iar depozitul principal a fost transferat pe GitHub. În grabă, s-a uitat că pentru a accesa depozitul, pe lângă SSH folosind gitolite, a existat o altă intrare care îți permitea să trimiți commit-uri prin HTTPS. În acest caz, git-http-backend-ul a fost folosit pentru a interacționa cu Git, iar autentificarea a fost efectuată folosind serverul Apache2 HTTP, care a verificat acreditările prin accesarea bazei de date găzduite în DBMS pe serverul master.php.net. Conectarea a fost permisă nu numai cu chei, ci și cu o parolă obișnuită. Analiza jurnalelor serverului http a confirmat că au fost adăugate modificări rău intenționate prin HTTPS.

La studierea jurnalelor, s-a dezvăluit că atacatorii nu s-au conectat prima dată, ci au încercat inițial să găsească numele contului, dar după ce l-au identificat, s-au conectat la prima încercare, adică. știau din timp parolele lui Rasmus și Nikita, dar nu le cunoșteau datele de conectare. Dacă atacatorii au reușit să obțină acces la DBMS, nu este clar de ce nu au folosit imediat autentificarea corectă specificată acolo. Această discrepanță nu a primit încă o explicație de încredere. Hack-ul master.php.net este considerat scenariul cel mai probabil, deoarece acest server folosea cod foarte vechi și un sistem de operare învechit, care nu fusese actualizat de mult timp și avea vulnerabilități nepattchizate.

Acțiunile întreprinse includ reinstalarea mediului server master.php.net și transferul de scripturi la noua versiune de PHP 8. Codul de lucru cu SGBD a fost modificat pentru a utiliza interogări parametrizate care complică înlocuirea codului SQL. Algoritmul bcrypt este folosit pentru a stoca hash-uri de parole în baza de date (anterior, parolele erau stocate folosind un hash MD5 nesigur). Parolele existente sunt resetate și vi se solicită să setați o nouă parolă prin intermediul formularului de recuperare a parolei. Deoarece accesul la depozitele git.php.net și svn.php.net prin HTTPS a fost legat de hash-uri MD5, s-a decis să se lase git.php.net și svn.php.net în modul doar citire și, de asemenea, să se mute toate cele rămase pentru ele depozitele de extensii PECL de pe GitHub, similar cu depozitul principal PHP.

Sursa: opennet.ru

Adauga un comentariu