Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-52813-Gogs-RCE — CVE-2026-52813 (Gogs Path Traversal → Git Hooks RCE) defensiver Writeup: Root-Cause- und Patch-Analyse, Sigma/SIEM-Erkennungsregeln, IOCs, nicht-intrusiver Versionsscanner. Kein weaponisiertes PoC. | Kitploit
Tools/GitHubGitHub/iqx6889/cve-2026-52813-gogs-rce
Management von Indicators of Compromise (IOC)SchwachstellenscannerSchwachstellenanalyseBedrohungsanalysePapers & ForschungLernen & BildungIncident ResponseLog-AnalyseLabs & Praxis

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
GitHubiqx6889/cve-2026-52813-gogs-rce

CVE-2026-52813-Gogs-RCE

CVE-2026-52813 (Gogs Path Traversal → Git Hooks RCE) defensiver Writeup: Root-Cause- und Patch-Analyse, Sigma/SIEM-Erkennungsregeln, IOCs, nicht-intrusiver Versionsscanner. Kein weaponisiertes PoC.

Repository anzeigen
17vor 1 MonatNoch nicht geprüft
Teilen

CVE-2026-52813 — Gogs Path Traversal führt zu Remote Code Execution via Git Hooks (Defensive Analyse)

Sicherheitsforschung / Blue-Team-Writeup. Dieses Repository enthält keinen weaponisierten PoC. Forscher, die eine Reproduktion benötigen, verwenden bitte den im offiziellen Advisory zitierten öffentlichen PoC.

ProjektInhalt
CVECVE-2026-52813
AliasseGHSA-c39w-43gm-34h5 / GO-2026-5305
Betroffene VersionenGogs < 0.14.3
Behobene Version0.14.3 — PR #8334
CVSS 3.110.0 Critical AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
CWECWE-23 Relative Path Traversal → RCE
VoraussetzungenEin normales registriertes Konto (bei standardmäßig offener Registrierung = nicht authentifizierte RCE)

TL;DR

Gogs hat bei der Erstellung von Organisationen im Web-Formular eine AlphaDashDot-Zeichenvalidierung, die / blockiert, die REST-API POST /api/v1/user/orgs jedoch nicht. Angreifer übermitteln per API einen Organisationsnamen mit ../, umgehen die Validierung und gelangen direkt zu os.MkdirAll(repoutil.UserPath(org.Name), 0777) (internal/database/org.go:165), wodurch das Repository-Verzeichnis an einen beliebigen Dateisystempfad geschrieben wird. In Kombination mit dem temporären Arbeitsverzeichnis des Gogs-Web-Editors (local-r/<repo_id>/) kann ein bösartiges hooks/update innerhalb des lokalen Checkouts eines anderen Repositories abgelegt werden, das von git automatisch ausgeführt wird → RCE als Benutzer git.


Betroffene Versionen und Maßnahmen

Gogs-VersionStatus
< 0.14.3Betroffen, sofort aktualisieren
>= 0.14.3Behoben

Ein Upgrade ist die einzige vollständige Behebung:

root@kitploit:~
# Docker
docker pull gogs/gogs:0.14.3
# oder aus dem Quellcode
git checkout v0.14.3 && go build

