Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain low-privilege forum account
-
DeliveryUpload HTML/SVG with spoofed Content-Type to /api/upload
-
ExploitServer stores file served inline from /res
-
ExecutionSend crafted /res URL to administrator
-
ImpactAdmin 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
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
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.
Primary rating from Vendor (vulncheck).
CVSS VectorVendor: vulncheck
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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
EUVD-2026-98936
GHSA-rm26-pxjp-76q3
NVD
CVE.org
EPSS
Exploit-DB