Bericht über die Kompromittierung des Git-Repositorys und der Benutzerbasis des PHP-Projekts

Die ersten Ergebnisse der Analyse des Vorfalls im Zusammenhang mit der Erkennung von zwei bösartigen Commits im Git-Repository des PHP-Projekts mit einer Hintertür, die aktiviert wird, wenn eine Anfrage mit einem speziell formatierten User-Agent-Header gesendet wird, wurden veröffentlicht. Bei der Untersuchung der Spuren der Aktivitäten der Angreifer kam man zu dem Schluss, dass nicht der Server git.php.net selbst, auf dem das Git-Repository gehostet wurde, gehackt wurde, sondern die Datenbank mit den Konten der Projektentwickler kompromittiert wurde.

Es ist möglich, dass die Angreifer die im DBMS auf dem Server master.php.net gespeicherte Benutzerdatenbank herunterladen konnten. Der Inhalt von master.php.net wurde bereits auf den neuen, von Grund auf neu installierten Server main.php.net migriert. Alle Entwicklerkennwörter, die für den Zugriff auf die php.net-Infrastruktur verwendet wurden, wurden zurückgesetzt und der Änderungsprozess wurde über ein spezielles Formular zur Kennwortwiederherstellung eingeleitet. Die Repositories git.php.net und svn.php.net bleiben im schreibgeschützten Modus verfügbar (die Entwicklung wurde auf GitHub verschoben).

Nachdem der erste böswillige Commit entdeckt wurde, der über das Konto von Rasmus Lerdorf, dem Gründer von PHP, erfolgte, ging man davon aus, dass sein Konto gehackt worden war und Nikita Popov, einer der wichtigsten PHP-Entwickler, die Änderungen rückgängig gemacht und die Commit-Rechte für das problematische Konto gesperrt hatte. Nach einiger Zeit wurde klar, dass das Blockieren keinen Sinn machte, da ohne Überprüfung der Commits durch eine digitale Signatur jeder Teilnehmer mit Zugriff auf das php-src-Repository eine Änderung vornehmen könnte, indem er einen fiktiven Autorennamen eingibt.

Anschließend haben die Angreifer im Namen von Nikita selbst einen böswilligen Commit gesendet. Durch die Analyse der Protokolle des Gitolite-Dienstes, der zur Organisation des Zugriffs auf Repositories verwendet wird, wurde versucht, den Teilnehmer zu ermitteln, der die Änderungen tatsächlich vorgenommen hat. Obwohl alle Commits verfolgt wurden, gab es keine Protokolleinträge für die beiden böswilligen Änderungen. Es wurde deutlich, dass die Infrastruktur kompromittiert war, da die Commits direkt hinzugefügt wurden und die Verbindung über Gitolite umgangen wurde.

Der git.php.net-Server wurde schnell heruntergefahren und das Haupt-Repository zu GitHub verschoben. In der Eile wurde übersehen, dass es neben dem SSH-Zugriff über Gitolite einen weiteren Login für das Repository gab, der das Senden von Commits über HTTPS ermöglichte. In diesem Fall wurde das git-http-backend für die Interaktion mit Git verwendet, und die Authentifizierung erfolgte über den Apache2-HTTP-Server, der die Berechtigungen durch Zugriff auf eine auf GitHub gehostete Datenbank überprüfte. Server master.php.net. Die Anmeldung war sowohl mit Schlüsseln als auch mit einem regulären Passwort möglich. Die Analyse der HTTP-Serverprotokolle bestätigte, dass die schädlichen Änderungen über HTTPS vorgenommen wurden.

Die Auswertung der Protokolle ergab, dass die Angreifer nicht beim ersten Versuch eine Verbindung herstellten, sondern zunächst versuchten, den Benutzernamen zu erraten. Nachdem sie ihn identifiziert hatten, konnten sie sich beim ersten Versuch anmelden. Das bedeutet, dass sie die Passwörter von Rasmus und Nikita kannten, nicht aber deren Benutzernamen. Falls die Angreifer Zugriff auf das Datenbanksystem erlangen konnten, ist unklar, warum sie nicht sofort den dort angegebenen korrekten Benutzernamen verwendeten. Diese Diskrepanz konnte bisher nicht schlüssig erklärt werden. Der Angriff auf master.php.net gilt derzeit als wahrscheinlichstes Szenario. Server Es wurde sehr alter Code und ein veraltetes Betriebssystem verwendet, das seit langer Zeit nicht aktualisiert worden war und ungepatchte Sicherheitslücken aufwies.

Zu den durchgeführten Maßnahmen gehören die Neuinstallation der Serverumgebung master.php.net und die Übertragung von Skripten auf die neue Version von PHP 8. Der Code für die Arbeit mit dem DBMS wurde überarbeitet, um parametrisierte Abfragen zu verwenden, die das Ersetzen von SQL-Code erschweren. Der bcrypt-Algorithmus wird zum Speichern von Kennwort-Hashes in der Datenbank verwendet (zuvor wurden Kennwörter mit dem unzuverlässigen MD5-Hash gespeichert). Vorhandene Passwörter werden zurückgesetzt und Sie werden aufgefordert, über das Formular zur Passwortwiederherstellung ein neues Passwort festzulegen. Da der Zugriff auf die Repositorys git.php.net und svn.php.net über HTTPS an MD5-Hashes gebunden war, wurde beschlossen, git.php.net und svn.php.net im schreibgeschützten Modus zu belassen und alle verbleibenden PECL-Erweiterungs-Repositorys darauf, ähnlich wie das Haupt-PHP-Repository, auf GitHub zu verschieben.

Source: opennet.ru

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