Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft markup with javascript:/data: in action/cite/poster/src attribute
-
DeliverySubmit to app using dom-sanitizer ≤1.0.15
-
ExploitSanitizer passes payload (only href checked)
-
ExecutionStored/reflected into page served to victim
-
PersistVictim views page and submits form
-
ImpactScript executes in victim browser context
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 that a host application uses rhukster/dom-sanitizer ≤1.0.15 to sanitize untrusted HTML AND relies on it to block dangerous URL schemes. The specific gap is that DOMSanitizer::isDangerousUrl() only scheme-validated href and xlink:href, so a javascript: or non-image data: URI placed in any other allow-listed URL-bearing attribute (action, cite, poster, src, srcset, background) bypassed the check - the headline case being a form action, which yields a complete submittable form since form/button/input/type are all allow-listed. Limiting factors: the attacker needs the privilege to submit content that passes through the sanitizer (PR:L), and a victim must interact (UI:P) - typically viewing the stored content and submitting the crafted form for the payload to fire. Applications not using this library, or not depending on its URL-scheme filtering, are unaffected. |
| Impact | The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:P) scores 5.1 (medium), and the E:P modifier plus the input's POC signal align - a proof-of-concept exists (published in the GHSA-mrpv-6x26-mf6c advisory) but there is no public exploit identified in the sense of active exploitation, and this CVE is not in CISA KEV. No EPSS score is provided. The signals are internally consistent: this is a genuine but modest-impact flaw, not a high-CVSS/low-real-risk mismatch nor a KEV-grade priority. The core caveat is architectural: dom-sanitizer is a security control (an HTML/DOM sanitizer), so a bypass is only exploitable to the extent that a downstream application relies on this library to neutralize untrusted content - the impact is entirely dependent on host-application context, which the CVE does not and cannot enumerate. Attack vector is network and complexity is low, but exploitation requires that attacker-supplied markup actually flows through DOMSanitizer and is later rendered/submitted by a victim (UI:P), bounding real-world severity to the medium range the vendor assigned. |
| Exploit ScenarioDerived | An attacker submits content containing a URL-bearing attribute other than a hyperlink - most notably a complete, submittable |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 01, 2026
Cross-site scripting in rhukster/dom-sanitizer through 1.0.15 lets an attacker who can submit HTML that the library sanitizes slip script-capable URLs into attributes the filter never checked - form action, cite, poster, src, srcset, and background - because DOMSanitizer::isDangerousUrl() only scheme-validated href and xlink:href. The headline case is a form action="javascript:..." that survives end-to-end as a complete, submittable form (form, button/input and type are all allow-listed), firing when a victim views the stored content and interacts with it. Publicly available exploit code exists (published alongside the GHSA-mrpv-6x26-mf6c advisory); there is no confirmed active exploitation and this CVE is not in CISA KEV. Vendor-released patch: 1.0.16.
RemediationAI
Upgrade rhukster/dom-sanitizer to 1.0.16 (vendor-released patch; the fix commit is 4623b565d060bc02ca5a07d8c8241fe28e2edfda, release tag https://github.com/rhukster/dom-sanitizer/releases/tag/1.0.16) and redeploy - via Composer this is typically composer require rhukster/dom-sanitizer:^1.0.16 followed by a dependency update. Consult the advisory at https://github.com/rhukster/dom-sanitizer/security/advisories/GHSA-mrpv-6x26-mf6c for confirmation and the referenced patch diff for the exact code-level change. If upgrading immediately is not possible, compensating controls: (1) add a post-serialization output pass that strips or rewrites any URL-bearing attribute value whose scheme is javascript: or a non-image data: MIME across the full attribute set (href, xlink:href, action, cite, poster, src, srcset, background) and re-splits srcset candidates - this duplicates the library's intended logic and risks drifting from the official fix; (2) tighten the element allow-list so form/action (and any other URL-bearing attribute carriers) cannot be emitted from sanitized untrusted content, accepting the functional loss of embedded forms; (3) restrict who may submit HTML that passes through the sanitizer to trusted/authenticated editors only, and encode untrusted fields as plain text rather than markup, which reduces the attack surface but does not fix the underlying filter gap; and (4) apply output encoding at render time as a defense-in-depth layer, noting it may alter intended rich-content rendering. No vendor-released workaround beyond the version upgrade is documented in the available data.
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
rhukster/dom-sanitizer is a PHP allow-list HTML sanitizer (PHP DOM extension based) intended to neutralize untrusted HTML before it is stored or rendered. CVE-2026-103686 is CWE-79 (improper neutralization of input during web page generation), rooted in an incomplete sanitization policy rather than a parsing bug: the guard DOMSanitizer::isDangerousUrl() was gated on href/xlink:href only (see the pre-patch check if (!in_array(strtolower($attr_name), ['href', 'xlink:href']))), while the element/attribute allow-list admits many more URL-bearing attributes - action, cite, poster, src, srcset, background. A javascript: or a script-capable data: MIME (e.g. data:text/html;base64,...) placed in any of those attributes therefore bypassed scheme validation entirely. The data: case cannot be judged by substring matching because Base64 encoding hides markers like onload or <script>; the fixed policy is scheme-level, allowing only inert image types through. The patch also hardens the post-serialization regex constants (JAVASCRIPT_ATTR, SNEAKY_ONLOAD, SNEAKY_DATA_URL) to cover the full URL attribute set and, for srcset, splits comma-separated candidates so a scheme hidden in a later candidate is still judged individually. The advisories GHSA-mrpv-6x26-mf6c (this issue) and GHSA-wcj2-r6vg-rm97 (the earlier data: heuristic bypass) are referenced in the fix comments.
Know when PHP 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:P
Authenticated content submitter (PR:L) injects script that runs in another user's browser (S:C, UI:R required); XSS yields limited confidentiality and integrity, no availability impact.
Primary rating from Vendor (VulDB).
CVSS VectorVendor: VulDB
Lifecycle Timeline
3DescriptionCVE.org
A flaw has been found in rhukster dom-sanitizer up to 1.0.15. Impacted is the function DOMSanitizer::isDangerousUrl of the file src/DOMSanitizer.php of the component URL Validation. This manipulation causes cross site scripting. It is possible to initiate the attack remotely. The exploit has been published and may be used. Upgrading to version 1.0.16 is recommended to address this issue. Patch name: 4623b565d060bc02ca5a07d8c8241fe28e2edfda. It is suggested to upgrade the affected component.
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.
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
EUVD-2026-90847
GHSA-qjw9-86r9-fqqc
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB