Rapporteer over het compromis van de git-repository en gebruikersbasis van het PHP-project

De eerste resultaten van de analyse van een incident gerelateerd aan de identificatie van twee kwaadaardige commits in de Git-repository van een PHP-project waarbij een achterdeur werd geactiveerd bij het verzenden van een verzoek met een speciaal ontworpen User Agent-header, zijn gepubliceerd. Tijdens het bestuderen van de sporen van de activiteiten van de aanvallers werd geconcludeerd dat de git.php.net-server zelf, waarop de git-repository zich bevond, niet was gehackt, maar dat de database met de accounts van de projectontwikkelaars was gecompromitteerd. .

Het is mogelijk dat de aanvallers de gebruikersdatabase die in het DBMS is opgeslagen, op de master.php.net-server hebben kunnen downloaden. De inhoud van master.php.net is al gemigreerd naar de nieuwe main.php.net-server die helemaal opnieuw is geïnstalleerd. Alle ontwikkelaarswachtwoorden die werden gebruikt om toegang te krijgen tot de php.net-infrastructuur werden opnieuw ingesteld en het proces om ze te wijzigen werd gestart via een speciaal wachtwoordherstelformulier. De git.php.net en svn.php.net repositories blijven alleen-lezen (de ontwikkeling is verplaatst naar GitHub).

Na de ontdekking van de eerste kwaadwillige commit via het account van Rasmus Lerdorf, de oprichter van PHP, werd aangenomen dat zijn account was gehackt en Nikita Popov, een van de belangrijkste PHP-ontwikkelaars, draaide de wijzigingen terug en blokkeerde de commit-rechten voor de problematische rekening. Na enige tijd kwam het besef dat het blokkeren geen zin had, omdat zonder verificatie van commits met behulp van een digitale handtekening elke deelnemer met toegang tot de php-src-repository een wijziging kon aanbrengen door een fictieve auteursnaam te vervangen.

Vervolgens stuurden de aanvallers namens Nikita zelf een kwaadaardige commit. Door de logs van de gitolite-service te analyseren, die wordt gebruikt om de toegang tot repositories te organiseren, werd een poging gedaan om de deelnemer te bepalen die daadwerkelijk de wijzigingen heeft aangebracht. Ondanks dat er een boekhouding voor alle commits was opgenomen, waren er geen vermeldingen in het logbestand voor twee kwaadaardige wijzigingen. Het werd duidelijk dat er sprake was van een compromis in de infrastructuur, aangezien commits rechtstreeks werden toegevoegd, waarbij de verbinding via gitolite werd omzeild.

De git.php.net-server werd onmiddellijk uitgeschakeld en de primaire repository werd overgebracht naar GitHub. Al snel werd vergeten dat om toegang te krijgen tot de repository, naast SSH met behulp van gitolite, er nog een andere invoer was waarmee je commits via HTTPS kon verzenden. In dit geval werd de git-http-backend gebruikt om met Git te communiceren, en werd de authenticatie uitgevoerd met behulp van de Apache2 HTTP-server, die de inloggegevens verifieerde door toegang te krijgen tot de database die gehost werd in het DBMS op de master.php.net-server. Inloggen was niet alleen toegestaan ​​met sleutels, maar ook met een gewoon wachtwoord. Analyse van de http-serverlogboeken bevestigde dat er via HTTPS kwaadaardige wijzigingen zijn toegevoegd.

Bij het bestuderen van de logs bleek dat de aanvallers de eerste keer niet verbinding hadden gemaakt, maar aanvankelijk probeerden de accountnaam te vinden, maar nadat ze deze hadden geïdentificeerd, logden ze bij de eerste poging in, d.w.z. ze kenden de wachtwoorden van Rasmus en Nikita van tevoren, maar hun logins niet. Als de aanvallers toegang hebben kunnen krijgen tot het DBMS, is het onduidelijk waarom ze niet meteen de juiste login hebben gebruikt die daar is opgegeven. Deze discrepantie heeft nog geen betrouwbare verklaring gekregen. De hack van master.php.net wordt als het meest waarschijnlijke scenario beschouwd, omdat deze server zeer oude code en een verouderd besturingssysteem gebruikte, dat al lange tijd niet was bijgewerkt en niet-gepatchte kwetsbaarheden vertoonde.

De ondernomen acties omvatten onder meer de herinstallatie van de master.php.net-serveromgeving en de overdracht van scripts naar de nieuwe versie van PHP 8. De code voor het werken met het DBMS is aangepast om geparametriseerde queries te gebruiken die de vervanging van SQL-code bemoeilijken. Het bcrypt-algoritme wordt gebruikt om wachtwoord-hashes in de database op te slaan (voorheen werden wachtwoorden opgeslagen met behulp van een onbetrouwbare MD5-hash). Bestaande wachtwoorden worden opnieuw ingesteld en u wordt gevraagd een nieuw wachtwoord in te stellen via het wachtwoordherstelformulier. Omdat toegang tot de git.php.net en svn.php.net repositories via HTTPS gebonden was aan MD5-hashes, werd besloten om git.php.net en svn.php.net in alleen-lezen modus te laten, en ook alle de overige zijn voor hen PECL-extensierepository's op GitHub, vergelijkbaar met de belangrijkste PHP-repository.

Bron: opennet.ru

Voeg een reactie