CVE-2026-73492
lowpriority · track · 0EPSS 0.004 · 33 %ileEUUSEPSS · scored 2026-10-27
Loofah is a general library for manipulating and transforming HTML/XML documents and fragments, built on top of Nokogiri. From 2.25.0 until 2.25.2, Loofah::HTML5::Scrub.allowed_uri? does not reject javascript: or vbscript: URIs whose scheme is split by semicolon-less numeric character references such as :, 	, 
, or 
. CGI.unescapeHTML leaves these references encoded, so allowed_uri? reports the URL safe even though a browser decodes an encoded colon or strips encoded whitespace and executes the resulting URI scheme. This issue affects only callers that pass HTML-encoded strings directly to allowed_uri?; Loofah's default sanitize() path is not affected. This issue is fixed in version 2.25.2.
cvss
Technical severity, 0–10. One row per scoring source.
base score 0–10 · higher = more severe · hover a vector to decode
ssvc
A stakeholder decision — act, attend, or track — from exploitation and impact.
weaknesses
The CWE weakness classes this flaw belongs to.
affected products (2)
Products and version ranges known to be affected.
advisories (1)
Vendor and ecosystem advisories describing this.
- GHSA-5qhf-9phg-95m2Loofah `allowed_uri?` does not detect `javascript:` URIs split by numeric character references without semicolons2026-07-21ghsa · osvUS
## Summary `Loofah::HTML5::Scrub.allowed_uri?` does not correctly reject `javascript:` or `vbscript:` URIs when the scheme is split by a numeric character reference that has no trailing semicolon. A browser decodes such references and resolves the URL to an executable `javascript:` scheme, while `allowed_uri?` reports it safe. This is a bypass of the fix for [GHSA-46fp-8f5p-pf2m](https://github.com/flavorjones/loofah/security/advisories/GHSA-46fp-8f5p-pf2m), which handled numeric character references with a trailing `;` (`	`, ` `, ` `) but did not cover the forms without semicolons. ## Details `allowed_uri?` decodes HTML entities with `CGI.unescapeHTML`, which decodes numeric character references only when they carry a trailing `;`. A reference without a semicolon such as `:` (colon) or `	` (tab) is left literal, so the scheme-detection check finds no scheme, and the method falls through to its scheme-less path and returns `true`. A browser, however, decodes numeric character references even without a trailing semicolon. An encoded colon such as `:` becomes the `:` scheme separator, so `javascript:alert(1)` resolves to `javascript:alert(1)`. Encoded whitespace such as `	` (tab) is decoded and then stripped from the URL, rejoining the surrounding text, so `java	script:alert(1)` also resolves to `javascript:alert(1)`. In both cases the URL executes while `allowed_uri?` approved it as safe. Note that Loofah's default `sanitize()` path is **not** affected, because Nokogiri decodes or entity-escapes HTML entities during parsing before Loofah evaluates the URI protocol. This issue only affects callers of the public `allowed_uri?` string-level helper that pass it HTML-encoded strings. ## Impact Callers that validate a user-controlled URL with `Loofah::HTML5::Scrub.allowed_uri?` and then render the approved value into an `href` or other browser-interpreted URI attribute may be vulnerable to cross-site scripting (XSS). This includes applications that call `allowed_uri?` directly, as well as higher-level features built on top of it, such as Action Text 8.2's markdown link validation. ## Mitigation Upgrade to Loofah >= 2.25.2. ## Credit Responsibly reported by GitHub user @MoonFuji.
also known as (2)
Other names and identifiers for this entity.
sources
Which sources assert this record, and when.
references (12)
External citations — patches, advisories, analysis.
- https://github.com/flavorjones/loofah/commit/f1be9d893b5a8dd79240441a912d8897e74c38c0cnnvd
- https://github.com/flavorjones/loofah/pull/308cnnvd
- https://github.com/flavorjones/loofah/releases/tag/v2.25.2cnnvd
- https://github.com/flavorjones/loofah/security/advisories/GHSA-5qhf-9phg-95m2cnnvd
- https://github.com/flavorjones/loofah/commit/f1be9d893b5a8dd79240441a912d8897e74c38c0enisa_euvd
- https://github.com/flavorjones/loofah/pull/308enisa_euvd
- https://github.com/flavorjones/loofah/releases/tag/v2.25.2enisa_euvd
- https://github.com/flavorjones/loofah/security/advisories/GHSA-5qhf-9phg-95m2enisa_euvd
Attackers weaponise vulnerabilities like this against internet-exposed services. See what is exposed on your perimeter with a free passive scan.
Free scan