Gitea: Server-side request forgery and forced writes via push mirrors
Summary
Gitea checks a push mirror's remote address against the [migrations] allow and block lists only when the mirror is created. Each sync later pushes to the stored address without this check, so a name that later resolves to a blocked or internal address is still contacted. An authenticated user with repository admin rights, which includes every user for repositories they create, can use this to force-push repository contents to internal Git services and delete refs there.
Affected
- Gitea 0 to 1.27.3 (per GHSA-hcgw-r9gf-8mph; the CNA record lists the same range)
Fixed in
- Gitea 28.0.0 or later
Workaround
- Set [mirror] ENABLED=false until the update is applied. This stops all mirror updates, not only the malicious one.
- Delete affected push mirrors until the update is applied.
Exploitation
- CISA SSVC: Exploitation none, Automatable no.
- No public exploit code found in the advisory or the sources reviewed. Not listed in CISA KEV.
Our recommendation
- Upgrade Gitea to 28.0.0 or later.
- Check whether open self-registration is enabled. If so, restrict it until the update is applied.
- Review all existing push mirrors and their target addresses, and remove unknown or internal targets.
- Monitor repository ref deletions and unexpected mirror sync errors.
Public exploits
PoC-in-GitHub, Metasploit and Exploit-DB list nothing for this CVE.
Research sources
- GitHub Security Advisory GHSA-hcgw-r9gf-8mph github.com
- Gitea 28.0.0 release blog blog.gitea.com
- Gitea 28.0.0 release notes github.com
- Gitea pull request #39010 github.com
- Gitea pull request #39426 github.com
- OSV entry CVE-2026-89430 osv.dev
Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 1 Nov 2026, 20:42.
Original description (NVD)
Gitea validated a push mirror's remote address against the `[migrations]` allow and block lists only when the mirror was created. Each synchronization passed the stored address directly to `git push`, so a name that later resolved to a blocked or internal address was still reached. A user with administrator access to a repository, which includes repositories they create themselves, could aim push mirror synchronization at internal Git services and force-push the repository's contents to them.
Sources
The tracker combines official, freely usable data sources – updated continuously:
- NVD (NIST) – CVEs, rating (CVSS), affected products
- CISA KEV – vulnerabilities confirmed by CISA as actively exploited
- CISA Vulnrichment – CISA assessment (SSVC) in the official CVE record
- FIRST EPSS – probability of exploitation
- Microsoft MSRC – Patch Tuesday: vulnerabilities, severity, updates
- PoC-in-GitHub – public proof-of-concept repositories
- Metasploit (Rapid7) – modules of the Metasploit Framework
- Exploit-DB (OffSec) – archive of public exploits (links only)
- Patch days: official vendor pages (linked per vendor) (Vendor patch days)
This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.
Affected? We can help.
We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.
