{"id":"CVE-2026-112887","kind":"vulnerability","aliases":["CVE-2026-112887"],"related":[],"title":"Gitea: Actions job tokens list every private repository on the instance","description":"Gitea Actions task tokens authenticate to the REST API as a shared system user with a negative ID, which repository, organization, project and key filters treated as having no owner restriction, and the token carried no API scope to restrict user-scoped routes. A user who can run a workflow could use the job's token with `GET /api/v1/user/repos` to list every repository on the instance, including private repositories of other users and organizations, with their metadata. Repository contents remained protected by per-repository permission checks. System users now own nothing, and `/api/v1/user` routes other than `GET /api/v1/user` accept only individual and bot accounts.","summary":"A Gitea Actions workflow job token authenticates to the REST API as a shared system user, and filters treated that user as unrestricted. A workflow that can run can call GET /api/v1/user/repos and list every repository on the instance, including private repositories' metadata, though repository contents stay protected by per-repository permission checks.","severity":"medium","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["ci","gitea","gitea-actions","runtime","self-hosted"],"not_affected_if":["actions-disabled","trusted-workflow-authors-only"],"how_to_check":"- Confirm the Gitea version with `gitea --version` or the admin dashboard.\n- Check whether Gitea Actions is enabled in app.ini under the `[actions]` section.\n- Review who can push workflows or run jobs on the instance.","fix":null,"status":"open","published_at":"2026-11-01T10:18:33+00:00","first_seen_at":"2026-11-01T10:49:32+00:00","triaged_at":"2026-11-01T10:51:44+00:00","updated_at":"2026-11-01T10:51:44+00:00","category":"runtime","confidence":0.6,"triage":{"at":"2026-11-01T10:51:44Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"network","title":"Gitea: Actions job tokens list every private repository on the instance","impact":"medium","summary":"A Gitea Actions workflow job token authenticates to the REST API as a shared system user, and filters treated that user as unrestricted. A workflow that can run can call GET /api/v1/user/repos and list every repository on the instance, including private repositories' metadata, though repository contents stay protected by per-repository permission checks.","audience":"businesses","category":"runtime","nicknames":[],"who_cares":["gitea","self-hosted","gitea-actions","ci"],"confidence":0.6,"fix_status":"unknown","needs_auth":"yes","worst_case":"workflow users list private repository metadata across the instance","analyst_note":"Find the affected and fixed Gitea versions and confirm the Actions configuration requirement at the NVD entry or Gitea's security advisory.","how_to_check":"- Confirm the Gitea version with `gitea --version` or the admin dashboard.\n- Check whether Gitea Actions is enabled in app.ini under the `[actions]` section.\n- Review who can push workflows or run jobs on the instance.","plain_action":"","needs_analyst":true,"not_affected_if":["actions-disabled","trusted-workflow-authors-only"],"who_is_affected":"Teams that self-host Gitea with Gitea Actions enabled are exposed, because any user who can run a workflow gets a job token that can read repository metadata across the instance. The sources do not give the affected version ranges or a fixed version. Instances with Actions disabled, or where only fully trusted people can run workflows, have less exposure.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000723,"input_tokens":4218,"output_tokens":602,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-112887':14A,17A '-2026':13A,16A '/api/v1/user':175C,180C '/api/v1/user/repos':58B,140C 'accept':181C 'account':186C 'action':2A,22B,29B,82C 'api':37B,89C,117C 'authent':33B,85C 'bot':185C 'call':56B 'carri':115C 'check':80B,168C 'ci':18B 'content':72B,160C 'could':132C 'cve':12A,15A 'everi':6A,61B,143C 'filter':44B,105C 'get':57B,139C,179C 'gitea':1A,19B,21B,28B,81C 'gitea-act':20B 'host':26B 'id':98C 'includ':66B,148C 'individu':183C 'instanc':11A,65B,147C 'job':3A,31B,135C 'key':104C 'list':5A,60B,142C 'metadata':69B,158C 'negat':97C 'noth':173C 'organ':101C,155C 'owner':110C 'per':77B,165C 'per-repositori':76B,164C 'permiss':79B,167C 'privat':7A,67B,149C 'project':102C 'protect':74B,162C 'remain':161C 'repositori':8A,62B,68B,71B,78B,100C,144C,150C,159C,166C 'rest':36B,88C 'restrict':111C,120C 'rout':124C,176C 'run':54B,129C 'runtim':23B 'scope':118C,123C 'self':25B 'self-host':24B 'share':40B,92C 'stay':73B 'system':41B,93C,169C 'task':83C 'though':70B 'token':4A,32B,84C,114C,137C 'treat':45B,106C 'unrestrict':49B 'use':133C 'user':42B,47B,94C,122C,126C,153C,170C 'user-scop':121C 'workflow':30B,51B,131C","nicknames":[],"mitigations":[],"who_affected":"Teams that self-host Gitea with Gitea Actions enabled are exposed, because any user who can run a workflow gets a job token that can read repository metadata across the instance. The sources do not give the affected version ranges or a fixed version. Instances with Actions disabled, or where only fully trusted people can run workflows, have less exposure.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"unknown","audience":"businesses","plain_action":null,"first_public_at":"2026-11-01T10:18:33+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-112887","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-112887","severity":null,"published_at":"2026-11-01T10:18:33+00:00","modified_at":"2026-11-01T10:18:34+00:00","first_seen_at":"2026-11-01T10:49:32+00:00","fetched_at":"2026-11-01T10:49:32+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}