Bericht über die Kompromittierung des Git-Repositories und der Benutzerdatenbank des PHP-Projekts

Die ersten Ergebnisse der Untersuchung des Vorfalls sind veröffentlicht worden. Dabei wurden zwei schadhafte Commits mit einem Backdoor im Git-Repository des PHP-Projekts entdeckt, die durch eine spezielle User-Agent-Headeranfrage aktiviert werden konnten. Bei der Analyse der Aktivitäten der Angreifer wurde festgestellt, dass der Server git.php.net, auf dem das Git-Repository gehostet wurde, nicht gehackt wurde, jedoch die Datenbank mit den Konten der Projektentwickler kompromittiert wurde.

Es ist nicht auszuschließen, dass die Angreifer die Benutzerdatenbank, die in der Datenbank auf dem Server master.php.net gespeichert war, heruntergeladen haben. Die Inhalte von master.php.net wurden bereits auf den neuen Server main.php.net übertragen, der von Grund auf neu eingerichtet wurde. Alle von den Entwicklern verwendeten Passwörter für den Zugang zur Infrastruktur von php.net wurden zurückgesetzt, und der Prozess zur Änderung dieser Passwörter wurde mit einem speziellen Formular zur Passwortwiederherstellung initiiert. Die Repositories git.php.net und svn.php.net sind weiterhin im Nur-Lese-Modus verfügbar (die Entwicklung wurde auf GitHub verlagert).

Nach der Entdeckung des ersten schädlichen Commits, der über das Konto von Rasmus Lerdorf, dem Gründer von PHP, vorgenommen wurde, wurde die Vermutung geäußert, dass sein Konto gehackt wurde. Nikita Popov, einer der Hauptentwickler von PHP, machte daraufhin einen Rückschritt und sperrte die Commit-Rechte für das betroffene Konto. Nach einiger Zeit wurde jedoch klar, dass diese Sperrung keinen Sinn machte, da ohne die Verifizierung der Commits über digitale Signaturen jeder Teilnehmer mit Zugriff auf das php-src-Repository Änderungen vornehmen konnte, indem er einen fiktiven Autorennamen einfügte.

Daraufhin sendeten die Angreifer einen schädlichen Commit im Namen von Nikita selbst. Durch die Analyse der Protokolle des Dienstes gitolite, der zur Verwaltung des Zugangs zu den Repositories verwendet wird, wurde ein Versuch unternommen, den Teilnehmer zu identifizieren, der tatsächlich die Änderungen vorgenommen hat. Trotz der aktivierten Protokollierung aller Commits gab es für zwei schädliche Änderungen keine Einträge im Protokoll. Es wurde offensichtlich, dass eine Kompromittierung der Infrastruktur vorlag, da die Commits direkt hinzugefügt wurden, um die Verbindung über gitolite zu umgehen.

Der Server git.php.net wurde kurzfristig abgeschaltet, und das Hauptrepository wurde auf GitHub migriert. In der Eile wurde übersehen, dass neben SSH mit gitolite ein weiterer Zugang bestand, der das Senden von Commits über HTTPS ermöglichte. In diesem Fall wurde der Backend-Server git-http-backend für die Interaktion mit Git verwendet, während die Authentifizierung durch den HTTP-Server Apache2 erfolgte, der die Berechtigungen über einen Datenbankaufruf in der verwalteten Datenbank überprüfte. Server master.php.net. Der Zugang war nicht nur über Schlüssel, sondern auch mit einem regulären Passwort möglich. Eine Analyse der Logs des HTTP-Servers bestätigte, dass die schädlichen Änderungen über HTTPS hinzugefügt wurden.

Bei der Analyse der Logs wurde festgestellt, dass die Angreifer nicht beim ersten Versuch zugriffen, sondern zunächst versuchten, den Benutzernamen zu erraten. Nachdem sie den richtigen Namen gefunden hatten, gelang ihnen der Zugang beim ersten Versuch. Es scheint, dass sie die Passwörter von Rasmus und Nikita bereits kannten, aber nicht die entsprechenden Benutzernamen. Falls die Angreifer Zugriff auf die Datenbank erhalten konnten, bleibt unklar, warum sie nicht sofort den dort angegebenen korrekten Benutzernamen verwendet haben. Diese Diskrepanz hat bislang keine eindeutige Erklärung gefunden. Ein Hackerangriff auf master.php.net wird als das wahrscheinlichste Szenario betrachtet, da dort sehr alter Code und ein veraltetes Betriebssystem verwendet wurden, die seit langem nicht aktualisiert und mit unbehobenen Schwachstellen behaftet waren. Server verwendet wurden.

Zu den durchgeführten Maßnahmen gehört die Neuinstallation der Serverumgebung master.php.net und die Anpassung der Skripte an die neue PHP-Version 8. Der Code zur Arbeit mit der Datenbank wurde so umgestaltet, dass parametrische Abfragen eingesetzt werden, die die Einfügung von SQL-Code erschweren. Zur Speicherung der Passwort-Hashes in der Datenbank wird der Algorithmus bcrypt verwendet (zuvor wurden Passwörter mit dem unsicheren MD5-Hash gespeichert). Bestehende Passwörter wurden zurückgesetzt, und es wird empfohlen, ein neues Passwort über das Passwort-Wiederherstellungsformular festzulegen. Da der Zugang zu den Repositories git.php.net und svn.php.net über HTTPS mit MD5-Hashes verknüpft war, wurde beschlossen, git.php.net und svn.php.net im Nur-Lesen-Modus zu belassen und alle verbleibenden PECL-Erweiterungs-Repositories auf GitHub zu übertragen, ähnlich wie beim Hauptrepository von PHP.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster