Every CVE Search/ Get API key

CVE-2026-28740

Gitea LFS object reuse bypasses Code-unit authorization

7.1 HighFix available

Gitea versions up to and including 1.26.2 allow Git LFS object reuse to authorize private source objects for users who have repository access but lack Code-unit access.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
High
Privileges needed
Low
User interaction
None

What an attacker can affect

Confidentiality
High
Integrity
Low
Availability
None

Exploit likelihood

0.32%Unchanged since Jul 4, 2026
90%50%10%1%

What each source reports

CVE List Score used 7.1

Gitea LFS object reuse bypasses Code-unit authorization

Gitea versions up to and including 1.26.2 allow Git LFS object reuse to authorize private source objects for users who have repository access but lack Code-unit access.

Record
CVE-2026-28740
CVSS 3.1
7.1 HighCVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:L/A:N
Weakness
CWE-639, CWE-863
Updated
2026-11-02
EUVDEUVD-2026-41643 7.1

Gitea versions up to and including 1.26.2 allow Git LFS object reuse to authorize private source objects for users who have repository access but lack Code-unit access.

Record
EUVD-2026-41643
CVSS 3.1
7.1 HighCVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:L/A:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-2m9v-5q2g-58vq 7.1

Gitea: Git LFS object reuse allows non-Code access to authorize private source objects

Summary

A user with Code write access to one repository may be able to associate an existing Git LFS object from a private source repository with their target repository, even when they do not have Code access to the source repository that currently owns the LFS object.

The issue appears to be caused by the source-object authorization check using broad repository accessibility instead of requiring Code-unit access to at least one repository that owns the requested LFS object.

Impact

This issue breaks the expected authorization boundary between repository units.

A user who does not have Code access to a private source repository should not be able to reuse or associate Git LFS objects owned by that repository. However, because the source-object accessibility check accepts broad repository access, non-Code access such as Issues access may be sufficient for the LFS object to be treated as accessible.

If the reused object becomes downloadable through the attacker-controlled target repository after metadata association, this can result in cross-repository Git LFS content disclosure.

The target repository write authorization is still enforced. The problem is specifically in the authorization decision for whether the source LFS object is accessible and may be reused.

Preconditions

The attacker needs:

  • an authenticated Gitea account;
  • Code write access to a target repository;
  • non-Code access, such as Issues access, to a private source repository;
  • knowledge of an existing Git LFS object OID and size from the private source repository.

Affected Area

The issue affects the Git LFS upload/object reuse path.

Relevant paths:

services/lfs/server.go

Relevant handlers:

BatchHandler
UploadHandler

Both paths can call:

git_model.LFSObjectAccessible(ctx, ctx.Doer, p.Oid)

The helper is located in:

models/git/lfs.go

The authorization check uses:

repo_model.AccessibleRepositoryCondition(user, unit.TypeInvalid)

When unit.TypeInvalid is used, the repository access condition can include broad repository access, such as organization team membership through team_repo and team_user, without requiring that the user has access to the Code unit of the source repository.

By contrast, Code-specific repository access checks use a concrete unit type and include team_unit validation.

Validation

I reproduced this locally using Gitea's Go test harness.

Validated against commit:

dac41a124fd34820a3c8caf3b3592ba62cd514ff

The PoC creates the following scenario:

  1. The attacker has Code write access to the target repository.
  2. The source repository is private.
  3. The attacker does not have Code access to the source repository.
  4. The attacker only has Issues access to the source repository through an organization team.
  5. An LFS object exists in the source repository.
  6. LFSObjectAccessible(ctx, attacker, oid) returns true.
  7. NewLFSMetaObject(ctx, targetRepo.ID, pointer) successfully creates LFS metadata for the target repository.

Test result:

=== RUN   TestLFSObjectAccessibleAllowsNonCodeSourceAccess
--- PASS: TestLFSObjectAccessibleAllowsNonCodeSourceAccess
PASS
ok  	gitea.dev/models/git

No live instance was tested. Validation was performed only against a local test database.

Security Expectation

A user should not be allowed to reuse or associate an LFS object from a private source repository unless they have Code access to that source repository, or another permission level explicitly intended to grant access to repository file contents.

Non-Code permissions such as Issues access should not authorize access to Git LFS object content or allow Git LFS object reuse.

Suggested Fix

LFSObjectAccessible should require Code-unit access to at least one repository that owns the requested LFS object.

