Skip to main content

bbs-go EUVDEUVD-2026-98936

| CVE-2026-110103 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-10-13 disclosure@vulncheck.com GHSA-rm26-pxjp-76q3
5.1
CVSS 4.0 · Vendor: vulncheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain low-privilege forum account
  2. Delivery
    Upload HTML/SVG with spoofed Content-Type to /api/upload
  3. Exploit
    Server stores file served inline from /res
  4. Execution
    Send crafted /res URL to administrator
  5. Impact
    Admin opens link, script runs on forum origin

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires (1) an authenticated low-privilege account on the bbs-go instance (PR:L) capable of calling POST /api/upload; (2) the attacker forging the multipart Content-Type header to disguise an HTML or SVG file as an image, defeating the pre-patch client-declared type check; and (3) a victim administrator being socially engineered into opening the resulting /res URL (UI:P) so the stored script executes in their session on the forum origin. Limiting factors: no anonymous/unauthenticated path, the payload only fires when a higher-privilege user visits the inline-served file, and instances on versions after 4.4.6 (which sniff real content type via http.DetectContentType and reject SVG) are not affected.

Impact

This is a genuine but moderate-severity issue, correctly rated Medium (CVSS 4.0 base 5.1). The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N) is internally consistent with the description: network-reachable, low attack complexity, but requires an authenticated low-privilege account (PR:L) AND passive victim interaction (UI:P) - an administrator must open an attacker-supplied /res URL. The absence of any direct confidentiality/integrity/availability impact on the vulnerable system (VC/VI/VA:N) with only subsequent-system impact (SC:L/SI:L) reflects a classic stored-XSS escalation path rather than a server compromise. No EPSS score, CISA KEV listing, or public exploit code was provided in the intelligence; this is therefore not a confirmed high-urgency item. A patch is confirmed to exist (commit 5bebf98 and the vendor's VulnCheck advisory), which raises priority for exposed instances that remain unpatched, but the dual requirement of a valid account plus admin interaction limits mass automated exploitation. Net: a real vulnerability worth patching, not an emergency - prioritize behind network-vector, unauthenticated, actively-exploited issues.

Exploit ScenarioDerived

An attacker with an ordinary authenticated forum account uploads a malicious .html or .svg file to POST /api/upload while spoofing the multipart Content-Type to appear as an image, bypassing the client-declared type check. The file is stored and served inline from /res, so the attacker then messages or otherwise lures a forum administrator into opening the URL, executing attacker-controlled JavaScript in the admin's browser on the forum's origin. No public exploit code was identified, but the fixing commit and detailed advisory make the technique reproducible.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 13, 2026

Stored cross-site scripting in bbs-go through 4.4.6 lets an authenticated low-privilege user upload HTML or SVG content by spoofing the multipart Content-Type on POST /api/upload, with the resulting file then served inline from /res. Because the pre-patch upload path trusted the client-declared type rather than sniffing the file's actual bytes, an attacker can plant script-bearing content and socially engineer an administrator into opening the published URL, executing script in the admin's session on the forum's own origin. Exploitation requires a valid account plus victim interaction (CVSS 4.0 base 5.1; assessed CVSS 3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N), and there is no anonymous path; no public exploit code or confirmed active exploitation was identified at time of analysis, and upstream fix code is available in commit 5bebf98 (PR #306) though a tagged patched release is not independently confirmed.

RemediationAI

Upstream fix available (PR/commit); released patched version not independently confirmed - remediate by upgrading bbs-go to a build that includes commit 5bebf98bb9e0ac5162d4f8faf7a65fc0d496a362 (PR https://github.com/mlogclub/bbs-go/pull/306, reference https://github.com/mlogclub/bbs-go/issues/305 and the vendor advisory https://www.vulncheck.com/advisories/bbs-go-through-4.4.6-stored-xss-via-image-upload-content-type), and confirm on your own release channel that the chosen tag contains the upload_service.go content-sniffing change, since the fix landed as a commit/PR rather than a version explicitly cited in the input. Where upgrading is not immediately possible, apply layered compensating controls and accept their trade-offs: (1) restrict or disable the POST /api/upload endpoint for untrusted roles at the reverse proxy or via application authorization so only vetted users can upload - this breaks normal member image posting; (2) configure the object storage or reverse proxy serving /res to send Content-Disposition: attachment plus X-Content-Type-Options: nosniff and a Content-Type of application/octet-stream for uploaded objects, which neutralizes inline script execution but stops images from rendering inline in posts; (3) serve /res from a distinct, cookie-less origin or domain so any script executes outside the forum's origin and cannot reach session cookies, which requires DNS/cookie-scope changes and may break same-origin image embedding; (4) deploy a restrictive Content-Security-Policy (e.g. script-src 'self' with no inline allowances and object-src 'none') to blunt HTML/SVG execution as defense in depth, understanding that CSP is not a substitute for the patch. Also note the same commit adds a one-time installation setup token; operators running exposed, not-yet-installed instances should adopt that build as well to prevent unauthenticated takeover during setup. No vendor-released patch version number beyond the commit reference should be assumed.

Affected VersionsENISA

bbs-go 0 ≤4.4.6

Affected Packages

euvd bbs_go no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

bbs-go is a Go-based community/forum platform. The pre-patch upload handler (internal/handlers/api/upload_handlers.go, lines 36-54) and uploader (internal/pkg/uploader/uploader.go, lines 90-121) accepted the caller-supplied multipart Content-Type and passed it through uploader.NormalizeImageContentType, so the stored object's MIME type and the metadata used when serving it from /res reflected attacker-controlled input rather than the file's real content. This is CWE-79 (Improper Neutralization of Input During Web Page Generation), specifically a stored/persistent XSS realized through an unrestricted file-upload and content-type-confusion chain: the attacker uploads a .html or .svg payload labelled as an image, and the browser later executes the embedded script when the file is retrieved inline from the application origin. The upstream fix replaces trust in the declared type with content sniffing: sniffImageContentType reads the first 512 bytes, calls http.DetectContentType, strips any charset parameter, and validates against an allowlist of raster types (image/jpeg, image/png, image/gif, image/webp, image/bmp, image/x-icon) that deliberately excludes image/svg+xml because SVG can embed script. PutImage and PutImageStream were changed to ignore the incoming contentType parameter entirely and to preserve the sniffed prefix bytes via io.MultiReader so the stored object is not truncated. Notably, the same commit bundles an unrelated hardening change in internal/install/install.go and internal/server/init.go that adds a one-time setup token (generated with crypto/rand, written 0600 to setup-token.txt, compared with crypto/subtle.ConstantTimeCompare, and deleted after installation) to prevent an unauthenticated network caller from racing a legitimate operator to claim the owner account on a freshly exposed, unconfigured instance - this addresses an install-time takeover risk that is separate from the XSS and does not affect the XSS exploitation conditions.

Know when the next one hits your stack

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (vulncheck) PRIMARY 5.1 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
vuln.today AI 5.4 MEDIUM

Authenticated upload needs a low-priv account (PR:L); admin must open the link (UI:R); XSS runs in the victim's browser context, changing scope (S:C) with limited C/I impact and no availability loss.

3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (vulncheck).

CVSS VectorVendor: vulncheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
Passive
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
Low
Subsequent system: Integrity
Low
Subsequent system: Availability
None

DescriptionCVE.org

bbs-go through 4.4.6 contains a stored cross-site scripting vulnerability that allows authenticated users to upload HTML or SVG files by spoofing the multipart Content-Type in POST /api/upload. Attackers can upload script-bearing documents served inline from /res and send their URLs to administrators, executing script on the forum's origin.

Threat Intelligence Overview

EPSS Score
0.2%
Top 88% exploitable
Prevalence
Low
niche open-source Go forum software, limited enterprise footprint
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy