Skip to main content

Boteraser | Website and Server Security Solutions

🛡️ CVE-2026-52816 — gogs

⚪ Unknown ✅ No Known Exploit CWE-79 NVD
N/A
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

Gogs's Unauthenticated Jupyter Notebook (ipynb) Sanitizer allows arbitrary data: URIs leading to XSS

Summary

The Jupyter Notebook (ipynb) sanitizer endpoint at POST /-/api/sanitize_ipynb allows arbitrary data: URIs without proper restrictions, potentially leading to Cross-Site Scripting (XSS). The endpoint uses bluemonday.UGCPolicy() with p.AllowURLSchemes("data") which permits all data URI schemes including data:text/html, enabling attackers to inject malicious HTML/JavaScript. Additionally, the endpoint has no authentication middleware, allowing any registered user to exploit this vulnerability.

Severity

High

Affected Versions

All versions using the vulnerable endpoint

Vulnerability Details

  • CVE ID: (To be assigned)
  • Entry Point: POST /-/api/sanitize_ipynb
  • Attack Vector: Network
  • Authentication Required: No (only needs a registered user account)

Impact

An attacker with a registered user account can:

  • Send malicious HTML containing data:text/html URIs to the sanitization endpoint
  • Receive sanitized but attacker-controlled HTML in the response
  • Execute arbitrary JavaScript in the attacker's browser context through XSS
  • Potentially exploit other users if the sanitized output is rendered in their context

The vulnerability has higher severity because:

1. No authentication required (only needs a registered user account)

2. Unlike the safer pattern in internal/markup/sanitizer.go:39 which uses isSafeDataURI to only allow safe image MIME types, this endpoint allows ALL data URIs including HTML

3. The returned HTML can be used to craft XSS attacks

Proof of Concept

Attacker sends a POST request to the sanitization endpoint:

```http

POST /-/api/sanitize_ipynb HTTP/1.1

Host: target.gogs.instance

Content-Type: text/plain

<a href="data:text/html,<script>alert(document.cookie)</script>">click</a>

```

The server returns the sanitized HTML with the data URI preserved:

```html

<a href="data:text/html,<script>alert(document.cookie)</script>">click</a>

```

When this HTML is rendered in a browser, the JavaScript within the data URI will execute, leading to XSS.

Affected Component

File: internal/app/api.go:10-16

```go

func ipynbSanitizer() *bluemonday.Policy {

p := bluemonday.UGCPolicy()

p.AllowAttrs("class", "data-prompt-number").OnElements("div")

p.AllowAttrs("class").OnElements("img")

p.AllowURLSchemes("data") // <-- VULNERABLE: allows all data URIs

return p

}

```

File: cmd/gogs/web.go:681-683 - No authentication middleware

```go

m.Group("/-", func() {

m.Get("/metrics", app.MetricsFilter(), promhttp.Handler())

m.Group("/api", func() {

m.Post("/sanitize_ipynb", app.SanitizeIpynb()) // <-- No auth middleware

})

})

```

Root Cause

1. Unrestricted data URI scheme: The code at internal/app/api.go:14 uses p.AllowURLSchemes("data") without any restriction, unlike the safer implementation in internal/markup/sanitizer.go:39 which uses AllowURLSchemeWithCustomPolicy("data", isSafeDataURI) to only allow safe image MIME types.

2. No authentication: The endpoint at cmd/gogs/web.go:682 does not have any authentication middleware applied, making it accessible to any registered user.

3. Insufficient validation: The sanitization only removes dangerous tags/attributes but preserves data URIs, allowing data:text/html payloads to pass through.

Suggested Fix

Option 1: Use the same safe pattern as internal/markup/sanitizer.go

Replace p.AllowURLSchemes("data") with:

```go

p.AllowURLSchemeWithCustomPolicy("data", isSafeDataURI)

```

Where isSafeDataURI is a function that only allows safe image MIME types (image/png, image/jpeg, image/gif, etc.).

Option 2: Add authentication middleware

Apply appropriate authentication to the endpoint:

```go

m.Post("/sanitize_ipynb", middleware.signIn, app.SanitizeIpynb())

```

Option 3: Disable data URI scheme entirely

If data URIs are not required for ipynb sanitization:

```go

// Remove this line entirely:

// p.AllowURLSchemes("data")

```

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is low, an attacker needs no privileges on the target. A user must be tricked into taking some action. Rated impact: confidentiality none, integrity none, availability none.

CVSS metrics in full

The score comes from this vector: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N/E:P

  • Attack vector: Network — reachable from anywhere that can route to the service.
  • Attack complexity: Low — the attack works reliably, with no preparation.
  • Attack requirements: None — no deployment-specific condition has to hold.
  • Privileges required: None — an unauthenticated stranger can try it.
  • User interaction: Passive — a victim action is involved, but not a deliberate one.
  • Confidentiality impact: None.
  • Integrity impact: None.
  • Availability impact: None.

Weakness class

CVE-2026-52816 is classified as CWE-79: Cross-site Scripting (XSS). User-supplied data is written into a page without escaping, so attacker script runs in the browser of anyone who views it.

Affected software

CVE-2026-52816 is recorded against 2 packages.

  • gogs.io/gogs
  • unknown

Timeline and source

Published on 25 June 2026 and last revised on 21 July 2026. No public exploit is currently recorded for this entry. Record sourced from NVD.

References

github.com (Advisory)
github.com (Web)
github.com (Web)
github.com (Web)

Other advisories for this package

gogs.io/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-79: Cross-site Scripting (XSS)) in other software:

Details

Severity Unknown
CVSS Score N/A
CVSS Vector CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N/E:P
CWE CWE-79
Public Exploit ✅ No
Source NVD
Published 2026-06-25
Updated 2026-08-20
Modified 2026-07-21
Fix URL N/A

Affected Packages

Software From version Fixed in
gogs.io/gogs
unknown

Similar Threats

Free Vulnerability Check

Is your site affected by CVE-2026-52816?

BotEraser helps you identify potentially vulnerable plugins and themes by checking your installation against CVE-2026-52816 and other known CVE records.

Scan My Site Free →

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