Rapport over de compromittering van de git-repository en de gebruikersdatabase van het PHP-project

De eerste resultaten van het onderzoek naar het incident met betrekking tot de ontdekking van twee kwaadaardige commits met een backdoor in de Git-repository van het PHP-project zijn gepubliceerd. Bij het onderzoek naar de activiteiten van de aanvallers werd geconcludeerd dat de server git.php.net, waar de git-repository was geplaatst, niet was gehackt, maar dat de database met de accounts van de ontwikkelaars van het project was gecompromitteerd.

Het is niet uitgesloten dat de aanvallers in staat waren de gebruikersdatabase die in de database op de server master.php.net was opgeslagen, te downloaden. De inhoud van master.php.net is inmiddels overgezet naar een nieuwe server main.php.net, die vanaf nul is ingericht. Alle wachtwoorden van de ontwikkelaars die werden gebruikt voor toegang tot de php.net-infrastructuur zijn gereset, en het proces voor wijziging ervan is via een speciaal formulier voor wachtwoordherstel gestart. De repositories git.php.net en svn.php.net blijven alleen in leesmodus toegankelijk (ontwikkeling is verplaatst naar GitHub).

Na de ontdekking van de eerste kwaadaardige commit, uitgevoerd via het account van Rasmus Lerdorf, de oprichter van PHP, werd gesuggereerd dat zijn account was gehackt en dat Nikita Popov, een van de belangrijkste ontwikkelaars van PHP, de wijzigingen had teruggedraaid en de commit-rechten voor het problematische account had geblokkeerd. Na enige tijd kwam het besef dat de blokkade geen zin had, aangezien zonder verificatie van commits via digitale handtekeningen, elke deelnemer met toegang tot de repository php-src wijzigingen kon aanbrengen door een fictieve naam als auteur in te vullen.

Daarop stuurden de aanvallers een kwaadaardige commit namens Nikita zelf. Door het analyseren van de logs van de gitolite-service, die werd gebruikt voor het beheren van de toegang tot de repositories, werd geprobeerd de participant te identificeren die inderdaad de wijzigingen had aangebracht. Ondanks dat alle commits waren geregistreerd, waren er in de log geen records van de twee kwaadaardige wijzigingen. Het werd duidelijk dat er een compromittering van de infrastructuur plaatsvond, aangezien de commits rechtstreeks waren toegevoegd, zonder gebruik te maken van de verbinding via gitolite.

De server git.php.net is snel uitgeschakeld en de primaire repository is naar GitHub verplaatst. In de haast werd over het hoofd gezien dat er, naast SSH met gitolite, nog een andere toegangsmethode was die het mogelijk maakte om commits via HTTPS te versturen. In dit geval werd de git-http-backend gebruikt voor interactie met Git, terwijl de authenticatie plaatsvond via de HTTP-server Apache2, die de bevoegdheden controleerde door een database te raadplegen, geplaatst in een RDBMS op de server master.php.net. Toegang was niet alleen toegestaan via sleutels, maar ook via een gewoon wachtwoord. De analyse van de logs van de http-server bevestigde dat kwaadwillige wijzigingen werden toegevoegd via HTTPS.

Bij het bestuderen van de logs bleek dat de aanvallers niet in één keer waren verbonden, maar eerst probeerden ze een accountnaam te raden. Nadat ze deze hadden vastgesteld, logden ze bij de eerste poging in, wat betekent dat ze van tevoren de wachtwoorden van Rasmus en Nikita wisten, maar hun inlognamen niet. Als de aanvallers toegang tot de RDBMS hebben gekregen, is het onduidelijk waarom ze niet meteen de correcte gebruikersnaam hebben gebruikt die daar was opgegeven. Deze inconsistentie heeft tot nu toe geen betrouwbare verklaring gekregen. De hacking van master.php.net wordt beschouwd als het meest waarschijnlijke scenario, omdat daar een de server zeer oude code en verouderd besturingssysteem werd gebruikt, die lange tijd niet waren bijgewerkt en onverholpen kwetsbaarheden bevatten.

Van de ondernomen acties wordt opgemerkt dat de omgeving van server master.php.net opnieuw is geïnstalleerd en dat de scripts zijn overgezet naar de nieuwe versie PHP 8. De code voor het werken met de RDBMS is herschreven om gebruik te maken van parameterized queries, die het invoegen van SQL-code bemoeilijken. Voor het opslaan van wachtwoord-hashes in de database wordt het bcrypt-algoritme gebruikt (eerder werden wachtwoorden opgeslagen met een onbetrouwbare MD5-hash). Bestaande wachtwoorden zijn gereset en gebruikers wordt gevraagd een nieuw wachtwoord in te stellen via het herstelformulier. Aangezien de toegang tot de repositories git.php.net en svn.php.net via HTTPS aan MD5-hashes was gekoppeld, is besloten om git.php.net en svn.php.net alleen-lezen te laten en alle resterende repositories van de PECL-extensies naar GitHub te verplaatsen, vergelijkbaar met de primaire PHP-repository.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster