Summary
Gitea writes a synthetic skipped commit status for a workflow that matched an event but was excluded by its own branches: or paths: filter, so that a required status check tied to that workflow does not block indefinitely. For a pull_request event the workflow definition is read from the pull request head commit, which for a fork pull request is controlled by the pull request author. The author can define a workflow whose name matches a required status check context and give it a filter that never matches, causing Gitea to write a skipped status under that context on the base repository. Because skipped counts as success when statuses are combined, the required check evaluates as passed.
Details
This path deliberately creates no workflow run, so the fork approval gate, which guards run creation, does not apply. No write access, runner or approval is required. The required context string is publicly visible as the check name on any pull request.
Impact
Bypass of branch-protection required status checks and of organization-mandated required workflows. Code can reach a protected branch with mandated checks shown as passing although nothing ran; where auto-merge is scheduled it can merge unattended. Any authenticated user who can fork and open a pull request is a potential actor.
Affected versions
Gitea <= 1.27.2.
Patches
Fixed in Gitea 1.27.3 (#39005, #39018).
Workarounds
None that preserve the protection. Upgrade to 1.27.3.
Summary
Gitea writes a synthetic
skippedcommit status for a workflow that matched an event but was excluded by its ownbranches:orpaths:filter, so that a required status check tied to that workflow does not block indefinitely. For apull_requestevent the workflow definition is read from the pull request head commit, which for a fork pull request is controlled by the pull request author. The author can define a workflow whose name matches a required status check context and give it a filter that never matches, causing Gitea to write askippedstatus under that context on the base repository. Becauseskippedcounts as success when statuses are combined, the required check evaluates as passed.Details
This path deliberately creates no workflow run, so the fork approval gate, which guards run creation, does not apply. No write access, runner or approval is required. The required context string is publicly visible as the check name on any pull request.
Impact
Bypass of branch-protection required status checks and of organization-mandated required workflows. Code can reach a protected branch with mandated checks shown as passing although nothing ran; where auto-merge is scheduled it can merge unattended. Any authenticated user who can fork and open a pull request is a potential actor.
Affected versions
Gitea
<= 1.27.2.Patches
Fixed in Gitea 1.27.3 (#39005, #39018).
Workarounds
None that preserve the protection. Upgrade to 1.27.3.