Kate Murphy stellt den Besuchern ihres Blogs eine scheinbar einfache Aufgabe: “Klont doch mal mein Git-Repository, da stecken nur 12 Objekte drin.” Die aber haben es in sich.
Das Forken sei keine gute Idee, teilt die Entdeckerin des Problems anschließend in ihrem Blog mit, denn das Repository enthält eine Git-Bombe. Das bedeutet, wenn der Nutzer ein
git clone https://github.com/Katee/git-bomb.git
aufruft, beendet der Rechner Git in der Regel infolge einer Arbeitsspeicherüberlastung. Das scheint allerdings nur der Idealfall zu sein, beim Selbstversuch auf einem Debian 9 fror der Rechner schlicht ein. Die Autorin bietet noch eine leicht abgewandelte Form der Git-Bombe an, bei der ihr Rechner mit einem Segfault die Grätsche machte.
Die Git-Bombe gehört zu den klassischen Forkbomben, bei denen sich Funktionen endlos selbst aufrufen, um so sämtliche Systemressourcen zu erschöpfen. Git Bomb orientiert sich dabei an einem speziellen Typ, einer XML-Bombe, die auch beim so genannten Billion-Laughs-Angriff zum Einsatz kommt.
Sie macht sich dabei Gits Deduplikations-Feature zunutze, denn Git dedupliziert Tree-Objekte (die Verzeichnisstrukturen eines Repositories abbilden) und Blobs (um Dateien zu speichern). Zweck der Übung: Bleibt eine Datei über mehrere Versionen von Git hinweg unverändert, muss Git sie nicht jedes Mal neu kopieren, sondern verweist einfach auf das deduplizierte Objekt.
Auch Git Bomb besteht zunächst aus einem Blob mit dem Text “One laugh” und einem Tree-Objekt, das zehn Mal auf diese Datei referiert. Darüber sitzen neun weitere Schichten von Tree-Objekten, die jeweils auf die darunterliegenden verweisen, wie es die Abbildung andeutet. Die Master-Referenz verweist nur auf die oberste Tree-Ebene.
Versucht ein User nun, über Git auf das Repository zuzugreifen, gerät die Software ins Schwimmen, denn die Befehle “git status” und “git checkout” versuchen, den Repository-Tree zunächst im Arbeitsspeicher abzubilden, bevor sie die Dateien auf die Festplatte schreiben. Das misslingt naturgemäß, woraufhin der Rechner in der Regel den Git-Prozess abschießt. Eine leicht veränderte Version lässt sich über
git clone https://github.com/Katee/git-bomb-segfault.git
auschecken, sie brachte auch den Rechner der Programmiererin zum Absturz.
Kate Murphy meldete das Problem dann über Hackerone an Github. Während sie eine Belohnung kassierte firmiert das Problem nun unter dem CVE-2017-15298. Im Zuge der Diskussion um die Git-Bombe stellte sich später zugleich heraus, dass bereits ein anderer User 2014 ein solches Repository angelegt hatte, ohne das Problem aber an Github zu melden.
[Update]: Teil zu den Folgen angepasst, Bild ergänzt (kki).






