CVE-2026-58434
Fix: go-gitea/gitea#38321CVE-2026-58434 is a Information Exposure vulnerability in code.gitea.io/gitea. O3 Security confirms whether CVE-2026-58434 is actually reachable in your code before you act, and blocks exploitation at runtime until you patch.
Gitea: Private Repository Metadata Remains Accessible After Access Revocation
Exploitation Status
Proof-of-concept exploit code exists
- CISA’s SSVC triage found public proof-of-concept exploit code for this CVE, though no confirmed active exploitation.
- CISA assesses this as automatable — exploitation doesn’t require manual, per-target effort, which raises the odds of mass scanning and opportunistic attacks.
Exploitation and automatability from CISA’s SSVC triage for CVE-2026-58434.
Real-World Exposure
code.gitea.io/giteaReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects Go packages — download data is not available via public APIs for these ecosystems.
Description
Summary
A user who previously had access to a private repository can continue to obtain repository metadata through GET /api/v1/user/starred after their access to the repository has been revoked.
After a collaborator is removed from a private repository, direct access to the repository is correctly denied. However, the repository may still appear in the user's starred repository list, and the endpoint continues to return repository metadata. Changes made to that metadata after access revocation are also reflected in subsequent responses.
Details
The issue affects the authenticated endpoint:
GET /api/v1/user/starred
The same behavior was also observed on:
GET /api/v1/user/subscriptions
A reproducible scenario is:
- User
alicecreates a private repository. - User
bobis granted collaborator access. bobstars the repository.aliceremovesbobfrom the repository collaborators.- Direct repository access by
bobis denied. bobrequests/api/v1/user/starred.- The repository is still present in the response together with repository metadata.
Additionally, if repository metadata is modified after access revocation, the updated values are returned by /api/v1/user/starred.
As a result, a user who no longer has permission to access the repository can continue to obtain repository metadata through the starred repository list.
PoC
PoC Link
https://anonymous.4open.science/r/Gitea_PoC-EC93/5_poc_starred_list
PoC Details
- Create a private repository:
alice/P
description = "INITIAL"
-
Add
bobas a collaborator with read access. -
As
bob, star the repository:
PUT /api/v1/user/starred/alice/P
Response:
204 No Content
-
Remove
bobfrom the collaborator list. -
Update the repository description:
description = "AFTER-REVOKE"
- Verify that direct repository access is no longer allowed:
GET /api/v1/repos/alice/P
Response:
404 Not Found
- As
bob, request the starred repository list:
GET /api/v1/user/starred
The response still contains the repository entry and reflects the updated description:
{
"full_name": "alice/P",
"description": "AFTER-REVOKE",
"private": true
}
This demonstrates that repository metadata remains accessible through the starred repository list even after repository access has been revoked.
Impact
A user who previously had legitimate access to a private repository can continue to retrieve repository metadata after losing access to the repository.
The exposed information includes repository metadata returned by the endpoint, such as:
- Repository name (
full_name) - Repository description
- Repository visibility status (
private)
This issue does not expose repository contents, source code, issues, pull requests, secrets, or collaborator information.
The impact is limited to continued access to repository metadata after repository permissions have been revoked.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 🐹Go | code.gitea.io/gitea | all versions | 1.27.0 |
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for code.gitea.io/gitea. O3's reachability analysis confirms whether the vulnerable code path is actually invoked in your application, so you act on real exposure instead of every transitive match.
Fix
Update code.gitea.io/gitea to 1.27.0 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2026-58434 is resolved across your whole dependency graph.
Workarounds
If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.
How O3 protects you
O3 pinpoints whether CVE-2026-58434 is reachable in your code and exactly where to fix it, then blocks exploitation in production at runtime until the patched version is deployed.
Tailored to CVE-2026-58434. Runtime protection reduces exposure until a permanent patch is applied and verified — it complements patching, it doesn't replace it.
Frequently Asked Questions
Is CVE-2026-58434 in your dependencies?
O3 detects CVE-2026-58434 across Go dependencies and uses function-level reachability to confirm whether the vulnerable code path is actually reachable — not just present. No false positives.