Temporäre Eindämmung (falls kein Upgrade möglich ist):

  • Offene Registrierung deaktivieren (app.ini → [service] DISABLE_REGISTRATION = true), wodurch die Voraussetzung von „nicht authentifiziert" auf „bestehendes Konto erforderlich" herabgestuft wird;
  • Auf der Reverse-Proxy-Ebene (nginx/Caddy/Traefik) WAF-Regeln hinzufügen, die Anfragen an POST /api/v1/user/orgs und POST /api/v1/org/*/repos blockieren, deren username- / name-Felder im Request-Body .. oder / enthalten (siehe detection/);
  • Die Schreibrechte des Gogs-Containers über /data/gogs/data/tmp/ hinaus einschränken (selinux/apparmor).

Root-Cause-Analyse

1. Validierungs-Asymmetrie: Web vorhanden, API fehlt

Web-Formular (internal/form/org.go, v0.14.2):

root@kitploit:~
type CreateOrg struct {
    OrgName string `binding:"Required;AlphaDashDot;MaxSize(35)"` // 正则 ^[a-zA-Z0-9._-]+$
}

API (internal/route/api/v1/org/org.go, v0.14.2):

root@kitploit:~
// api.CreateOrgOption (go-gogs-client) 的绑定 tag:
type CreateOrgOption struct {
    UserName string `json:"username" binding:"Required"` // ← 没有 AlphaDashDot!
}

→ Das username-Feld von POST /api/v1/user/orgs kann beliebige Zeichen enthalten und erreicht direkt die DB-Schicht.

2. Die DB-Schicht prüft nur reservierte Namen, nicht den Zeichensatz

isNameAllowed in internal/database/users.go:1532 blockiert nur reservierte Namen/Präfix-Suffixe (z. B. admin, -bot), prüft den Zeichensatz nicht – daher wird ../ durchgelassen.

3. Path-Sink ohne Bereinigung

internal/repoutil/repoutil.go (v0.14.2):

root@kitploit:~
func UserPath(user string) string {
    return filepath.Join(conf.Repository.Root, strings.ToLower(user)) // ← 直接拼接
}

internal/database/org.go:165:

root@kitploit:~
os.MkdirAll(repoutil.UserPath(org.Name), os.ModePerm) // org.Name 含 ../ → 任意路径写入

4. Hook über das local-r-Arbeitsverzeichnis ablegen

Wenn Gogs Web-/API-Dateibearbeitungen verarbeitet, checked es das Repository nach /data/gogs/data/tmp/local-r/<repo_id>/ aus. <repo_id> entspricht genau der Datenbank-id des Repositories. Ein Angreifer:

  1. Erstellt ein persönliches Repository writer und erhält id == n;
  2. Erstellt per API eine Pfad-Traversal-Organisation mit username = "../../../../data/gogs/data/tmp/local-r/n/nested" → das physische Verzeichnis landet im Arbeitsverzeichnis von writer;
  3. Erstellt unter dieser Organisation ein Repository rce-x → landet unter local-r/n/nested/rce-x.git;
  4. Clont writer, committet nested/rce-x.git/hooks/update als normale Datei und pusht sie (sie liegt dann im Arbeitsverzeichnis von writer);
  5. Löst über die API eine Dateioperation auf writer aus → Gogs führt git in local-r/n/ aus → git führt hooks/update aus → RCE.

Kernpunkt: Der bösartige Hook gelangt als gewöhnlicher Repository-Inhalt über einen normalen Push hinein; die Konfiguration ENABLE_GIT_HOOKS ist nicht erforderlich – das unterscheidet dies vom „traditionellen Git-Hooks-Missbrauch".

Eine detaillierte Diff-Analyse des Patches findest du unter patch/ANALYSIS.md.


Erkennung

Vollständige Regeln unter detection/:

  • Sigma-Regeln: detection/sigma/ — deckt Angriffsversuche (API-Anfragen mit ../) und erfolgreiche Ausnutzung (Ablage im Dateisystem) ab
  • SIEM-Abfragen: detection/queries.md — Splunk / Elastic / Kibana / Loki
  • IOCs: detection/iocs.md — Dateisystem-Spuren, Log-Signaturen, Benutzernamen-Muster

Die zwei wichtigsten Punkte:

  1. WAF-/Reverse-Proxy-Ebene blockieren: POST /api/v1/user/orgs und POST /api/v1/org/*/repos, wenn die Felder username/name im JSON-Body .. oder / enthalten.
  2. Dateisystem-Prüfung: Unerwartete Unterverzeichnisse unter /data/gogs/data/tmp/local-r/*/ (z. B. nested/, rce-*.git, hooks/update).

Defensive Werkzeuge

  • tools/check_version.py — nicht-invasiver Versionsscanner: prüft über GET /api/v1/version, ob eine Gogs-Instanz < 0.14.3 ist; unterstützt Batch-Scans und CSV-Ausgabe, geeignet für die Asset-Inventarisierung.

Dieses Repository stellt keine weaponisierten Exploit-Tools bereit. Für die Reproduktion verwende bitte den im offiziellen Advisory zitierten öffentlichen PoC und führe sie nur in einer eigenen isolierten Umgebung durch.


Laborumgebung

Die Regeln in detection/ müssen gegen ein betroffenes Gogs validiert werden; lab/docker-compose.yml stellt eine isolierte Gogs-0.14.2-Umgebung bereit, damit das Blue Team testen kann, ob die Erkennungsregeln greifen. Nicht öffentlich erreichbar machen, nur lokal verwenden.


Zeitleiste

DatumEreignis
2026-06-08CVE reserviert
2026-06-24Öffentliche Offenlegung, Gogs 0.14.3 veröffentlicht
2026-06-24Offizielles Advisory GHSA-c39w-43gm-34h5 veröffentlicht

Referenzen

  • Offizielles Advisory: https://github.com/gogs/gogs/security/advisories/GHSA-c39w-43gm-34h5
  • Fix-PR: https://github.com/gogs/gogs/pull/8334
  • OSV: https://osv.dev/vulnerability/CVE-2026-52813
  • Gogs-0.14.3-Release: https://github.com/gogs/gogs/releases/tag/v0.14.3

⚠️ Zur Fehlinformation über „gitrebase-Parameterinjektion"

Im Netz wird diese CVE teils als „Gogs gitrebase Parameterinjektion Remote Code Execution" beschrieben – das ist falsch. Diese Schwachstelle hat nichts mit git rebase / gitrebase zu tun; die Grundursache ist eine API-Pfadtraversierung. Dieses Dokument folgt der tatsächlichen Schwachstelle.


License

MIT — siehe LICENSE.

Tool herunterladen