Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate and start repository migration
-
DeliveryPoint destination at attacker-controlled hostname
-
ExploitServe allowed public IP during Gitea validation
-
ExecutionRebind DNS to blocked internal address
-
ImpactGit clone subprocess connects to internal service
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires (1) the ability to initiate a repository migration/mirror in Gitea - on a default install this needs a logged-in user account, though instances with open registration make this effectively unauthenticated; and (2) attacker control over the authoritative DNS for the destination hostname so it resolves to an allowed address during the migration HTTP client's validation and to a blocked internal address when the independent Git clone subprocess later resolves it (classic DNS-rebinding TOCTOU). Exploitation is LIMITED by: the need to control destination DNS with short TTLs, the requirement that migration functionality be reachable, and the version ceiling (Gitea ≤1.27.3; fixed in 28.0.0). The flaw only affects direct connections - when a proxy is configured for Git/migrations, egress restriction becomes the proxy's responsibility and this validation gap does not apply the same way. The bypass defeats the ALLOWED_HOST_LIST/blocked-host egress controls specifically on the Git subprocess path. |
| Impact | Signals conflict in a way that pulls real-world priority below the 7.5 CVSS 'High' rating. The CVSS vector (AV:N/AC:L/PR:N/UI:N) describes an easy remote attack, but EPSS is only 0.15% (3rd percentile) and CISA SSVC lists Exploitation: none, so there is no evidence of real-world activity - it is not in KEV and no public exploit is identified at time of analysis. SSVC's Automatable: yes is credible because DNS rebinding can be scripted with low-TTL records, yet Technical Impact: partial matches the limited nature of a git-clone SSRF. Two discrepancies should be verified: (1) the CVSS vector sets PR:N, but the description's prerequisite 'an attacker who can start a migration' realistically implies an authenticated account on default Gitea (open registration would restore effective PR:N) - verify against instance configuration; (2) NVD scores impact as C:N/I:H/A:N, which is atypical for an SSRF that normally yields confidentiality impact (reading internal services) rather than integrity - treat the impact type as uncertain. Net: a genuine, well-understood TOCTOU/SSRF bug worth patching on internet-reachable Gitea instances (especially with open registration), but currently a moderate rather than urgent priority given no exploitation, very low EPSS, and the DNS-control precondition. |
| Exploit ScenarioDerived | An attacker with access to the migration feature points a repository migration at a hostname under their control. Their authoritative DNS returns an allowed public IP while Gitea validates the host against its allow/block lists, then rebinds the name to a blocked internal address (e.g., cloud metadata or an intranet Git/HTTP service) by the time the Git subprocess independently resolves and connects, bypassing the egress controls. No public proof-of-concept is identified at time of analysis, but the DNS-rebinding technique is well understood and scriptable. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 07, 2026
Server-side request forgery in Gitea 1.27.3 and earlier lets a user who can start a repository migration or mirror reach blocked internal addresses: Gitea validates the destination hostname against its egress allow/block lists before invoking Git, but the Git subprocess resolves the hostname independently when it actually connects, so an attacker who controls the destination's DNS can re-point the name from an allowed address to an internal one between validation and connection. Exploitation requires both the ability to initiate a migration (on a default install this means a logged-in account, and instances with open registration make it effectively unauthenticated) and control of authoritative DNS with suitably short TTLs, which is why the independent assessment rates it CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N rather than the vendor's 7.5. No public exploit code has been identified at time of analysis, EPSS is only 0.15% (3rd percentile), and SSVC records Exploitation: none with partial technical impact; the vendor-released fix is Gitea 28.0.0.
RemediationAI
Upgrade to Gitea 28.0.0 (release v28.0.0, fix PR #39426, advisory GHSA-p3pc-g8m5-hrrr), which closes the gap by tunnelling Git's clone traffic through Gitea's validated egress path; if you cannot upgrade immediately, the most reliable compensating control is to remove the attack precondition by disabling repository migrations and mirrors for untrusted users - turn off open registration and revoke or restrict the migration/mirror creation permission, since no other code path triggers the affected clone. After upgrading, hardening is available through the new configuration: set EGRESS_MODE = strict under both [security] and [migrations] and populate ALLOWED_HOST_LIST with only the hosts you actually migrate from, accepting the trade-off that every legitimate source must be listed manually and that, in strict mode, portless entries cover only ports 80 and 443. Alternatively, force Git and migration traffic through an egress proxy ([proxy], [git.config] http.proxy, or the environment) and enforce the host allow/block policy at that proxy, because Gitea explicitly does not apply its egress lists to proxied targets - the trade-off being that the proxy then becomes the sole security boundary and must itself deny internal, loopback, CGNAT, link-local, and cloud metadata destinations. Network-level egress filtering on the Gitea host, blocking RFC 1918/loopback/CGNAT ranges and metadata endpoints such as 169.254.169.254, provides defense in depth, and note that on pre-28.0.0 releases the existing ALLOWED_DOMAINS, BLOCKED_DOMAINS, and ALLOW_LOCALNETWORKS settings do not protect the independently connecting Git subprocess.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause is CWE-918 (server-side request forgery) realized as a classic DNS-rebinding time-of-check-to-time-of-use gap. Gitea's repository migration/mirror feature performs host validation inside its own HTTP client dialer, where the destination hostname is checked against the configured allow list and block list (ALLOWED_HOST_LIST / BLOCKED_HOST_LIST and, in older releases, ALLOWED_DOMAINS / BLOCKED_DOMAINS / ALLOW_LOCALNETWORKS). The actual clone, however, is executed by an external Git subprocess that resolves the hostname itself at connect time. Because the two resolutions are independent, an attacker controlling authoritative DNS for the destination host can answer the validation lookup with a permitted public address and then answer Git's lookup with a blocked internal, loopback, or cloud-metadata address, so the network-level egress control is bypassed rather than broken. The upstream fix (PR #39426, shipped in v28.0.0) introduces a gitproxy service (gitproxy.Run and gitproxy.MaybeTunnel referenced in the diff) that routes Git's connections through Gitea's validated egress path, and reworks the configuration into an EGRESS_MODE of lax or strict with ALLOWED_HOST_LIST / BLOCKED_HOST_LIST entries supporting CIDR blocks and explicit port specifications, denial of reserved ranges such as link-local and cloud metadata addresses, and clearer documentation that these lists are only enforced on direct connections - when a proxy is configured for Git or migrations, restricting the proxied target becomes the proxy server's responsibility.
Know when Gitea gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
Starting a migration needs an account (PR:L); winning the validate-then-resolve DNS race is a condition beyond full attacker control (AC:H); git-clone SSRF mainly yields limited internal read access (C:L), diverging from NVD's I:H.
Primary rating from Vendor (88ee5874-cf24-4952-aea0-31affedb7ff2).
CVSS VectorVendor: 88ee5874-cf24-4952-aea0-31affedb7ff2
Lifecycle Timeline
3DescriptionCVE.org
Gitea validates a repository migration hostname against its network allow and block lists before invoking Git, but the Git subprocess independently resolves the hostname when connecting. An attacker who can start a migration and control the destination's DNS can change the address between validation and connection to reach a blocked internal address. The affected path is the Git clone operation; validation in the migration HTTP client's dialer does not protect the independently connecting Git subprocess.
Technical POC Analysis
CWE-918 (SSRF), specifically a TOCTOU / DNS-rebinding defect: the address validated is not the address used.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Gitea versions 1.27.3 and earlier contain a server-side request forgery flaw that could allow a user with an account - or anyone at all on instances with open registration - to make the Gitea server connect to internal network addresses that its own egress controls were meant to block. A successful attack requires the attacker to also control authoritative DNS for the destination and to use short TTLs, so exploitation is not trivial, but the consequence is unauthorized reach into internal systems and the exposure of data those systems hold. Leadership should care because the flaw lives in a self-hosted developer platform that often sits trusted inside the network perimeter, and no vendor patch is currently available, making configuration and network controls the only near-term defenses.
No vendor-released patch identified at time of analysis. Interim mitigations: restrict repository migration and mirror creation to trusted administrators and disable open registration; enforce strict egress filtering so Gitea hosts cannot reach internal or metadata address ranges; pin or pre-approve migration destination hostnames rather than allowing arbitrary names; monitor and alert on migration/mirror creation and on DNS records re-pointing from allowed addresses to internal ones; segment the Gitea host so any SSRF reach is limited to non-sensitive services.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
Remote code execution in Gitea (self-hosted Git service) via a code-injection flaw (CWE-94) allows attackers to run arbi
Broken access control in Gitea's Composer package registry (versions up to and including 1.26.1) lets remote attackers r
Gitea before 1.16.7 does not escape git fetch remote. Rated high severity (CVSS 7.5), this vulnerability is remotely exp
The git hook feature in Gitea 1.1.0 through 1.12.5 might allow for authenticated remote code execution in customer envir
Improper Neutralization of Input During Web Page Generation (XSS or 'Cross-site Scripting') vulnerability in Gitea Gitea
Reverse-proxy authentication bypass in the official Gitea Docker image (versions up to and including 1.26.2) allows any
Path traversal in Gitea's Org-mode (`.org`) markup renderer allows an attacker who can get Org-mode content rendered by
Container escape in Gitea act_runner (Docker backend, through act 0.262.0) lets an authenticated user with workflow-exec
models/repo_mirror.go in Gitea before 1.7.6 and 1.8.x before 1.8-RC3 mishandles mirror repo URL settings, leading to rem
Server-side request forgery and internal repository exfiltration in Gitea before 1.27.0 lets a low-privileged authentica
Authorization bypass in Gitea versions 1.22.3 through 1.26.1 allows holders of `public-only` access tokens or OAuth gran
An issue was discovered in Gitea through 1.11.5. Rated high severity (CVSS 7.5), this vulnerability is remotely exploita
EUVD-2026-93917
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB