Ein Git-Repositorie als Forkbombe

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.

Die rekursive Struktur der Git-Bombe lässt sich diret auf Github bewundern.

Die rekursive Struktur der Git-Bombe lässt sich diret auf Github bewundern.

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.

Auf einem Test mit Debian 9 fror der Rechner einfach irgendwann ein und musste neu gestartet werden.

Auf einem Test mit Debian 9 fror der Rechner einfach irgendwann ein und musste neu gestartet werden.

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).

E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben