VersionDrift
Product

Gitea 28.0.0 → 28.3.0

3 releases · 0 breaking changes · 0 security fixes · 39 advisories fixed

0security0breaking0deprecated6feature105fix

Vulnerabilities fixed by this upgrade

  • medium CVE-2026-119625 GET /{user}.rss / .atom leak private activity to a scope-confined API token (2nd incomplete-fix follow-up of GHSA-6cqf-375w-639g, user feed never got the scope-category check the repo feeds did)
  • 6.5 CVE-2026-112887 Gitea Actions task tokens authenticate to the REST API with no token scope, enabling instance-wide private repository enumeration via GET /api/v1/user/repos
  • medium CVE-2026-116474 Actions token can spoof instance-signed commits by adding a GPG key
  • 5.3 CVE-2026-119533 Public project boards disclose private pull request titles and repository names
  • 6.5 CVE-2026-118504 API Issue Mutation Archive Restriction Bypass
  • medium CVE-2026-117677 Helm chart upload: unbounded gzip+tar metadata parse before the package-size quota gate (CWE-409/CWE-400 decompression amplification)
  • 6.5 CVE-2026-117649 Cross-repository issue dependency and timeline read path serializes private issue title/body and attachments without the source repository access check (LoadDepIssueDetails/ToAPIIssue without ACL)
  • 4.3 CVE-2026-118395 Deprecated POST /org/{org}/repos skips rejectPublicOnly; public-only tokens can create private repositories
  • 4.3 CVE-2026-117646 Public-only tokens expose private repositories through profile and organization tabs
  • 6.5 CVE-2026-116289 Public-only PAT scope bypass via Actions runner registration leaks private repository secrets
  • 4.3 CVE-2026-114199 Contribution heatmap discloses private-repository contribution counts to public-only tokens (GetUserHeatmapData never reads ctx.PublicOnly while activity feeds do)
  • 4.3 CVE-2026-119627 Gitea web profile and feed routes bypass public-only token scope for limited-visibility users
  • 4.3 CVE-2026-118394 OIDC userinfo: the public-only token scope is not enforced when the token arrives as a query parameter (residual of CVE-2026-55982)
  • 8.7 CVE-2026-113429 Stored XSS on the Gitea origin through the v3 artifact Content-Encoding header
  • 8.1 CVE-2026-116296 Write collaborators can replace and destroy releases, milestones and labels on archived repositories (archived write-protection bypass)
  • 8.1 CVE-2026-119441 Public-Only Token Bypass on Bulk Organization Repository Deletion
  • 8.1 CVE-2026-117635 Public-only tokens bypass private-resource restrictions on the admin API
  • 7.1 CVE-2026-117685 Public-only package tokens can access private OCI blobs
  • high CVE-2026-120263 Account Takeover via OAuth2 Auto-Linking with Attacker-Controlled Username
  • 8.1 CVE-2026-118386 Actions: fork workflow gets secrets and write token via review commit_id
  • low CVE-2026-107618 Cross-Site Request Forgery on `POST /{owner}/{repo}/topics`
  • 3.5 CVE-2026-97204 DeleteLabel compares one untyped id against whichever namespace the label uses, letting a repo collaborator delete an ID-colliding organisation's labels
  • 6.5 CVE-2026-110324 Private profile information leaks on POST request
  • 6.5 CVE-2026-105964 Gitea Actions Artifact V4 API: unbounded request body read in parseProtobufBody enables memory-exhaustion DoS
  • 4.3 CVE-2026-110311 Draft releases include attachment metadata from other repositories
  • 5.3 CVE-2026-105661 Unauthenticated nil-pointer panic on /{username}/-/repositories for individual users
  • 6.3 CVE-2026-110494 Gitea AddReleaseAttachments missing IssueID check allows issue attachment metadata exposure and deletion via releases
  • 4.3 CVE-2026-107686 Locked issues and comments still accept reactions through the web UI
  • 8.1 CVE-2026-104627 Cross-Session OpenID Credential Linking Enables Account Takeover
  • 7.5 CVE-2026-109553 VerifyCert maps SSH certificate principals onto other users' SSH public keys
  • 6.5 CVE-2026-104633 A migration source reporting max_response_items: 0 makes six paginated loops in the Gitea downloader never terminate, exhausting server memory from one authenticated request
  • 6.5 CVE-2026-105267 POST /{owner}/{repo}/tags/delete requires only Code:Write but destroys Releases and their attachment blobs
  • medium CVE-2026-97626 Web RSS/Atom Accept-header bypass leaks activity feeds of limited/private users and orgs
  • 5.4 CVE-2026-89182 Gitea push-to-create ignores ForcePrivate server policy, allowing non-admin users to publish repositories as public
  • 4.3 CVE-2026-105268 Issue-scoped attachment routes accept comment-scoped attachment ids, letting an issue opener delete or rename other users' comment attachments
  • medium CVE-2026-101023 OAuth access tokens can be exchanged as refresh tokens
  • 8.5 CVE-2026-96594 Stored XSS via Repository Media API
  • 7.1 CVE-2026-86684 Push-mirror API checks local-path permission on the repository owner instead of the caller
  • 8.1 CVE-2026-97208 Gitea push-mirror creation API does not enforce the site-wide DISABLE_NEW_PUSH policy