The check should avoid using unit.TypeInvalid for this source-object authorization decision. A Code-specific…

Record
GHSA-2m9v-5q2g-58vq
CVSS 3.1
7.1 HighCVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:L/A:N
Weakness
CWE-639, CWE-863
Updated
2026-11-02
NVD 7.1

Gitea versions up to and including 1.26.2 allow Git LFS object reuse to authorize private source objects for users who have repository access but lack Code-unit access.

Record
CVE-2026-28740
CVSS 3.1
7.1 HighCVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:L/A:N
Weakness
CWE-639, CWE-863
Updated
2026-11-02
OSV 7.1

Gitea LFS object reuse bypasses Code-unit authorization

Gitea versions up to and including 1.26.2 allow Git LFS object reuse to authorize private source objects for users who have repository access but lack Code-unit access.

Record
CVE-2026-28740
CVSS 3.1
7.1 HighCVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:L/A:N
Weakness
CWE-639, CWE-863
Updated
2026-11-02
OSVGHSA-2m9v-5q2g-58vq 7.1

Gitea: Git LFS object reuse allows non-Code access to authorize private source objects

Summary

A user with Code write access to one repository may be able to associate an existing Git LFS object from a private source repository with their target repository, even when they do not have Code access to the source repository that currently owns the LFS object.

The issue appears to be caused by the source-object authorization check using broad repository accessibility instead of requiring Code-unit access to at least one repository that owns the requested LFS object.

Impact

This issue breaks the expected authorization boundary between repository units.

A user who does not have Code access to a private source repository should not be able to reuse or associate Git LFS objects owned by that repository. However, because the source-object accessibility check accepts broad repository access, non-Code access such as Issues access may be sufficient for the LFS object to be treated as accessible.

If the reused object becomes downloadable through the attacker-controlled target repository after metadata association, this can result in cross-repository Git LFS content disclosure.

The target repository write authorization is still enforced. The problem is specifically in the authorization decision for whether the source LFS object is accessible and may be reused.

Preconditions

The attacker needs:

  • an authenticated Gitea account;
  • Code write access to a target repository;
  • non-Code access, such as Issues access, to a private source repository;
  • knowledge of an existing Git LFS object OID and size from the private source repository.

Affected Area

The issue affects the Git LFS upload/object reuse path.

Relevant paths:

services/lfs/server.go

Relevant handlers:

BatchHandler
UploadHandler

Both paths can call:

git_model.LFSObjectAccessible(ctx, ctx.Doer, p.Oid)

The helper is located in:

models/git/lfs.go

The authorization check uses:

repo_model.AccessibleRepositoryCondition(user, unit.TypeInvalid)

When unit.TypeInvalid is used, the repository access condition can include broad repository access, such as organization team membership through team_repo and team_user, without requiring that the user has access to the Code unit of the source repository.

By contrast, Code-specific repository access checks use a concrete unit type and include team_unit validation.

Validation

I reproduced this locally using Gitea's Go test harness.

Validated against commit:

dac41a124fd34820a3c8caf3b3592ba62cd514ff

The PoC creates the following scenario:

  1. The attacker has Code write access to the target repository.
  2. The source repository is private.
  3. The attacker does not have Code access to the source repository.
  4. The attacker only has Issues access to the source repository through an organization team.
  5. An LFS object exists in the source repository.
  6. LFSObjectAccessible(ctx, attacker, oid) returns true.
  7. NewLFSMetaObject(ctx, targetRepo.ID, pointer) successfully creates LFS metadata for the target repository.

Test result:

=== RUN   TestLFSObjectAccessibleAllowsNonCodeSourceAccess
--- PASS: TestLFSObjectAccessibleAllowsNonCodeSourceAccess
PASS
ok  	gitea.dev/models/git

No live instance was tested. Validation was performed only against a local test database.

Security Expectation

A user should not be allowed to reuse or associate an LFS object from a private source repository unless they have Code access to that source repository, or another permission level explicitly intended to grant access to repository file contents.

Non-Code permissions such as Issues access should not authorize access to Git LFS object content or allow Git LFS object reuse.

Suggested Fix

LFSObjectAccessible should require Code-unit access to at least one repository that owns the requested LFS object.

The check should avoid using unit.TypeInvalid for this source-object authorization decision. A Code-specific…

Record
GHSA-2m9v-5q2g-58vq
CVSS 3.1
7.1 HighCVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:L/A:N
Weakness
CWE-639, CWE-863
Updated
2026-11-02
OSVGO-2026-6029 No score

