GHSA-J2W3-9C3R-G83Q

Vulnerability from github – Published: 2026-07-21 20:41 – Updated: 2026-07-21 20:41
VLAI
Summary
Gitea: Private Repository Metadata Remains Accessible After Access Revocation
Details

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:

  1. User alice creates a private repository.
  2. User bob is granted collaborator access.
  3. bob stars the repository.
  4. alice removes bob from the repository collaborators.
  5. Direct repository access by bob is denied.
  6. bob requests /api/v1/user/starred.
  7. 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

  1. Create a private repository:
alice/P
description = "INITIAL"
  1. Add bob as a collaborator with read access.

  2. As bob, star the repository:

PUT /api/v1/user/starred/alice/P

Response:

204 No Content
  1. Remove bob from the collaborator list.

  2. Update the repository description:

description = "AFTER-REVOKE"
  1. Verify that direct repository access is no longer allowed:
GET /api/v1/repos/alice/P

Response:

404 Not Found
  1. 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.

Show details on source website

{
  "affected": [
    {
      "package": {
        "ecosystem": "Go",
        "name": "code.gitea.io/gitea"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            },
            {
              "fixed": "1.27.0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "aliases": [
    "CVE-2026-58434"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-200",
      "CWE-862"
    ],
    "github_reviewed": true,
    "github_reviewed_at": "2026-07-21T20:41:49Z",
    "nvd_published_at": null,
    "severity": "LOW"
  },
  "details": "### Summary\n\nA 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.\n\nAfter 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\u0027s 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.\n\n### Details\n\nThe issue affects the authenticated endpoint:\n\n```http\nGET /api/v1/user/starred\n```\n\nThe same behavior was also observed on:\n\n```http\nGET /api/v1/user/subscriptions\n```\n\nA reproducible scenario is:\n\n1. User `alice` creates a private repository.\n2. User `bob` is granted collaborator access.\n3. `bob` stars the repository.\n4. `alice` removes `bob` from the repository collaborators.\n5. Direct repository access by `bob` is denied.\n6. `bob` requests `/api/v1/user/starred`.\n7. The repository is still present in the response together with repository metadata.\n\nAdditionally, if repository metadata is modified after access revocation, the updated values are returned by `/api/v1/user/starred`.\n\nAs a result, a user who no longer has permission to access the repository can continue to obtain repository metadata through the starred repository list.\n\n### PoC\n\n#### PoC Link\nhttps://anonymous.4open.science/r/Gitea_PoC-EC93/5_poc_starred_list\n\n#### PoC Details\n1. Create a private repository:\n\n```text\nalice/P\ndescription = \"INITIAL\"\n```\n\n2. Add `bob` as a collaborator with read access.\n\n3. As `bob`, star the repository:\n\n```http\nPUT /api/v1/user/starred/alice/P\n```\n\nResponse:\n\n```http\n204 No Content\n```\n\n4. Remove `bob` from the collaborator list.\n\n5. Update the repository description:\n\n```text\ndescription = \"AFTER-REVOKE\"\n```\n\n6. Verify that direct repository access is no longer allowed:\n\n```http\nGET /api/v1/repos/alice/P\n```\n\nResponse:\n\n```http\n404 Not Found\n```\n\n7. As `bob`, request the starred repository list:\n\n```http\nGET /api/v1/user/starred\n```\n\nThe response still contains the repository entry and reflects the updated description:\n\n```json\n{\n  \"full_name\": \"alice/P\",\n  \"description\": \"AFTER-REVOKE\",\n  \"private\": true\n}\n```\n\nThis demonstrates that repository metadata remains accessible through the starred repository list even after repository access has been revoked.\n\n### Impact\n\nA user who previously had legitimate access to a private repository can continue to retrieve repository metadata after losing access to the repository.\n\nThe exposed information includes repository metadata returned by the endpoint, such as:\n\n* Repository name (`full_name`)\n* Repository description\n* Repository visibility status (`private`)\n\nThis issue does not expose repository contents, source code, issues, pull requests, secrets, or collaborator information.\n\nThe impact is limited to continued access to repository metadata after repository permissions have been revoked.",
  "id": "GHSA-j2w3-9c3r-g83q",
  "modified": "2026-07-21T20:41:49Z",
  "published": "2026-07-21T20:41:49Z",
  "references": [
    {
      "type": "WEB",
      "url": "https://github.com/go-gitea/gitea/security/advisories/GHSA-j2w3-9c3r-g83q"
    },
    {
      "type": "WEB",
      "url": "https://github.com/go-gitea/gitea/pull/38321"
    },
    {
      "type": "WEB",
      "url": "https://github.com/go-gitea/gitea/pull/38390"
    },
    {
      "type": "WEB",
      "url": "https://github.com/go-gitea/gitea/commit/362539b78e50dfcc4bd1b9368fdd2a1b8cab0129"
    },
    {
      "type": "WEB",
      "url": "https://github.com/go-gitea/gitea/commit/500a09e044156d7a8d6eb58d67a28b8a1512c887"
    },
    {
      "type": "PACKAGE",
      "url": "https://github.com/go-gitea/gitea"
    },
    {
      "type": "WEB",
      "url": "https://github.com/go-gitea/gitea/releases/tag/v1.27.0"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N",
      "type": "CVSS_V4"
    }
  ],
  "summary": "Gitea: Private Repository Metadata Remains Accessible After Access Revocation"
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…