Breaking changes

None in the release notes.

Security changes

None in the release notes.

Every release in between

featureImprove hover border of colored button groups (#39861) (#39899)
feature(webhook) Mention release assets in notifications (#39631) (#39912)
feature(project) Filter project milestones by linked issues (#39958) (#39984)
fix(pulls) Tolerate invalid stored review commit_id (#39849) (#39857)
fix(api) Skip label lookup in ListIssues when no labels filter given (#39890) (#39893)
fixPrevent system users from watching a repository (#39886) (#39895)
fixOff-by-one errors in code comment patches (#39887) (#39904)
fixUse clear error message when failed to parse git version (#39898) (#39903)
fix(packages) Reject newline-bearing rubygems dependency metadata (#39782) (#39900)
fixEnforce public-only token scope on more routes (#39690) (#39853)
fix(api) Return 4xx for invalid fork repository names (#39909) (#39919)
fix(lfs) Send the default branch as ref in batch download requests (#39891) (#39920)
fix(api) Keep milestone due date when it is omitted in edit request (#39869) (#39921)
fix(oauth2) Decode form-encoded client credentials in HTTP Basic auth (#39926) (#39931)
fix(issues) Keep one row per issue when sorting by exclusive label order (#39364) (#39928)
fix(api) Check unit read permission in issue sub-resource endpoints (#39885) (#39938)
fix(migrations) Use cursor pagination for GitHub issue migration too (#39888) (#39941)
fix(feed) Hide release notes in tags feed without releases access (#39944) (#39949)
fix(api) Adding issue labels by name attaches both the repo and the org label (#39873) (#39951)
fix(actions) Bound requested artifact retention (#39894) (#39946)
fix(actions) Drop untrusted Content-Encoding from v1 artifact uploads (#39855) (#39996)
fixGet valid UTF-8 for diff_hunk and composer readme (#39932) (#40000)
fix(diff) Load both blobs of renamed files for diff rendering (#39969) (#39992)
fix(migrations) Update gitea sdk to fix nil pointer panic (#39999)
fixFix OneDev migration with OneDev 16.8 and newer (#40017) (#40026)
fix(git) Default to the gc maintenance strategy (#40022) (#40029)
fixReplace null char with space for issue/comment content (#40014) (#40034)
fix(issue) Prevent redirect to external tracker when built-in tracker is enabled (#39997) (#40031)
fix(markup) Keep commit title emoji inside links (#39986) (#40032)
fix(repo) Use the viewed ref's editorconfig in file view, blame and editor (#39973) (#40019)
fix(deps) Update module golang.org/x/net to v0.62.0 [security] (#40050) (#40051)
fixSize mermaid iframe by the diagram's aspect ratio (#40046) (#40052)
fix(feed) Require code read access for the repo home branch feed (#39964) (#40067)
fixAdd missing access checks and size limits (#39942) (#40085)
fix(user) Answer the follow of a bot user with the profile card (#39980) (#40086)
fix(repo) Honor ALLOW_FORK_INTO_SAME_OWNER for organizations (#40025) (#40094)
fix(ui) Ignore code line anchors below 1, show JS errors in vite dev mode (#39432) (#40087)
fix(pull) Refuse review comments on locked pull requests (#39960) (#40084)
fix(api) Answer 409 when repository files already exist on disk (#40095) (#40098)
fix(mail) Preserve outer spacing in notification emails (#40104) (#40111)
+16 more items in the release notes
feature(oauth) Pre-register a builtin OAuth2 application for gitea-vscode (#39785) (#39801)
featureAllow custom watches to bypass on-mention email restriction (#39652) (#39837)
fixVarious bugs (#39661) (#39667)
fix(markup) Display MathML has no space below it (#39663) (#39668)
fixCorrect websocket notification for change password page (#39671) (#39670)
fix(webhook) Keep line breaks in Telegram rich messages (#39650) (#39677)
fixCorrect "go get" URL ssh scheme, fix form binding (#39674, #39528) (#39676)
fixOIDC discovery advertises unsupported id_token response_type (#39498) (#39689)
fix(deps) Update module golang.org/x/net to v0.60.0 [security] (#39695) (#39701)
fix(git) Leave reflog expiry to git's defaults (#39703) (#39711)
fix(actions) Settle cancelled reusable workflow runs stuck in cancelling (#39706) (#39717)
fix(git) Match git config values exactly when syncing (#39728) (#39729)
fix(actions) Harden log cursor, activity type and actor filter handling (#39721) (#39731)
fix(packages) Copy selected Debian installation values (#39718) (#39734)
fix(auth) Prevent competing remember-me token rotations (#39686) (#39688)
fix(packages/npm) Restore former tarball URLs (#39681) (#39749)
fix(issues) Allow selecting a tag in the issue Branch/Tag dropdown (#39747) (#39753)
fixValidate "state" for OpenID (#39642) (#39744)
fixCorrect label deletion and release attachment load (#39743) (#39752)
fix(markup) Resolve and proxy srcset links of elements (#39708) (#39756)
fix(lfs) Validate OID before building filesystem object path (#39762) (#39766)
fix(markup) Restore code copy newline strip and fix copying rendered blocks (#39755) (#39765)
fix(user) Don't match a commit with an empty author email to a user (#39777) (#39780)
fix(gitdiff) Unquote C-quoted paths from git diff-tree --raw (#39781) (#39783)
fix(actions) Fix schedule cleanup and default branch switch (#39740) (#39786)
fixSkip commit-graph write when fetching remote commits (#39798)
fix(webauthn) Accept unsolicited client extension outputs from WebKit clients (#39792) (#39806)
fix(pull) Fix code context of review comments on unchanged lines (#39799) (#39805)
fix(pull) Don't auto-detect empty pull requests as manually merged (#39807) (#39812)
fix(actions) Keep folded block scalars intact across serialization (#39787) (#39817)
fix(actions) Bound request body size in artifacts v4 twirp handlers (#39818) (#39822)
fixPrevent Gitea from crashing by notification panic (#39835)
fix(pull) Recover PRs whose recorded merge commit never reached the base repo (#39831) (#39840)
fixUse correct template variable on milestone page (#39834) (#39843)
fix(mailer) Reject incoming email tokens of users who cannot sign in (#39833) (#39841)
fixAdd missing checks to several handlers and models (#39839) (#39847)
feature(packages/npm) Improve npm client compatibility (#39434) (#39522)
fix(actions) Keep runs order after auto refresh (#39479) (#39481)
fixNpm route (#39488) (#39490)
fixCopy new access token to clipboard (#39496) (#39499)
fix(markup) Skip post-processing inside MathML (#39497) (#39502)
fix(markup) Don't escape ambiguous characters in MathML (#39493) (#39505)
fixAdd missing checks to several API and web handlers (#39501) (#39507)
fixHandle git branch name with special chars correctly (#39483) (#39515)
fixTrace git command correctly (#39520) (#39524)
fix(git) Reindex go-git storage when a concurrent repack removes packs (#39510) (#39534)
fix(oauth2) Allow users to approve scope changes (#38942) (#39521)
fix(api) Add index tiebreaker to commit status ordering (#39508) (#39525)
fix(git) Avoid unnecessary timers during language stats (#39531) (#39535)
fixUse READ COMMITTED transactions on MySQL and MariaDB (#39506) (#39537)
fix(markup) Use installed math fonts for MathML in Chromium (#39491) (#39547)
fix(git) Tolerate concurrent repacks in go-git storage (#39536) (#39556)
fixMake image captcha work with csp (#39555)
fixUse READ_COMMITTED_SNAPSHOT on MSSQL (#39512) (#39558)
fixMake navbar stopwatch button can show popup (#39562)
fix(actions) Restore pushes to protected branches (#39564) (#39567)
fix(api) Allow bots with pending password changes (#39551) (#39566)
fix(user) Restore organizations tab on user profile (#39577) (#39581)
fix(markup) Link team mentions that use a different org name case (#39436) (#39588)
fix(httpcache) Raw files return 304 after a change when the new commit is older (#39435) (#39591)
fix(git) Return no submodule web link when the URL cannot be parsed (#39274) (#39592)
fix(pull) Fetch PR head refs instead of pushing them (#39603) (#39607)
fixMigrate broken team authorize access mode (#39579) (#39580)
fix(actions) Refresh reusable caller status when children are skipped (#39589) (#39609)
fixMake "edit pr title & target branch" get correct branch (#39612) (#39621)
fix(egress) Expose more ranges as restricted rather than reserved (#39560) (#39624)
fix(web) Normalize content for edit history diff and fix comment history dropdown (#39616) (#39627)
fixCorrect RemoveWithRetry error handling (#39619) (#39626)
fix(pull) Refresh commits behind when an AGit pull request is updated (#39613) (#39625)
fix(models) Chunk commit status queries to avoid SQLite expression depth limit (#39611) (#39638)
fixShow "merge" form for empty PR (#39640) (#39645)
See how far your stack has drifted from upstream. Release data from vendors’ own sources · feed under CC BY 4.0 · Code under AGPL-3.0 Settings Feed status