/

CVE-2026-94205

Severity:

CRITICAL RISK

(9.8)

Incorrect Authorization (CWE-863) in Gitea Actions Runner

CVE-2026-94205

Analyzed

Vulnerability type

Category:

Incorrect Authorization

CWE:

CWE-441, CWE-863

Impact:

Unauthorized Code Execution on Repository Runners

Severity:

CRITICAL RISK

(9.8)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

A critical authorization flaw in Gitea Actions could allow fork-controlled workflow code to run on base-repository runners without explicit approval. The approval decision used the user who triggered a pull request event instead of the pull request author, so routine maintainer actions could bypass the intended fork-workflow review boundary.

A critical authorization flaw in Gitea Actions could allow fork-controlled workflow code to run on base-repository runners without explicit approval. The approval decision used the user who triggered a pull request event instead of the pull request author, so routine maintainer actions could bypass the intended fork-workflow review boundary.

Affected context

The issue occurs in Gitea deployments where Actions is enabled, a matching runner is registered, and fork pull request workflows are subject to approval controls. During certain pull_request activities initiated by a maintainer, the workflow definition may still come from the fork while the approval decision is based on the event triggerer's identity rather than the pull request author's trust context.

The issue occurs in Gitea deployments where Actions is enabled, a matching runner is registered, and fork pull request workflows are subject to approval controls. During certain pull_request activities initiated by a maintainer, the workflow definition may still come from the fork while the approval decision is based on the event triggerer's identity rather than the pull request author's trust context.

Exploit preconditions

  • Attack surface: Gitea Actions pull request event processing
  • Required access: Ability to contribute a pull request from a fork; successful execution also requires Actions to be enabled and a compatible runner to be available
  • Trigger point: A qualifying pull_request activity initiated by a trusted repository user
  • Why exploitation is possible: Approval logic evaluates the event actor instead of the source pull request author, allowing fork-controlled workflow code to reach a base repository runner without the intended approval
  • Attack surface: Gitea Actions pull request event processing
  • Required access: Ability to contribute a pull request from a fork; successful execution also requires Actions to be enabled and a compatible runner to be available
  • Trigger point: A qualifying pull_request activity initiated by a trusted repository user
  • Why exploitation is possible: Approval logic evaluates the event actor instead of the source pull request author, allowing fork-controlled workflow code to reach a base repository runner without the intended approval

Why this happens

The authorization decision is derived from the identity that triggered a pull request event rather than from the less-trusted author and source of the workflow being executed. This confused-deputy-style trust-boundary error maps primarily to CWE-863: Incorrect Authorization and is also related to CWE-441: Unintended Proxy or Intermediary ('Confused Deputy'). The insecure pattern is granting execution trust based on an event actor while processing code supplied by another, potentially untrusted repository.

The authorization decision is derived from the identity that triggered a pull request event rather than from the less-trusted author and source of the workflow being executed. This confused-deputy-style trust-boundary error maps primarily to CWE-863: Incorrect Authorization and is also related to CWE-441: Unintended Proxy or Intermediary ('Confused Deputy'). The insecure pattern is granting execution trust based on an event actor while processing code supplied by another, potentially untrusted repository.

Potential impact

  • Fork-controlled workflow code could execute on base repository runners
  • Repository secrets or tokens available to the runner may be exposed
  • Builds, artifacts, or source data could be modified or poisoned
  • The runner environment could be compromised
  • Downstream systems may be affected if the runner has excessive permissions
  • Fork-controlled workflow code could execute on base repository runners
  • Repository secrets or tokens available to the runner may be exposed
  • Builds, artifacts, or source data could be modified or poisoned
  • The runner environment could be compromised
  • Downstream systems may be affected if the runner has excessive permissions

General mitigation guidance

Mitigation generally focuses on preserving the trust boundary between fork-supplied workflow definitions and privileged repository runners.

Common defensive patterns include:

  • Deriving approval decisions from the pull request author, source repository, and workflow provenance rather than only the event actor
  • Requiring explicit approval for workflows originating from untrusted forks
  • Separating fork workloads onto isolated, least-privilege runners
  • Limiting runner credentials, repository access, and network permissions
  • Avoiding exposure of sensitive secrets to unapproved or fork-controlled jobs
  • Applying secure-by-default policies for pull request workflow execution

Mitigation generally focuses on preserving the trust boundary between fork-supplied workflow definitions and privileged repository runners.

Common defensive patterns include:

  • Deriving approval decisions from the pull request author, source repository, and workflow provenance rather than only the event actor
  • Requiring explicit approval for workflows originating from untrusted forks
  • Separating fork workloads onto isolated, least-privilege runners
  • Limiting runner credentials, repository access, and network permissions
  • Avoiding exposure of sensitive secrets to unapproved or fork-controlled jobs
  • Applying secure-by-default policies for pull request workflow execution

How teams detect issues like this

Organizations can assess this risk through:

  • Code review of authorization decisions for pull request and fork events
  • Static analysis and policy checks that compare event actor identity with pull request author and source repository
  • Tests covering maintainer-triggered activity on fork pull requests
  • Audit logging for approval bypasses and workflow executions sourced from forks
  • CI policies that prevent unapproved fork workflows from using privileged runners or secrets

Automated security review tools may help identify trust-boundary mismatches, but deployment-specific authorization tests remain important.

Organizations can assess this risk through:

  • Code review of authorization decisions for pull request and fork events
  • Static analysis and policy checks that compare event actor identity with pull request author and source repository
  • Tests covering maintainer-triggered activity on fork pull requests
  • Audit logging for approval bypasses and workflow executions sourced from forks
  • CI policies that prevent unapproved fork workflows from using privileged runners or secrets

Automated security review tools may help identify trust-boundary mismatches, but deployment-specific authorization tests remain important.

Sources

SourceLink
blog.gitea.comblog.gitea.com/release-of-28.0.0/
github.comgithub.com/go-gitea/gitea/pull/39399
github.comgithub.com/go-gitea/gitea/releases/tag/v28.0.0
github.comgithub.com/go-gitea/gitea/security/advisories/GHSA-xh39-mxw9-34pp

Frequently asked

questions

Potentially. The contributor generally needs to supply or modify workflow code through a fork, while the deployment must have Actions enabled and a matching runner available. A qualifying maintainer-triggered pull request activity is also required.

Not necessarily. The workflow code may originate from a fork, but exploitation depends on the base repository's event handling, runner configuration, and available permissions.

Tie approval decisions to the pull request's author and source trust context, and require explicit approval before fork-controlled workflows can use privileged runners or sensitive resources.

Model identities and code provenance separately, test every event path involving forks and maintainers, use least-privilege runners, and enforce policies that keep untrusted workflow code away from privileged execution environments.

Potentially. The contributor generally needs to supply or modify workflow code through a fork, while the deployment must have Actions enabled and a matching runner available. A qualifying maintainer-triggered pull request activity is also required.

Not necessarily. The workflow code may originate from a fork, but exploitation depends on the base repository's event handling, runner configuration, and available permissions.

Tie approval decisions to the pull request's author and source trust context, and require explicit approval before fork-controlled workflows can use privileged runners or sensitive resources.

Model identities and code provenance separately, test every event path involving forks and maintainers, use least-privilege runners, and enforce policies that keep untrusted workflow code away from privileged execution environments.

Find out what's already
exploitable in your codebase.