VYPR
High severity8.7NVD Advisory· Published Apr 17, 2026· Updated Apr 17, 2026

CVE-2026-40262

CVE-2026-40262

Description

Note Mark is an open-source note-taking application. In versions 0.19.1 and prior, the asset delivery handler serves uploaded files inline and relies on magic-byte detection for content type, which does not identify text-based formats such as HTML, SVG, or XHTML. These files are served with an empty Content-Type, no X-Content-Type-Options: nosniff header, and inline disposition, allowing browsers to sniff and render active content. An authenticated user can upload an HTML or SVG file containing JavaScript as a note asset, and when a victim navigates to the asset URL, the script executes under the application's origin with access to the victim's authenticated session and API actions. This issue has been fixed in version 0.19.2.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
github.com/enchant97/note-mark/backendGo
< 0.0.0-20260411145018-6bb62842ccb90.0.0-20260411145018-6bb62842ccb9

Affected products

1

Patches

1
6bb62842ccb9

(backend) prevent XSS attack from opening attachment

https://github.com/enchant97/note-markLeo SprattApr 10, 2026via ghsa
1 file changed · +12 4
  • backend/handlers/assets.go+12 4 modified
    @@ -144,13 +144,21 @@ func (h AssetsHandler) GetNoteAssetContentByID(
     		}
     		return &huma.StreamResponse{
     			Body: func(ctx huma.Context) {
    -				ctx.SetHeader("Content-Type", info.MimeType)
    +				ctx.SetHeader("X-Content-Type-Options", "nosniff")
    +				if info.MimeType == "" || info.MimeType == "text/html" || info.MimeType == "image/svg+xml" {
    +					ctx.SetHeader("Content-Type", "application/octet-stream")
    +					ctx.SetHeader(
    +						"Content-Disposition",
    +						fmt.Sprintf("attachment; filename=\"%s\"", asset.Name))
    +				} else {
    +					ctx.SetHeader("Content-Type", info.MimeType)
    +					ctx.SetHeader(
    +						"Content-Disposition",
    +						fmt.Sprintf("inline; filename=\"%s\"", asset.Name))
    +				}
     				ctx.SetHeader(
     					"Last-Modified",
     					core.TimeIntoHTTPFormat(info.LastModified))
    -				ctx.SetHeader(
    -					"Content-Disposition",
    -					fmt.Sprintf("inline; filename=\"%s\"", asset.Name))
     				writer := ctx.BodyWriter()
     				io.Copy(writer, stream)
     				stream.Close()
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

5

News mentions

0

No linked articles in our index yet.