Security: Versteckte Git-Commits aufdecken
Auch wenn der ursprüngliche Commit aus der History gelöscht wird, ist er noch auffindbar. Das Programm github-secrets spürt solche Sicherheitslücken auf.
- Tobias Madl
Git kennen viele als Versionsmanagementsystem für eigene Softwareprojekte oder als Plattform für gemeinsame Open-Source-Entwicklung bei Anbietern wie GitHub oder GitLab. Ein zentraler Bestandteil von Git ist die durch Commits repräsentierte Historie eines Projekts. Ein Commit in Git (git commit
) speichert die Änderungen seit dem letzten Commit. Der Commit enthält Informationen darüber, wer wann welche Dateien hinzugefügt, entfernt oder verändert hat und was angepasst wurde. Mit git push
lädt man die lokalen Commits in das Remote-Repository hoch, damit andere Entwickler darauf zugreifen können.
Jeder Commit erhält eine eindeutige Kennung, einen SHA-1-Hash, mit dem er sich referenzieren lässt. Die Commits werden in einem Repository gespeichert und sind beispielsweise über git log
einsehbar. Der HEAD-Pointer des Repositorys zeigt dabei immer auf den aktuellsten Commit. Die Commits bilden eine verknüpfte Liste (Linked List), bei der jeder Commit auf seinen Vorgänger verweist. Zur Referenzierung eines Commit reichen oft schon die ersten vier Zeichen des SHA-1-Hashs aus, um ihn eindeutig zu identifizieren. Die gesamte Änderungshistorie, Metadaten und sonstige Informationen, die Git benötigt, speichert Git im .git-Ordner des Repositorys und nicht in den eigentlichen Dateien.
- Konfigurationsdateien mit Passwörtern oder anderen sensiblen Daten können unbeabsichtigt in Git landen.
- Die Daten und Commits können aus der History gelöscht werden.
- Nicht mehr sichtbare Commits lassen sich dennoch wiederfinden.
- Das Programm github-secrets spürt gelöschte und potenziell sensible Commits auf.
Entwicklerinnen und Entwicklern kann es hin und wieder passieren, dass sie etwas in Git committen und pushen, das gar nicht in Git landen sollte. Dazu gehören Konfigurationsdateien mit Passwörtern, Schlüsselmaterial oder andere geheime Daten, die nicht öffentlich zugänglich sein sollten. Selbst wenn ein weiterer Commit diese Dateien wieder löscht, bleibt der ursprüngliche Commit weiterhin in der Git-Historie erhalten und ist für jeden einsehbar. Diese Dateien müssen daher nicht nur entfernt, sondern auch aus der Historie gelöscht werden – eine Funktion, die Standardbenutzer nur selten benötigen. Glücklicherweise gibt es bereits eine Diskussion auf Stack Overflow, die zugehörige Frage wurde schon über 980 000 Mal aufgerufen.
Das war die Leseprobe unseres heise-Plus-Artikels "Security: Versteckte Git-Commits aufdecken". Mit einem heise-Plus-Abo können sie den ganzen Artikel lesen und anhören.