Informeu sobre el compromís del repositori git i la base d'usuaris del projecte PHP

S'han publicat els primers resultats de l'anàlisi d'una incidència relacionada amb la identificació de dos commits maliciosos al repositori Git d'un projecte PHP amb una porta posterior activada quan s'envia una sol·licitud amb una capçalera d'Agent d'usuari especialment dissenyada. En el curs d'estudiar els rastres de les activitats dels atacants, es va concloure que el propi servidor git.php.net, on es trobava el repositori git, no va ser piratejat, sinó que es va comprometre la base de dades amb els comptes dels desenvolupadors del projecte. .

És possible que els atacants hagin pogut descarregar la base de dades d'usuaris emmagatzemada al SGBD al servidor master.php.net. El contingut de master.php.net ja s'ha migrat al nou servidor main.php.net instal·lat des de zero. Es van restablir totes les contrasenyes de desenvolupadors utilitzades per accedir a la infraestructura php.net i es va iniciar el procés de canvi mitjançant un formulari especial de recuperació de contrasenyes. Els repositoris git.php.net i svn.php.net romanen de només lectura (el desenvolupament s'ha mogut a GitHub).

Després del descobriment de la primera confirmació maliciosa feta a través del compte de Rasmus Lerdorf, el fundador de PHP, es va suposar que el seu compte havia estat piratejat i Nikita Popov, un dels desenvolupadors clau de PHP, va anul·lar els canvis i va bloquejar els drets de commit per a el compte problemàtic. Després d'un temps, es va adonar que el bloqueig no tenia sentit, ja que sense la verificació de les confirmacions mitjançant una signatura digital, qualsevol participant amb accés al repositori php-src podria fer un canvi substituint un nom d'autor fictici.

A continuació, els atacants van enviar un commit maliciós en nom del mateix Nikita. Mitjançant l'anàlisi dels registres del servei gitolite, utilitzat per organitzar l'accés als repositoris, es va intentar determinar el participant que realment va fer els canvis. Malgrat la inclusió de la comptabilitat per a totes les confirmacions, no hi havia entrades al registre per a dos canvis maliciosos. Va quedar clar que hi havia un compromís de la infraestructura, ja que s'hi van afegir commits directament, obviant la connexió via gitolite.

El servidor git.php.net es va desactivar ràpidament i el repositori principal es va transferir a GitHub. De pressa, es va oblidar que per accedir al repositori, a més de SSH mitjançant gitolite, hi havia una altra entrada que permetia enviar commits mitjançant HTTPS. En aquest cas, es va utilitzar el git-http-backend per interactuar amb Git i l'autenticació es va realitzar mitjançant el servidor HTTP Apache2, que verificava les credencials accedint a la base de dades allotjada al DBMS al servidor master.php.net. L'inici de sessió es va permetre no només amb claus, sinó també amb una contrasenya normal. L'anàlisi dels registres del servidor http va confirmar que es van afegir canvis maliciosos mitjançant HTTPS.

En estudiar els registres, es va revelar que els atacants no es van connectar la primera vegada, sinó que inicialment van intentar trobar el nom del compte, però després d'identificar-lo, van iniciar sessió al primer intent, és a dir. sabien les contrasenyes de Rasmus i Nikita per endavant, però no sabien els seus inicis de sessió. Si els atacants van poder accedir al SGBD, no està clar per què no van utilitzar immediatament l'inici de sessió correcte especificat allí. Aquesta discrepància encara no ha rebut una explicació fiable. El pirateig de master.php.net es considera l'escenari més probable, ja que aquest servidor utilitzava codi molt antic i un sistema operatiu obsolet, que feia temps que no s'havia actualitzat i tenia vulnerabilitats sense corregir.

Les accions realitzades inclouen la reinstal·lació de l'entorn del servidor master.php.net i la transferència d'scripts a la nova versió de PHP 8. S'ha modificat el codi per treballar amb el SGBD per utilitzar consultes parametritzades que dificulten la substitució del codi SQL. L'algoritme bcrypt s'utilitza per emmagatzemar hash de contrasenyes a la base de dades (anteriorment, les contrasenyes s'emmagatzemaven amb un hash MD5 poc fiable). Les contrasenyes existents es restableixen i se us demana que establiu una nova contrasenya mitjançant el formulari de recuperació de contrasenya. Atès que l'accés als repositoris git.php.net i svn.php.net mitjançant HTTPS estava lligat a hash MD5, es va decidir deixar git.php.net i svn.php.net en mode només de lectura i també moure-ho tot. els restants als dipòsits d'extensió PECL a GitHub, similar al dipòsit principal de PHP.

Font: opennet.ru

Afegeix comentari