Gitea: Git LFS object reuse allows non-Code access to authorize private source objects in code.gitea.io/gitea

Gitea: Git LFS object reuse allows non-Code access to authorize private source objects in code.gitea.io/gitea

Record
GO-2026-6029
Updated
2026-11-02
OSVopenSUSE-SU-2026:21483-1 No score

Security update for govulncheck-vulndb

This update for govulncheck-vulndb fixes the following issues:

  • Update to version 0.0.20260723T184607 2026-07-23T18:46:07Z (jsc#PED-11136).

Go CVE Numbering Authority IDs added or updated with aliases:

  • GO-2026-4730 CVE-2026-33022 GHSA-cv4x-93xx-wgfj
  • GO-2026-4761 CVE-2026-33211 GHSA-j5q5-j9gm-2w5c
  • GO-2026-5102 CVE-2026-45021 GHSA-3vcp-chfh-f6r2
  • GO-2026-5272 CVE-2026-40938 GHSA-94jr-7pqp-xhcq
  • GO-2026-5486 CVE-2026-40924 GHSA-m2cx-gpqf-qf74
  • GO-2026-5542 CVE-2026-40090 GHSA-pj97-4p9w-gx3q
  • GO-2026-5630 CVE-2026-25542 GHSA-rmx9-2pp3-xhcr
  • GO-2026-5643 CVE-2026-40923 GHSA-rx35-6rhx-7858
  • GO-2026-5675 CVE-2026-41492 GHSA-vvf7-6rmr-m29q
  • GO-2026-5711 CVE-2026-40161 GHSA-wjxp-xrpv-xpff
  • GO-2026-5746 CVE-2026-41567 GHSA-x86f-5xw2-fm2r
  • GO-2026-5749 CVE-2026-41328 GHSA-x92x-px7w-4gx4
  • GO-2026-5837 CVE-2026-44840 GHSA-q2m9-6jp9-c6mc
  • GO-2026-5929 CVE-2026-44342 GHSA-26v7-h57m-gh9m
  • GO-2026-5930 CVE-2026-33655 GHSA-6qcr-qxgr-m7fv
  • GO-2026-5933 GHSA-3g4q-2f67-2gvh
  • GO-2026-5934 GHSA-59qp-cfj3-rp64
  • GO-2026-5935 GHSA-7856-g3gv-9wq8
  • GO-2026-5936 CVE-2026-53552 GHSA-26rh-24rg-j3vv
  • GO-2026-5937 CVE-2026-53508 GHSA-2jcc-mxv7-p3f9
  • GO-2026-5938 CVE-2026-53553 GHSA-4g5x-hcwm-82jw
  • GO-2026-5939 CVE-2026-10517 GHSA-698x-9w2p-7vvp
  • GO-2026-5940 CVE-2026-53572 GHSA-6w3m-4hhp-775q
  • GO-2026-5941 CVE-2026-53487 GHSA-gvhc-wv3v-7pf8
  • GO-2026-5942 CVE-2026-46600
  • GO-2026-5944 CVE-2026-50197 GHSA-659f-rgp5-w4wf
  • GO-2026-5945 CVE-2026-6815 GHSA-rmxx-v9rj-vpvg
  • GO-2026-5946 CVE-2026-52831 GHSA-v5px-423j-pf7p
  • GO-2026-5947 CVE-2026-53649 GHSA-xqhv-chqm-fhcc
  • GO-2026-5948 CVE-2026-50554 GHSA-588f-fvcv-xhvf
  • GO-2026-5949 CVE-2026-50553 GHSA-rqrh-8wpv-x7hh
  • GO-2026-5950 CVE-2026-53602 GHSA-339v-266x-79xr
  • GO-2026-5951 CVE-2026-10219 GHSA-6jm8-4fhr-5w64
  • GO-2026-5952 CVE-2026-49834 GHSA-9vcr-p3rj-q5q6
  • GO-2026-5953 CVE-2026-9094 GHSA-c9w5-qp6m-m395
  • GO-2026-5956 CVE-2026-55252 GHSA-h5g6-xmh4-hc37
  • GO-2026-5957 CVE-2026-54158 GHSA-5xfx-xj4h-5p7r
  • GO-2026-5958 CVE-2026-54068 GHSA-gcm7-57gf-953c
  • GO-2026-5959 CVE-2026-54072 GHSA-h29v-hj44-q8cv
  • GO-2026-5961 CVE-2026-54069 GHSA-hvr9-72v2-fff3
  • GO-2026-5962 CVE-2026-54088 GHSA-m93h-4hw7-5qcm
  • GO-2026-5963 CVE-2026-54067 GHSA-mvjr-vv3c-w4qv
  • GO-2026-5964 CVE-2026-54066 GHSA-p4m3-mgmm-c664
  • GO-2026-5965 CVE-2026-54070 GHSA-w7cg-whh7-xp28
  • GO-2026-5966 CVE-2026-54089 GHSA-xqp3-jq6g-x3qm
  • GO-2026-5967 CVE-2026-50551 GHSA-56mp-4f3v-fgj2
  • GO-2026-5968 CVE-2026-54174 GHSA-fpg8-7664-jc5q
  • GO-2026-5969 GHSA-g936-7jqj-mwv8
  • GO-2026-5970 CVE-2026-56852
  • GO-2026-5973 CVE-2026-54250 GHSA-jxr7-mqhw-9p98
  • GO-2026-5974 CVE-2026-44300 GHSA-wmj8-9953-vff5
  • GO-2026-5975 CVE-2026-50018 GHSA-42j2-w334-qxw7
  • GO-2026-5976 CVE-2026-50141 GHSA-g7mm-9vx7-jm7h
  • GO-2026-5977 CVE-2026-50013 GHSA-qrh4-p6v4-mrfg
  • GO-2026-5978 CVE-2026-50125 GHSA-qw5r-ppcg-f8rj
  • GO-2026-5979 CVE-2026-50006 GHSA-xrcf-6jh3-ggvx
  • GO-2026-5980 CVE-2026-50158 GHSA-2c7f-fxww-6w6c
  • GO-2026-5981 GHSA-mqxv-9rm6-w8qc
  • GO-2026-5982 GHSA-pqg7-v6wh-3pfp
  • GO-2026-5984 CVE-2026-53604 GHSA-2p2f-px33-4vv5
  • GO-2026-5985 GHSA-7rx3-5wx3-5v76
  • GO-2026-5986 CVE-2026-61699 GHSA-cm26-5974-52h8
  • GO-2026-5987 CVE-2026-55513 GHSA-g4x6-jcvr-9m3g
  • GO-2026-5988 CVE-2026-54628 GHSA-hwrq-8wxh-q4xv
  • GO-2026-5989 CVE-2026-55512 GHSA-m3cx-mwpg-32jg
  • GO-2026-5990 CVE-2026-54629 GHSA-mf78-3rpf-r784
  • GO-2026-5991 CVE-2026-53603 GHSA-q4vm-pq3q-8wgq
  • GO-2026-5992 CVE-2026-61549 GHSA-qf34-295c-26v8
  • GO-2026-5996 CVE-2026-54450 GHSA-pph6-vfjv-vpjw
  • GO-2026-5997 CVE-2026-54452 GHSA-xgch-x3mx-cm3c
  • GO-2026-5998 CVE-2026-54495 GHSA-398h-7f66-3h4p
  • GO-2026-5999 CVE-2026-10814 GHSA-jh6h-v6mp-h22v
  • GO-2026-6002 CVE-2026-58196 GHSA-pr64-jmmf-jp54
  • GO-2026-6003 CVE-2026-53714 GHSA-22xc-xg2r-9j7v
  • GO-2026-6004 CVE-2026-52833 GHSA-3v79-m2cg-89ww
  • GO-2026-6005 CVE-2026-53715 GHSA-8fv2-88gg-hm7q
  • GO-2026-6006 CVE-2026-53716 GHSA-cxpq-8v7q-cg56 *…
Record
openSUSE-SU-2026:21483-1
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
gitea.dev
Go
before 1.26.3
1.26.3
code.gitea.io/gitea
Go
before 1.26.3
1.26.3
govulncheck-vulndb
openSUSE:Leap 16.0
before 0.0.20260723T184607-160000.1.1
0.0.20260723T184607-160000.1.1

History

History
RecordedChangedSources
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-28740 is a high vulnerability (CVSS 7.1) in Gitea Open Source Git Server, published July 3, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.32%, the 25th percentile. Fixed in gitea.dev 1.26.3.

References

Show 194 moreShow less
This page doesn't list everything

Left out here: 1,544 references and the rest of 3 source descriptions. The JSON record has them.

MoveEnter Open