Was passiert, wenn ein einzelner HTTP-Header Admin-Rechte in Ihrem Git-Server öffnet?
Ein ungeschützter Docker-Default-Wert kann mehr Schaden anrichten als ein ausgefeilter Exploit. Das beweist diezeit aktive Kampagne gegen Gitea, eine der beliebtesten selbst gehosteten Git-Plattformen. Durch die Standardeinstellung REVERSE_PROXY_TRUSTED_PROXIES=* in den offiziellen Docker-Images vertraut Gitea dem Header X-WEBAUTH-USER von jeder beliebigen Quell-IP aus. Wer diesen Header sendet, wird automatisch als beliebiger Nutzer authentifiziert – ohne Passwort, ohne Token, ohne Brute-Force.
Konkret steckt dahinter die Schwachstelle CVE-2026-20896 mit einem CVSS-Wert von 9,8. Sie wurde am 20. Juni 2026 durch Gitea 1.26.3 gepatcht, doch die Angreifer warteten nicht lange. Laut Sysdig wurde der erste Internet-Angriff bereits dreizehn Tage nach dem Advisory beobachtet. Der Scanner kam über VPN-Exit-Knoten, fand exponierte Container-Ports und setzte den Header X-WEBAUTH-USER: admin. Damit war der Admin-Account kompromittiert. Singapurs Cyber Security Agency warnte am 8. Juli 2026 vor der aktiven Ausnutzung. Gitea empfiehlt das sofortige Update auf 1.26.4, weil Version 1.26.3 noch eine Regression bei Repository-Code-Seiten enthält.
Technischer Hintergrund: Wie der Auth-Bypass funktioniert
Reverse-Proxy-Authentifizierung in Gitea
Gitea unterstützt die sogenannte Reverse-Proxy-Authentifizierung. Dahinter steckt ein verbreitetes Muster: Ein authentifizierender Reverse-Proxy – beispielsweise Authelia, Authentik, OAuth2 Proxy oder ein Unternehmens-WAF-Gateway – prüft die Anmeldedaten eines Nutzers und leitet die Anfrage mit einem vertrauenswürdigen Header an die Anwendung weiter. Unter Gitea lautet dieser Header standardmäßig X-WEBAUTH-USER. Ist die Option ENABLE_REVERSE_PROXY_AUTHENTICATION auf true gesetzt, akzeptiert Gitea die Identität aus diesem Header, ohne selbst ein Passwort zu prüfen.
Das Modell funktioniert nur, wenn Gitea weiß, aus welchen IP-Adressen ein solcher Header stammen darf. Genau hier liegt der Fehler: Die offiziellen Docker-Images setzen in der mitgelieferten app.ini den Wert REVERSE_PROXY_TRUSTED_PROXIES=*. Damit wird jede Quelle als vertrauenswürdig erachtet. Ein Angreifer, der den Container-Port direkt aus dem Internet erreichen kann, setzt einfach X-WEBAUTH-USER: admin und gilt fortan als Administrator. Der Exploit ist so simpel, dass er mit einem einzigen curl-Aufruf reproduzierbar ist.
Betroffene Versionen und CVE-Details
Die Schwachstelle CVE-2026-20896 wurde am 20. Juni 2026 zusammen mit Gitea 1.26.3 öffentlich gemacht. Sie betrifft die offiziellen Docker-Images bis einschließlich Version 1.26.2. Native Binärinstallationen oder selbst kompilierte Builds sind davon nicht betroffen, sofern der Administrator nicht denselben falschen Wert manuell in die Konfiguration geschrieben hat. Die CVSS v3.1-Bewertung liegt bei 9.8 von 10, also im kritischen Bereich.
Die nationale Verwundbarkeitsdatenbank NIST NVD listet CVE-2026-20896 mit den Vektoren NETWORK, LOW Komplexität und NONE erforderlicher Privilegien. Das bedeutet: Der Angriff ist aus dem Netzwerk möglich, erfordert keinen Account und ist technisch trivial. Die Kombination aus hohem Schaden und geringem Aufwand erklärt, warum die Schwachstelle so schnell aktiv ausgenutzt wird.
Reproduktion und realer Angriffsverlauf
Joshua Martinelle von Tenable beschrieb die Reproduktion in dem auf GitHub veröffentlichten Security Advisory GHSA-f75j-4cw6-rmx4: Sobald ENABLE_REVERSE_PROXY_AUTHENTICATION aktiviert ist und der Container-Port erreichbar ist, reicht ein Request mit dem Header X-WEBAUTH-USER, um sich als jeder bekannte oder ratbare Benutzer auszugeben. Admin-Konten wie admin, gitea_admin oder der Erstadministrator sind offensichtliche Ziele.
Sysdig-Threat-Researcher Michael Clark bestätigte am 10. Juli 2026, dass die eigenen Sensoren den ersten in-the-wild-Angriff dreizehn Tage nach dem Advisory beobachteten. Der Angreifer nutzte einen VPN-Exit-Scanner, der systematisch nach exponierten Gitea-Container-Ports suchte und den Header setzte, sobald ein Ziel antwortete. Diese Latenz von dreizehn Tagen ist typisch für das Zeitfenster zwischen Patch-Veröffentlichung und massenhafter Ausnutzung – ein Zeitraum, in dem viele Selbsthoster noch nicht aktualisiert haben.
Gefährdete Infrastrukturen: Wer ist besonders betroffen?
Öffentlich erreichbare Gitea-Docker-Container
Der kritischste Fall sind Gitea-Instanzen, deren Docker-Container-Port direkt oder über eine Port-Weiterleitung aus dem Internet erreichbar ist. Das passiert häufig in Heim-Laboren, kleinen Start-ups oder bei Entwicklern, die schnell einen eigenen Git-Server aufsetzen wollen. Oft landet der Container-Port ungeschützt auf einer öffentlichen IP, während ein Reverse Proxy eigentlich vorgesehen war, aber nie korrekt konfiguriert wurde.
Auch Unternehmen mit komplexeren Setups sind gefährdet, wenn Load-Balancer oder Ingress-Controller den echten Client-IP nicht korrekt an Gitea weitergeben. In solchen Fällen kann REVERSE_PROXY_TRUSTED_PROXIES zwar auf die internen Proxy-IPs eingeschränkt sein, aber ein falscher Header schleicht sich trotzdem durch, weil Gitea die Quell-IP falsch ermittelt. Administratoren sollten daher nicht nur den Wert setzen, sondern auch prüfen, ob Gitea die tatsächliche Client-IP sieht oder nur die interne Kubernetes-Node-IP.
CI/CD-Pipelines und interne Entwicklungsumgebungen
Gitea ist nicht nur ein Git-Repository, sondern oft auch die Basis für CI/CD-Workflows über integrierte Actions oder Drone-ähnliche Runner. Wenn ein Angreifer über CVE-2026-20896 Admin-Zugriff auf Gitea erhält, kann er Repositorys klonen, Secrets auslesen, Webhooks manipulieren, Deploy-Keys hinterlegen und Build-Konfigurationen ändern. In der Praxis bedeutet das: Ein kompromittierter Gitea-Server wird zur Drehscheibe für Supply-Chain-Angriffe.
Das Risiko steigt, wenn Gitea mit externen Identitätsprovidern wie LDAP, OAuth2 oder OIDC gekoppelt ist. Der Angreifer kann über die Reverse-Proxy-Lücke zunächst in Gitea eindringen und von dort aus versuchen, die Single-Sign-On-Integration auszunutzen, um lateral in andere Dienste zu wechseln. Wer Gitea als internen Source-Code-Server betreibt, sollte ihn deshalb mit der gleichen Sorgfalt segmentieren wie einen Jump-Host oder ein Build-System.
Mitigation: So schließen Sie die Lücke jetzt
Sofort-Update auf Gitea 1.26.4
Die empfohlene Lösung ist das direkte Update auf Gitea 1.26.4. Diese Version enthält den Fix für CVE-2026-20896 und behebt gleichzeitig einen Regression-Fehler aus 1.26.3, bei dem Repository-Code-Seiten unter bestimmten Bedingungen mit der Fehlermeldung „context deadline exceeded“ ausfielen. Gitea selbst rät ausdrücklich davon ab, nur auf 1.26.3 zu bleiben, und empfiehlt den Sprung auf 1.26.4.
Das Update ist für Docker-Nutzer unkompliziert: Ein neues Image-Pull und Container-Restart genügen, sofern Datenbank und Volumes unverändert bleiben. Wer die Anwendung als Binärdatei betreibt, sollte das entsprechende Release von der offiziellen Download-Seite einspielen. In jedem Fall empfiehlt sich ein Backup der Datenbank und der Repository-Verzeichnisse vor dem Upgrade.
Workaround ohne sofortiges Update
Wenn ein Update kurzfristig nicht möglich ist, kann die Gefahr durch zwei Konfigurationsänderungen deutlich reduziert werden. Erstens sollte REVERSE_PROXY_TRUSTED_PROXIES auf die konkreten IP-Adressen oder Netzbereiche des vertrauenswürdigen Reverse-Proxys eingeschränkt werden. Die Dokumentation von Gitea nennt als empfohlenen Standard 127.0.0.0/8,::1/128 für rein lokale Setups und die jeweiligen internen Proxy-IPs für produktive Umgebungen. Ein Wildcard-Wert darf in keinem produktiven System stehen bleiben.
Zweitens sollte die Option ENABLE_REVERSE_PROXY_AUTHENTICATION nur dann aktiviert sein, wenn ein authentifizierender Reverse Proxy tatsächlich im Einsatz ist. Instanzen, die ohne Reverse-Proxy-Auth betrieben werden, sollten diese Option auf false belassen. Damit wird der Angriffsvektor komplett abgeschaltet, weil Gitea dann keinen Header-basierten Login mehr akzeptiert.
Log-Analyse und Kompromittierungsprüfung
Administratoren sollten die Zugriffslogs ihrer Gitea-Instanz auf ungewöhnliche Requests mit dem Header X-WEBAUTH-USER prüfen. Besonders verdächtig sind Einträge, bei denen ein Client aus dem Internet diesen Header sendet, ohne dass ein bekannter Reverse Proxy als Absender fungiert. Auch erfolgreiche Admin-Anmeldungen aus unerwarteten IP-Adressen oder Zeitzonen sind ein Indikator für eine erfolgte Kompromittierung.
Wenn sich ein Angriff bestätigt, müssen alle betroffenen Accounts als kompromittiert gelten. Das betrifft Passwörter, SSH-Keys, Personal Access Tokens und möglicherweise auch Secrets, die über Gitea in CI/CD-Pipelines oder Container-Registries eingebunden waren. Singapurs CSA empfiehlt explizit, die Logs auf Anzeichen unautorisierter Zugriffe zu durchsuchen, bevor man die Instanz als sauber betrachtet.
Vergleichstabelle: Betroffene Versionen und Handlungsoptionen
| Version | Status | CVE-2026-20896 betroffen? | Empfohlene Aktion |
|---|---|---|---|
| 1.26.2 und älter (Docker) | Veraltet, verwundbar | Ja | Sofort auf 1.26.4 aktualisieren |
| 1.26.3 (Docker) | Patch, Regression | Nein | Besser direkt auf 1.26.4 wechseln |
| 1.26.4 (Docker) | Aktuell | Nein | Empfohlene Zielversion |
| Native Binärinstallation | Variabel | Nur bei manuellem Wildcard-Wert | REVERSE_PROXY_TRUSTED_PROXIES prüfen und einschränken |
Verwandte Gefahren und langfristige Lektionen
Default-Konfigurationen als häufigste Angriffsfläche
CVE-2026-20896 ist kein isolierter Fall. Viele Sicherheitsvorfälle der letzten Jahre beruhen auf unsicheren Standardeinstellungen in Containern, die aus Bequemlichkeit oder Unwissenheit nicht geändert wurden. Beispiele reichen von offenen Docker-API-Ports über Default-Anmeldedaten bei Datenbanken bis hin zu permissiven CORS-Einstellungen bei Webanwendungen. Der Gitea-Fall zeigt erneut, dass ein einzelner falscher Wert in einer Konfigurationsdatei ausreicht, um eine kritische Lücke zu schaffen.
Entwickler und Administratoren sollten deshalb den Betrieb von Containern nicht als „einfaches apt-Update“ betrachten. Jede Konfigurationsvariable, die Authentifizierung oder Netzwerkvertrauen regelt, muss bewusst gesetzt und dokumentiert werden. Idealerweise werden Docker-Images über Infrastructure-as-Code-Templates wie Terraform, Ansible oder Kubernetes-Manifests ausgerollt, in denen solche Werte explizit hinterlegt und versioniert sind. Nur so lässt sich eine Abweichung vom sicheren Standard erkennen.
Supply-Chain-Relevanz von Code-Hosting-Plattformen
Ein kompromittierter Gitea-Server ist ein Supply-Chain-Risiko. Wer die Kontrolle über die zentrale Code-Verwaltung erlangt, kann schädliche Commits einschleusen, Dependencies manipulieren und Build-Artefakte unter der Marke eines vertrauenswürdigen Unternehmens verteilen. In unseren früheren Analysen zu kompromittierten npm-Paketen und gefälschten SDKs auf npm und PyPI haben wir gezeigt, wie schnell sich ein einzelner infizierter Baustein in der Software-Lieferkette ausbreiten kann. Gitea steht am Anfang dieser Kette und ist deshalb ein besonders wertvolles Ziel.
Langfristig gehört ein selbst gehosteter Git-Server deshalb in eine Zero-Trust-Architektur. Das bedeutet: Kein implizites Vertrauen zwischen Diensten, strikte Segmentierung der Netzwerke, kurzlebige Credentials für CI/CD und regelmäßige Überprüfung der Integrität von Repositories und Build-Artefakten. Wer diese Prinzipien umsetzt, reduziert den Schaden, falls eine Konfigurationsschwachstelle wie CVE-2026-20896 doch einmal ausgenutzt wird.
Praxis-Guide: Sichere Gitea-Docker-Konfiguration
Docker Compose mit eingeschränktem Reverse-Proxy-Vertrauen
Die sicherste Konfiguration für Gitea in Docker besteht darin, den Container ausschließlich über ein internes Netzwerk mit dem Reverse Proxy zu verbinden und den HTTP-Port niemals direkt zu veröffentlichen. In einer typischen Docker-Compose-Datei sieht das so aus: Der Gitea-Service erhält kein published:-Port-Mapping, sondern nur ein internes Netzwerk. Der Reverse Proxy, beispielsweise Traefik oder Caddy, ist das einzige Element, das einen öffentlichen Port öffnet. Damit erreicht kein Angreifer aus dem Internet den Gitea-Container direkt.
Wenn dennoch eine Port-Freigabe nötig ist, weil beispielsweise SSH direkt an den Container durchgereicht werden soll, muss REVERSE_PROXY_TRUSTED_PROXIES unbedingt auf die interne Docker-Gateway-IP oder den Traefik-Container beschränkt werden. Ein Wert wie REVERSE_PROXY_TRUSTED_PROXIES=172.18.0.0/16 ist bereits deutlich besser als der Wildcard-Wert, bietet aber noch immer keine Granularität auf Container-Ebene. Idealerweise nutzt man das vom Reverse Proxy gesetzte Header-Feld und lässt Gitea nur dann Reverse-Proxy-Auth akzeptieren, wenn der Request über den Proxy kam. Zusätzlich sollte das Webinterface eine separate Authentifizierungsschicht erhalten, etwa durch Authelia mit Zwei-Faktor-Authentifizierung.
Header-Härtung und Logging auf Reverse-Proxy-Ebene
Der Reverse Proxy sollte den Header X-WEBAUTH-USER strippen, bevor ein Request an Gitea weitergeleitet wird, und ihn nur selbst setzen, nachdem der Nutzer erfolgreich authentifiziert wurde. Das verhindert, dass ein externer Angreifer den Header einschleust. Unter nginx lässt sich das mit proxy_hide_header X-WEBAUTH-USER; und anschließendem bedingtem proxy_set_header umsetzen. Traefik-Nutzer können über Middlewares Header entfernen und neu setzen.
Auf Proxy-Ebene sollten außerdem alle Anfragen geloggt werden, die den Header X-WEBAUTH-USER bereits enthalten, bevor der Proxy sie verarbeitet. Solche Einträge deuten auf einen Angriffsversuch hin. Kombiniert man diese Logs mit einem SIEM oder einer EDR-Lösung, lässt sich eine aktive Kampagne wie die gegen CVE-2026-20896 früh erkennen, noch bevor sie Gitea erreicht.
Notfallplan für den Kompromittierungsfall
Sollte sich herausstellen, dass eine Gitea-Instanz kompromittiert wurde, ist Schnelligkeit entscheidend. Zuerst muss der Container oder Server vom Netzwerk isoliert werden, um weitere laterale Bewegungen zu verhindern. Anschließend sollten alle Passwörter, API-Keys und SSH-Keys rotiert werden, die Gitea oder damit verbundene Dienste nutzen. Besonders kritisch sind Deploy-Keys, Container-Registry-Credentials und Secrets in CI/CD-Pipelines.
Danach muss eine vollständige Forensik der Repository-Historie erfolgen. Ein Angreifer mit Admin-Rechten kann Commits, Webhooks und Build-Konfigurationen verändern. Alle Änderungen in den letzten Tagen oder Wochen müssen auf verdächtige Aktivitäten geprüft werden. Wenn Backups vorhanden sind, sollte ein sauberer Stand vor dem Angriffszeitpunkt identifiziert und nach Neuausrichtung der Sicherheitskonfiguration wiederhergestellt werden. Erst wenn alle Zugangsdaten neu sind, der Container mit korrekten REVERSE_PROXY_TRUSTED_PROXIES-Einstellungen läuft und die Logs keine weiteren verdächtigen Zugriffe zeigen, kann die Instanz wieder produktiv genutzt werden.
Im Fokus: CVE-2026-20896 als Warnsignal für Selbsthoster
Die aktiven Angriffe auf Gitea Docker-Images zeigen, wie schnell eine unsichere Default-Konfiguration zur realen Bedrohung wird. CVE-2026-20896 erlaubt es jedem erreichbaren Client, sich über den Header X-WEBAUTH-USER als beliebiger Nutzer auszugeben. Der Angriff ist technisch so einfach, dass er automatisiert und aus dem Internet massenhaft durchgeführt werden kann. Administratoren, die Gitea als Docker-Container betreiben, sollten umgehend auf Version 1.26.4 aktualisieren oder alternativ REVERSE_PROXY_TRUSTED_PROXIES auf vertrauenswürdige Proxy-IPs beschränken.
Weitere Details zu CVE-2026-20896 finden sich im offiziellen GitHub Security Advisory GHSA-f75j-4cw6-rmx4, im Gitea Release-Blogpost zu 1.26.3 und 1.26.4, im NIST NVD-Eintrag sowie in der Warnmeldung der Cyber Security Agency of Singapore (CSA). Der ursprüngliche Bericht über die aktive Ausnutzung stammt von BleepingComputer. Wer seine Supply-Chain-Sicherheit vertiefen möchte, findet in unseren Artikeln zu kompromittierten Build-Pipelines und Atomic Lockfile ergänzende Analysen zu verwandten Angriffsmustern.
