Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessConnect to vulnerable SDR chat interface
-
DeliveryPost message with crafted quote-breakout URL
-
ExploitMessage stored server-side
-
ExecutionVictim loads chat and message renders
-
ImpactInjected JavaScript executes in victim's browser
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 a running ka9q_ubersdr instance before version 0.1.58 with the chat feature in use, and the ability to submit a chat message that is stored and later rendered to other users. The attacker embeds a URL containing quotation characters so the linkified href attribute breaks out and injects attacker-controlled HTML/JS; delivery is passive because rendering alone triggers execution (no victim click, per the description). Limiting factors: the target must be an unpatched instance whose chat is reachable to the attacker, and a second user must view the chat for impact to occur; if the instance restricts chat to authenticated users, effective privilege rises to PR:L. Impact is confined to client-side script execution in viewers' browsers, not the server. |
| Impact | This is a genuine but modest-severity stored XSS (CWE-79) in the chat rendering of ka9q_ubersdr, a niche hobbyist KA9Q-based web SDR interface. The vendor/NVD CVSS 3.1 vector (AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N = 5.4) is internally consistent with a stored XSS: network-reachable, no privileges asserted, no victim click required (UI:N, confirmed by the description's 'No click on the malicious link was required'), scope change into the victim's browser context (S:C), and limited confidentiality/integrity impact (C:L/I:L). I would rate complexity lower than the vendor's AC:H - breaking out of an href with a quotation character is a well-understood, reliable technique, so AC:L (~6.1) is more defensible; the AC:H choice appears conservative rather than justified. No EPSS score, no CISA KEV listing, and no public exploit code are present in the input, so exploitation status is 'no public exploit identified at time of analysis' - this is not confirmed active exploitation. The only impact ceiling is that the flaw yields client-side script execution (session/UI manipulation of other viewers), not server compromise. Net: a real, patch-worthy bug but a low real-world priority given the tiny deployment footprint and absence of exploitation signals. Note one ambiguity: PR:N assumes chat posting is open to unauthenticated users; if the SDR instance gates chat behind a login, effective privilege would be PR:L - verify against deployment. |
| Exploit ScenarioDerived | An attacker connected to a vulnerable ka9q_ubersdr web SDR instance posts a chat message containing a crafted URL whose quotation characters break out of the generated <a href="..."> attribute and inject additional HTML attributes carrying JavaScript. When any other user's browser later renders the stored message, the script executes automatically with no click required. No public exploit code is identified, but the patched linkifyUrls diff makes the payload construction straightforward. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 25, 2026
Stored cross-site scripting (XSS) in the chat feature of madpsy's ka9q_ubersdr web SDR interface allows an attacker who can post a chat message to execute arbitrary JavaScript in the browsers of every other user who later views that channel in ka9q_ubersdr before 0.1.58. The linkifier that turns chat URLs into anchors does not neutralize quotation characters, so a crafted URL escapes the generated href attribute and injects attacker-controlled HTML attributes; because the payload is persisted server-side and executes on rendering, no click by the victim is required (the assessed vector is CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N, matching the published 5.4 severity). Impact is limited to client-side script execution in viewers' browsers rather than server compromise, and no public exploit code has been identified at time of analysis, although the public fix commit (6aa858da1c030cae11b94c7d6c72322adb9ec60d, PR #114) does document the exact vulnerable pattern.
RemediationAI
Upgrade ka9q_ubersdr to 0.1.58 or later, which contains the vendor-released patch in commit 6aa858da1c030cae11b94c7d6c72322adb9ec60d (pull request https://github.com/madpsy/ka9q_ubersdr/pull/114); the patch escapes quotes in linkified URLs, allowlists only http/https schemes, hardens the HTML escaping helper, and applies CSS.escape() to message IDs. If immediate upgrade is not possible, the most reliable compensating control is to disable or remove the chat feature for untrusted users, since the vulnerability has no server-side exploit path and the chat renderer is the only delivery vector; the trade-off is complete loss of chat functionality. Alternatively, restrict chat to authenticated, trusted operators - note this changes the effective attacker precondition from unauthenticated (PR:N in the assessed vector) to authenticated (PR:L). Because the instance itself is the trust boundary, binding the SDR web UI to localhost or placing it behind an authenticating reverse proxy and blocking direct internet exposure removes the ability of arbitrary remote users to inject messages, at the cost of accessibility. A strict Content-Security-Policy with script-src 'self' and no 'unsafe-inline' will block injected inline event handlers and javascript: payloads, but may break legitimate inline scripts and styles in the application, so it should be validated before enforcement. Filtering chat messages for quote characters or URL-like strings at an intermediary is possible but prone to bypass and breaks legitimate links.
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
ka9q_ubersdr is a browser-based front end for KA9Q-based software-defined radio receivers, and its chat panel is implemented in static/chat-ui.js. Two defects combine here: a linkifyUrls routine used a regular expression to rewrite URLs into '<a href="$1" ...>' anchors without escaping the captured text, and the accompanying escapeHtml helper built output by assigning div.textContent then reading div.innerHTML, which HTML-escapes ampersands and angle brackets but leaves quotation marks untouched. A URL containing a double quote therefore terminates the href attribute early and lets the attacker append arbitrary attributes, including event handlers, into the rendered anchor. CWE-79 (Improper Neutralization of Input During Web Page Generation, i.e. XSS) is the root-cause class; the stored, render-triggered nature of the payload and the fact that injected attributes persist in the page are what make this a persistent XSS rather than reflected. The presence of S:C in the vector reflects that script execution in a viewer's session crosses a trust boundary from the chat data store to the browser origin serving the SDR UI. The upstream fix combines three controls: CSS.escape() on message IDs used in querySelector, an explicit http/https protocol allowlist via URL parsing, and correct manual escaping of &, <, >, " and ' plus replacement of quotes with " inside the generated href.
Know when JavaScript gets its next vulnerability
- 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
AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N
Stored XSS auto-executing on render (UI:N), quote-breakout is a reliable known technique so AC:L; scope changes into victim browser (S:C) with limited C/I and no availability impact.
Primary rating from Vendor (mitre).
CVSS VectorVendor: mitre
DescriptionCVE.org
madpsy ka9q_ubersdr before 0.1.58 has a stored cross-site scripting (XSS) vulnerability in the chat message rendering functionality. User-controlled URLs in chat messages were insufficiently neutralized before being converted into HTML links. Quotation characters could break out of the generated href attribute and introduce attacker-controlled HTML attributes, allowing arbitrary JavaScript to execute in the browser of another user when the stored chat message was rendered. No click on the malicious link was required.
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.
More in JavaScript
View allCommand injection in simple-git, the Node.js library for running git commands and published on npm, affects all releases
Stored DOM-based cross-site scripting in Paella Player's closed-caption rendering path (paella-core before 2.12.11) allo
Authorization bypass in Wiki.js through 2.5.314 allows an authenticated user who has been granted access to at least one
Untrusted git configuration includes reachable through simple-git before 4.0.0 let an attacker execute arbitrary command
Improper memory allocation control in ExifReader before 4.41.1 allows remote attackers to exhaust heap memory and termin
Deeply nested brace patterns cause unbounded recursion in the npm brace-expansion library, exhausting the native stack a
Stack exhaustion in the npm library brace-expansion (all versions prior to 1.1.19, 2.1.5, 3.0.7, and 5.0.10) lets a craf
Server-side request forgery in Wiki.js through 2.5.314 lets an authenticated user who holds page-editing permissions for
The JavaScript library ip-address (npm) fails to treat the NAT64 local-use prefix 64:ff9b:1::/48 as private, so applicat
Authorization bypass in the @grpc/grpc-js-xds package (the xDS/RBAC extension for @grpc/grpc-js) lets a request for one
Cross-family subnet comparisons in the ip-address npm library (all versions before 10.7.1) can cause isInSubnet and isHo
Denial of service in the ip-address JavaScript/npm library (all versions prior to 10.7.1) lets remote attackers stall or
EUVD-2026-86499
GHSA-w3hg-374m-rvgx
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB