Skip to main content

Boteraser | Website and Server Security Solutions

🛡️ CVE-2026-25229 — gogs

🟡 CVSS 6.5 — Medium ⚠️ Exploit Public CWE-284 NVD
6.5
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

Gogs has an Authorization Bypass Allows Cross-Repository Label Modification in Gogs

Summary

A broken access control vulnerability in Gogs allows authenticated users with write access to any repository to modify labels belonging to other repositories. The UpdateLabel function in the Web UI (internal/route/repo/issue.go) fails to verify that the label being modified belongs to the repository specified in the URL path, enabling cross-repository label tampering attacks.

Details

The vulnerability exists in the Web UI's label update endpoint POST /:username/:reponame/labels/edit. The handler function UpdateLabel uses an incorrect database query function that bypasses repository ownership validation:

Vulnerable Code (internal/route/repo/issue.go:1040-1054):

```plain

func UpdateLabel(c *context.Context, f form.CreateLabel) {

l, err := database.GetLabelByID(f.ID) // ❌ No repository validation

if err != nil {

c.NotFoundOrError(err, "get label by ID")

return

}

// ❌ Missing validation: l.RepoID != c.Repo.Repository.ID

l.Name = f.Title

l.Color = f.Color

if err := database.UpdateLabel(l); err != nil {

c.Error(err, "update label")

return

}

c.RawRedirect(c.Repo.MakeURL("labels"))

}

```

Root Cause:

1. The function calls database.GetLabelByID(f.ID) which internally passes repoID=0 to the ORM layer

2. According to code comments in internal/database/issue_label.go:147-166, passing repoID=0 causes the ORM to ignore repository restrictions

3. No validation checks whether l.RepoID == c.Repo.Repository.ID before updating

4. The middleware reqRepoWriter() only validates write access to the repository in the URL path, not the label's actual repository

Inconsistency with Other Functions:

+ NewLabel: Correctly sets RepoID = c.Repo.Repository.ID

+ DeleteLabel: Correctly uses database.DeleteLabel(c.Repo.Repository.ID, id)

+ API EditLabel: Correctly uses database.GetLabelOfRepoByID(c.Repo.Repository.ID, id)

  • **Only UpdateLabel in Web UI uses the vulnerable pattern**

PoC

Prerequisites:

+ Two user accounts: Alice (attacker) and Bob (victim)

+ alice has written access to repo-a

+ Bob owns repo-b with labels

Step 1: Identify Target Label ID

1. Login as bob, navigate to bob/repo-b/labels

2. Open browser DevTools (F12) → Network tab

3. Click edit on any label

4. Observe the form data: id=<LABEL_ID>

5. Example: id=1

Step 2: Execute Attack

```plain

# Login as alice, get session cookie

# Open DevTools → Application → Cookies → i_like_gogs

# Copy the cookie value

# Send malicious request

curl -X POST "http://localhost:3000/alice/repo-a/labels/edit" \

-H "Cookie: i_like_gogs=<ALICE_SESSION_COOKIE>" \

-H "Content-Type: application/x-www-form-urlencoded" \

-d "id=1&title=HACKED-BY-ALICE&color=%23000000"

# Expected response: 302 Found (redirect)

```

Step 3: Verify Impact

1. Login as bob

2. Navigate to bob/repo-b/labels

3. Observe: Label "P0-Critical" is now "HACKED-BY-ALICE" with black color

Impact

1. Issue Classification Disruption: Modify critical labels (e.g., "P0-Critical" → "P3-Low") causing urgent issues to be deprioritized

2. Security Issue Concealment: Change "security" labels to "documentation" to hide vulnerability reports from security teams

3. Workflow Sabotage: Alter labels used in CI/CD automation, breaking deployment pipelines

4. Mass Disruption: Batch modifies all labels across multiple repositories using ID enumeration

Recommended Fix:

```plain

func UpdateLabel(c *context.Context, f form.CreateLabel) {

l, err := database.GetLabelOfRepoByID(c.Repo.Repository.ID, f.ID)

if err != nil {

c.NotFoundOrError(err, "get label of repository by ID")

return

}

// Now label ownership is validated at database layer

l.Name = f.Title

l.Color = f.Color

if err := database.UpdateLabel(l); err != nil {

c.Error(err, "update label")

return

}

c.RawRedirect(c.Repo.MakeURL("labels"))

}

```

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is low, an attacker needs low-level privileges on the target. No user interaction is required. The scope is unchanged, so the impact stays within the vulnerable component. Rated impact: confidentiality none, integrity high, availability none.

CVSS metrics in full

The score comes from this vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N

  • Attack vector: Network — reachable from anywhere that can route to the service.
  • Attack complexity: Low — the attack works reliably, with no preparation.
  • Privileges required: Low — an ordinary user account is enough.
  • User interaction: None — nobody has to be tricked into anything.
  • Scope: Unchanged — the damage stays inside the vulnerable component.
  • Confidentiality impact: None.
  • Integrity impact: High — total loss, or loss the attacker controls.
  • Availability impact: None.

Weakness class

CVE-2026-25229 is classified as CWE-284: Improper Access Control. The software does not restrict an action to the actors that should be allowed to perform it.

Affected software

CVE-2026-25229 is recorded against 2 packages.

  • gogs (fixed in 0.14.1)
  • gogs.io/gogs

Timeline and source

Published on 19 February 2026 and last revised on 17 June 2026. A public exploit is known to exist, which raises the urgency of patching considerably. A vendor advisory or fix has been published. Record sourced from NVD.

References

github.com
github.com

Other advisories for this package

gogs has other advisories on record. If you are patching this one, these are worth checking on the same host:

Same weakness in other software

These advisories are the same class of weakness (CWE-284: Improper Access Control) in other software:

Details

Severity MEDIUM
CVSS Score 6.5
CVSS Vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
CWE CWE-284
Public Exploit ⚠️ Yes
Source NVD
Published 2026-02-19
Updated 2026-08-20
Modified 2026-06-17

Affected Packages

Software From version Fixed in
gogs 0.14.1
gogs.io/gogs

Similar Threats

Exploit Protection

Are you running gogs?

CVE-2026-25229 carries CVSS 6.5 Medium rating and a public exploit already exists. BotEraser checks your installation against this and other known CVE records, and blocks IPs associated with exploit activity.

Check My Site For CVE-2026-25229 →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.

Browse related advisories

All advisoriesCVECVE 2026