Skip to main content

jsoup EUVDEUVD-2026-54153

| CVE-2026-71497 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-08-06 https://github.com/jhy/jsoup GHSA-pmhh-3w7g-xqp8
4.7
CVSS 3.1 · Vendor: https://github.com/jhy/jsoup
Share

Severity by source

Vendor (https://github.com/jhy/jsoup) PRIMARY
4.7 MEDIUM
AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N
vuln.today AI
4.7 MEDIUM

AC:H reflects dual non-default preconditions (custom Safelist + raw-text elements); S:C captures cross-origin XSS; no auth required (PR:N) and no server-side availability impact.

3.1 AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
SUSE
MEDIUM
qualitative
Red Hat
4.7 MEDIUM
qualitative

Primary rating from Vendor (https://github.com/jhy/jsoup).

CVSS VectorVendor: https://github.com/jhy/jsoup

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
Required
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

3
Source Code Evidence Fetched
Aug 06, 2026 - 21:36 vuln.today
Analysis Generated
Aug 06, 2026 - 21:36 vuln.today
CVE Published
Aug 06, 2026 - 21:09 github-advisory
MEDIUM 4.7

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 2,199 maven packages depend on org.jsoup:jsoup (371 direct, 1,836 indirect)

Ecosystem-wide dependent count for version 1.14.3.

DescriptionCVE.org

When a custom Safelist permits certain raw-text elements, jsoup may incorrectly sanitize malformed HTML containing a tag name that ends in a control character. The tag may acquire the parsing behavior of a different element, causing content that should remain text to be emitted as active markup after serialization and potentially allowing XSS.

jsoup’s built-in Safelists are unaffected.

Patches

Upgrade to jsoup 1.23.1.

Workarounds

Until upgrading, do not permit raw-text elements in custom Safelists used to clean untrusted HTML.

Additional security considerations

This fix addresses malformed tag-name handling only.

Permitting raw-text elements in a custom Safelist does not make their contents inherently safe. For example, applications that permit style must apply appropriate CSS safeguards separately, because jsoup does not parse or sanitize CSS.

AnalysisAI

HTML sanitization bypass in jsoup versions 1.14.3 through 1.23.0 allows cross-site scripting when applications deploy a custom Safelist that explicitly permits raw-text elements. The parser's tag-name normalization trimmed trailing control characters (e.g., U+001E) from malformed tag names, causing a crafted element to acquire the parsing behavior of a recognized raw-text element; content intended to remain escaped text was then serialized as active markup, bypassing sanitization. jsoup's built-in Safelists are unaffected, and no public exploit or CISA KEV listing has been identified at time of analysis.

Technical ContextAI

jsoup (Maven: org.jsoup:jsoup) is a widely used Java library for HTML parsing and sanitization. Its Cleaner component applies Safelist rules to strip disallowed elements and attributes from untrusted HTML. Raw-text elements - script, style, textarea, title, xmp - are special: browsers treat their content as raw text rather than nested markup. The root cause (CWE-79) resided in two locations in the parser: Token.java applied ParseSettings.normalName() to tag names during tokenization, and TagSet.java called tagName.trim() unconditionally in Tag.valueOf(). A tag name like template (template plus ASCII Record Separator, U+001E) would be trimmed to template at serialization time, causing the parser to assign template's raw-text element semantics. The Safelist checked the original malformed name, which might pass as an allowed tag, while the tree builder treated the normalized name as a structurally different element - closing the gap between what the sanitizer approved and what the browser rendered. The fix (commit 92f1aca5) replaces ParseSettings.normalName() with lowerCase() in Token.java so control characters survive tree construction, and restricts the trim() call in TagSet.java to public API entry points only, where tokenizer-produced names are already delimited.

RemediationAI

Upgrade to jsoup 1.23.1 (vendor-released patch confirmed via GHSA-pmhh-3w7g-xqp8 and https://github.com/jhy/jsoup/releases/tag/jsoup-1.23.1); the underlying fix is in commit 92f1aca552548b484bc7d4b94c51e48b8e6eca70. If an immediate upgrade is not feasible, the vendor-documented workaround is to remove all raw-text elements from any custom Safelist used to process untrusted HTML - specifically, do not call addTags() with script, style, textarea, title, or xmp on a Safelist applied to user-controlled input; this eliminates the vulnerable code path at the cost of losing those element types in sanitized output. The vendor additionally notes that even after patching, permitting style in a custom Safelist requires separate CSS sanitization, because jsoup does not parse or validate CSS content.

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise High Performance Computing 15 SP7 Affected
SUSE Linux Enterprise Module for Development Tools 15 SP7 Affected
SUSE Linux Enterprise Server 15 SP7 Affected
SUSE Linux Enterprise Server 16.0 Affected

Share

EUVD-2026-54153 vulnerability details – vuln.today

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