
Python-PoC-Exploit für CVE-2025-8110, das einen Schreibvorgang beliebiger Dateien zu RCE in Gogs durch Symlink-Manipulation und API-Missbrauch demonstriert. Entwickelt für Bildungszwecke in der Sicherheitsforschung und autorisierte Laborumgebungen.
Dieses Repository enthält ein Python-Skript zum Proof of Concept (PoC), um die als CVE-2025-8110 registrierte Schwachstelle im selbst gehosteten Git-Dienst Gogs (Versionen 0.13.3 und früher) zu demonstrieren und zu analysieren.
[!WARNING] DIESE SOFTWARE WIRD AUSSCHLIESSLICH ZU BILDUNGS- UND SICHERHEITSFORSCHUNGSZWECKEN BEREITGESTELLT. Die Verwendung dieses Materials gegen Ziele ohne vorherige schriftliche Zustimmung der Eigentümer ist völlig illegal. Der Autor dieses Repositorys übernimmt keine Haftung für Schäden, Verluste oder Missbrauch, die aus der Verwendung dieses Codes entstehen. Verwenden Sie ihn stets auf eigenes Risiko und nur in kontrollierten Umgebungen oder autorisierten Simulationen (wie CTF-Laboren).
CVE-2025-8110 ist eine kritische Schwachstelle für Beliebigen Dateischreibzugriff, die durch unzureichende Validierung bei der Verarbeitung von symbolischen Links (symlinks) über die Gogs PutContents-API verursacht wird.
Ein authentifizierter Angreifer kann:
.git/config des Servers).root läuft, kann der Dateischreibzugriff zu Remote-Code-Ausführung (RCE) eskaliert werden, indem der gewünschte Befehl in die sshCommand-Eigenschaft der Git-Konfigurationsdatei injiziert wird.exploit.py)Das Skript automatisiert den gesamten Exploit-Prozess unter Verwendung gültiger Anmeldeinformationen und eines zuvor manuell in der Gogs-Weboberfläche generierten API-Tokens:
┌──────────────────────────────────────────────┐
│ Máquina del Atacante (Kali) │
└──────────────────────┬───────────────────────┘
│
(1) Crea Repositorio │ (3) Sube Symlink (.git/config)
Malicioso vía API │ vía git push
▼
┌──────────────────────────────────────────────┐
│ Túnel SSH Local (puerto 8080) │
└──────────────────────┬───────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ Servidor Víctima Gogs │
│ (Puerto 3001) │
└──────────────────────┬───────────────────────┘
│
│ (4) API PUT "contents"
│ Sigue Symlink y escribe
│ "sshCommand" en .git/config
▼
┌──────────────────────────────────────────────┐
│ Ejecución del Payload como ROOT │
└──────────────────────────────────────────────┘
create_malicious_repo: Führt eine POST-Anfrage an die Gogs-API (/api/v1/user/repos) unter Verwendung des bereitgestellten Zugriffstokens aus, um ein neues Repository mit einem dynamisch generierten zufälligen Namen zu erstellen.upload_malicious_symlink:
/tmp/..git/config (die Git-Konfigurationsdatei des Servers) verweist.git push) zurück an den Server.exploit: Definiert die Nutzlast (Payload) mithilfe eines Injektionstricks in die sshCommand-Eigenschaft von Git. Beim Aktualisieren des Inhalts über die API wird Gogs gezwungen, seine eigene .git/config-Datei auf dem Server zu überschreiben. Wenn der letzte Teil des Git-Prozesses ausgelöst wird, führt das Gogs-System den Terminalbefehl (eine Reverse Shell in Bash) aus und sendet die Verbindung zurück zu Ihrem Netcat-Listener.Stellen Sie sicher, dass Sie die globalen Identitätsdaten in Git konfigurieren, bevor Sie das Skript ausführen, um Fehler beim automatischen Commit zu vermeiden:
git config --global user.email "[email protected]"
git config --global user.name "estudiante"