openSUSE 16 Security Update : jsoup, re2j (openSUSE-SU-2026:21900-1)

high Nessus Plugin ID 350139

Synopsis

The remote openSUSE host is missing a security update.

Description

The remote openSUSE 16 host has packages installed that are affected by a vulnerability as referenced in the openSUSE- SU-2026:21900-1 advisory.

This update for jsoup, re2j fixes the following issue:

- CVE-2026-75140: The builder copies the entire inherited namespace map on every start element, causing quadratic time and memory complexity, which attackers can exploit to trigger an OutOfMemoryError and terminate the application (bsc#1275912).

Changes for jsoup:

- Upgrade to upstream version 1.23.2 + Improvement: Improved consecutive StreamParser.selectFirst() calls during progressive parsing, so later matches are returned with their parsed contents when earlier selections had left them as parser lookahead. E.g., given <title>One</title><p id=hit>Full</p><p>Next</p>, selecting title and then #hit now advances the partial lookahead and returns <p id=hit>Full</p>, rather than returning an empty <p id=hit></p> before its content is parsed. The updated readiness tracking follows StreamParser's normal emission order across implicit HTML structure and parser recovery.
+ Improvement: Improved XML parser performance and memory use for documents with many nested namespace declarations by recording namespace changes within each element scope (bsc#1275912, CVE-2026-75140).
+ Improvement: Improved W3CDom conversion performance for documents with many nested namespace declarations. The W3C converter now uses the same optimized namespace tracking as the XML parser.
+ Improvement: Improved W3CDom XML conversion to retain processing instructions, comments outside the root element, and CDATA sections, which were previously dropped or converted to text.
+ Improvement: DOM mutation methods, including child insertion and replacement, now reject operations that would create a cycle, such as making a node its own child or moving an ancestor beneath a descendant.
+ Improvement: Added Elements#before(Node), after(Node), prepend(Node), and append(Node) to match the existing HTML string methods.
+ Improvement: Large file-backed uploads through Connection.requestBodyStream(InputStream) now stream directly with the JDK HttpClient on Java 11+, rather than being loaded fully into memory first.
+ Improvement: Extended Java 11+ HTTP client reuse from requests sharing a Jsoup.newSession() to ordinary Jsoup.connect() calls, reducing transport thread and connection setup churn under sustained request loads. Sessions with custom authentication or SSL contexts continue to use their own client.
+ Change: Aligned the XML parser stack depth and lookups to the configured maximum, which now defaults to 512 for both HTML and XML. Use Parser#setMaxDepth(int) to configure.
+ Bugfix: Fixed W3CDom namespace conversion in several cases:
- Namespace declarations and prefixed attributes now carry the correct namespace URI, so namespace-aware DOM lookups work as expected.
- Attributes added after parsing, or included through subtree conversion, now use inherited prefix declarations.
- Namespace declarations now apply regardless of attribute order, and an empty declaration shadows an inherited binding only within its scope.
- With namespace awareness disabled, inherited and undeclared prefixes now receive the declarations needed for XML serialization.
- Valid HTML names that are not XML QNames, such as a:b:c, are normalized. Attributes that still cannot be represented are skipped, and unrepresentable elements no longer change the surrounding tree.
+ Bugfix: Fixed W3CDom conversion of programmatically created or renamed elements whose names can be represented in a jsoup HTML DOM but are not valid XML names, such as 1abc. These names are now normalized (e.g. _1abc) instead of causing a NullPointerException.
+ Bugfix: Fixed XML doctype serialization when a system identifier contains a double quote, which could otherwise produce invalid XML.
+ Bugfix: XML serialization now repairs element and attribute names that start with an invalid character, rather than outputting null elements or dropping attributes. For example, an attribute named 1a is written as _1a. Additional leading underscores keep repaired attribute names unique if they conflict with another attribute.
+ Bugfix: Supplementary Unicode characters are now escaped correctly when serializing with non-UTF, non-ASCII output charsets such as ISO-8859-1. Previously, characters could be emitted unescaped when their low 16-bit value was representable by the configured charset, causing replacement or corruption when the output was encoded.
+ Bugfix: Fixed the JDK HttpClient implementation to accept responses missing a Content-Type header, matching the HttpURLConnection implementation.
+ Bugfix: Fixed HTTP response content-type matching to handle media types case-insensitively and recognize structured +xml suffixes, including vendor-specific media types.
+ Bugfix: HTTP request URL normalization now percent-encodes ASCII control characters, DEL, and embedded fragment delimiters, keeping normalized URLs valid for HTTP requests while preserving existing escapes.
+ Bugfix: Corrected multipart form encoding to percent-escape CR and LF in field names and filenames, matching the HTML form submission specification. Multipart file content-types containing CR or LF are now rejected with a ValidationException.
+ Bugfix: Aligned trailing comment placement with the HTML specification: comments after </body> remain children of the html element, while comments after </html> remain children of the document.
+ Bugfix: When using the optional re2j regular expression engine, memory allocation errors caused by complex selector patterns at match time are now normalized to a ValidationException with a Pattern complexity error message.
+ Bugfix: Fixed parsing of malformed SVG and MathML content so that breakout HTML tags are placed according to the HTML specification.
+ Bugfix: Fixed deeply nested malformed HTML parsing that could lose the document body because stack lookups did not align to the configured maximum parser depth.
+ Bugfix: Aligned RCDATA, RAWTEXT, and script-data parsing with the HTML specification: malformed end tags no longer consume following markup, unclosed title/textarea content stays text through EOF, and custom text tags match exact names.
+ Bugfix: Improved URL validation during HTTP/HTTPS URL resolution and cleaning; resolved URLs without a host are now rejected instead of being accepted based only on their scheme prefix, aligning to RFC 9110. Valid relative links and non-HTTP(S) schemes are unchanged.
+ Bugfix: Redirects with malformed single-slash HTTP locations now use standard URL resolution to align with browsers.
+ Bugfix: Template fragment parsing now handles unmatched </template> tags without throwing a ValidationException.
+ Bugfix: Improved source tracking for adopted formatting elements and malformed markup ending at EOF.
* Changes of 1.23.1 + Improvement: Reduced retained memory when parsing with source position tracking enabled (Parser#setTrackPosition(true)).
Source ranges are now stored in compact parser-owned span records instead of node and attribute user data, and Position objects are created lazily when source ranges are read. This cuts tracked DOM retained size by about 50-60% on representative benchmark documents, while keeping Node#sourceRange(), Element#endSourceRange(), and Attribute#sourceRange() behavior intact.
+ Improvement: Added Element#classList(), an immutable snapshot of an element's class names in attribute order. Use hasClass() when you just need to test for one class, classList() when you want to read or iterate classes without needing a mutable result, and classNames() when you want the existing mutable, deduplicated set that can be written back with classNames(Set). The class APIs now share an HTML-whitespace scanner, which also makes classNames() faster and lighter on allocation, especially when walking many elements without class names.
+ Improvement: Aligned HTML parser scope classification with the current HTML spec for select, foreignObject, and template.
+ Improvement: Simplified the HTML tree builder's scope, implied-end-tag, and special-element checks by caching parser-only options on Tag. That improves HTML parser throughput by about 10% on small inputs and up to about 30% on larger inputs in the benchmark fixtures.
+ Improvement: Improved HTML parser throughput stability by making hot tokeniser scan paths compile more predictably.
+ Improvement: <noscript> fallback markup is now parsed into an inspectable DOM subtree in both the document head and body.
The fallback acts as a contained parsing island, so malformed markup cannot disrupt the surrounding document structure, while normal HTML tokenization still applies within it. This also improves round-trip serialization.
+ Improvement: Improved redirect credential handling as a defense-in-depth measure: explicit authorization headers and request cookies are no longer forwarded across origins, reducing exposure through open redirects and aligning with HTTP guidance. Cookies managed by a CookieStore continue to follow their configured scope.
+ Improvement: Elements can now append their outer HTML, including their own tags, directly to an Appendable with Node#outerHtml(Appendable), without first creating a String.
This complements Element#html(Appendable), which appends inner HTML only.
+ Improvement: Aligned CDATA tokenization with the HTML spec:
CDATA syntax in HTML content is parsed as a bogus comment, while it remains supported in SVG, MathML, and XML. Also improved namespace-aware fragment parsing so SVG and MathML contexts, HTML integration points, and context-sensitive tokenizer states are handled correctly.
+ Improvement: When using the optional re2j regular expression engine, stack overflows caused by complex selector patterns are now normalized to a ValidationException with a Pattern complexity error message.
+ Bugfix: Fixed HTML parsing of mixed-case RCDATA end tags after tag-shaped text. For example, <title><p>Foo</TiTLE> and <textarea><img src=x></TeXtArEa> now keep the tag-shaped content as text instead of promoting it to markup.
+ Bugfix: Fixed W3CDom XML conversion so plain XML elements don't serialize with the reserved XML namespace as the default namespace. Explicit XML namespaces and xml:* attributes are still preserved.
+ Bugfix: Preserve control characters in parsed tag names.
+ Bugfix: Updated HTTP redirects to follow the specification:
307 and 308 preserve the request method and content, 301 and 302 only change POST to GET, and Location is followed only for 301, 302, 303, 307, and 308 responses. Streamed request bodies are not buffered; if an automatic redirect requires replaying one, execution fails, so the caller can resend with a fresh stream.
+ Bugfix: Corrected the Cleaner's same-site link detection to compare hostnames rather than URL prefixes when applying rel=nofollow.
+ Build change: Cleaned up the Maven build for the multi-release JAR so Java 8 and Java 11+ sources compile as separate source sets. This avoids spurious Java 8 compiler warnings from newer-language overlay sources, keeps long-running parser checks behind an explicit profile, and preserves the same published artifacts and runtime behavior.
+ Build change: Improved parallelism and tuned timing in our integration tests, so that a full mvn clean verify drops from ~ 1m18s to ~ 21 seconds.
* Changes of 1.22.2 + Improvement: Expanded and clarified NodeTraversor support for in-place DOM rewrites during NodeVisitor.head(). Current-node edits such as remove, replace, and unwrap now recover more predictably, while traversal stays within the original root subtree. This makes single-pass tree cleanup and normalization visitors easier to write, for example when unwrapping presentational elements or replacing text nodes as you walk the DOM.
+ Documentation: clarified that a configured Cleaner may be reused across concurrent threads, and that shared Safelist instances should not be mutated while in use.
+ Improvement: Updated the default HTML TagSet for current HTML elements: added dialog, search, picture, and slot; made ins, del, button, audio, video, and canvas inline by default (Tag#isInline(), aligned to phrasing content in the spec); and added readable Element.text() boundaries for controls and embedded objects via the new Tag.TextBoundary option. This improves pretty-printing and keeps normalized text from running adjacent words together.
+ Android (R8/ProGuard): added a rule to ignore the optional re2j dependency when not present.
+ Bugfix: Fixed a NodeTraversor regression in 1.21.2 where removing or replacing the current node during head() could revisit the replacement node and loop indefinitely. The traversal docs now also clarify which inserted nodes are visited in the current pass.
+ Bugfix: Parsing during charset sniffing no longer fails if an advisory available() call throws IOException, as seen on JDK 8 HttpURLConnection.
+ Bugfix: Cleaner no longer makes relative URL attributes in the input document absolute when cleaning or validating a Document. URL normalization now applies only to the cleaned output, and Safelist.isSafeAttribute() is side effect free.
+ Bugfix: Cleaner no longer duplicates enforced attributes when the input Document preserves attribute case. A case-variant source attribute is now replaced by the enforced attribute in the cleaned output.
+ Bugfix: If a per-request SOCKS proxy is configured, jsoup now avoids using the JDK HttpClient, because the JDK would silently ignore that proxy and attempt to connect directly.
Those requests now fall back to the legacy HttpURLConnection transport instead, which does support SOCKS.
+ Bugfix: Connection.Response.streamParser() and DataUtil.streamParser(Path, ...) could fail on small inputs without a declared charset, if the initial 5 KB charset sniff fully consumed the input and closed it before the stream parse began.
+ Bugfix: In XML mode, doctypes with an internal subset, such as <!DOCTYPE root [<!ENTITY name value>]>, now round-trip correctly. The subset is preserved as raw text only; entities are not expanded and external DTDs are not loaded.
+ Build change: Migrated the integration test server from Jetty to Netty, which actively maintains support for our minimum JDK target (8).
* Changes of 1.22.1 + Improvement: Added support for using the re2j regular expression engine for regex-based CSS selectors (e.g.
[attr~=regex], :matches(regex)), which ensures linear-time performance for regex evaluation. This allows safer handling of arbitrary user-supplied query regexes. To enable, add the com.google.re2j dependency to your classpath, e.g.:
<dependency> <groupId>com.google.re2j</groupId> <artifactId>re2j</artifactId> <version>1.8</version> </dependency> (If you already have that dependency in your classpath, but you want to keep using the Java regex engine, you can disable re2j via System.setProperty(jsoup.useRe2j, false).) You can confirm that the re2j engine has been enabled correctly by calling Regex.usingRe2j().
+ Improvement: Added an instance method Parser#unescape(String, boolean) that unescapes HTML entities using the parser's configuration (e.g. to support error tracking), complementing the existing static utility Parser.unescapeEntities(String, boolean).
+ Improvement: Added a configurable maximum parser depth (to limit the number of open elements on stack) to both HTML and XML parsers. The HTML parser now defaults to a depth of 512 to match browser behavior, and protect against unbounded stack growth, while the XML parser keeps unlimited depth by default, but can opt into a limit via Parser.setMaxDepth().
+ Build: added CI coverage for JDK 25.
+ Build: added a CI fuzzer for contextual fragment parsing (in addition to existing full body HTML and XML fuzzers).
+ Change: Set a removal schedule of jsoup 1.24.1 for previously deprecated APIs.
+ Bugfix: Previously cached child Elements of an Element were not correctly invalidated in Node#replaceWith(Node), which could lead to incorrect results when subsequently calling Element#children().
+ Bugfix: Attribute selector values are now compared literally without trimming. Previously, jsoup trimmed whitespace from selector values and from element attribute values, which could cause mismatches with browser behavior (e.g. [attr= foo ]).
Now matches align with the CSS specification and browser engines.
+ Bugfix: When using the JDK HttpClient, any system default proxy (ProxySelector.getDefault()) was ignored. Now, the system proxy is used if a per-request proxy is not set.
+ Bugfix: A ValidationException could be thrown in the adoption agency algorithm with particularly broken input. Now logged as a parse error.
+ Bugfix: Null characters in the HTML body were not consistently removed; and in foreign content were not correctly replaced.
+ Bugfix: An IndexOutOfBoundsException could be thrown when parsing a body fragment with crafted input. Now logged as a parse error.
+ Bugfix: When using StructuralEvaluators (e.g., a parent child selector) across many retained threads, their memoized results could also be retained, increasing memory use. These results are now cleared immediately after use, reducing overall memory consumption.
+ Bugfix: Cloning a Parser now preserves any custom TagSet applied to the parser.
+ Bugfix: Custom tags marked as Tag.Void now parse and serialize like the built-in void elements: they no longer consume following content, and the XML serializer emits the expected self-closing form.
+ Bugfix: The <br> element is once again classified as an inline tag (Tag.isBlock() == false), matching common developer expectations and its role as phrasing content in HTML, while pretty-printing and text extraction continue to treat it as a line break in the rendered output.
+ Bugfix: Fixed an intermittent truncation issue when fetching and parsing remote documents via Jsoup.connect(url).get(). On responses without a charset header, the initial charset sniff could sometimes (depending on buffering / available() behavior) be mistaken for end-of-stream and a partial parse reused, dropping trailing content.
+ Bugfix: TagSet copies no longer mutate their template during lazy lookups, preventing cross-thread ConcurrentModificationException when parsing with shared sessions.
+ Bugfix: Fixed parsing of <svg> foreignObject content nested within a <p>, which could incorrectly move the HTML subtree outside the SVG.
+ Change: Deprecated internal helper org.jsoup.internal.Functions (for removal in v1.23.1). This was previously used to support older Android API levels without full java.util.function coverage; jsoup now requires core library desugaring so this indirection is no longer necessary.
* Changes of 1.21.2 + Change: Deprecated internal (yet visible) methods Normalizer#normalize(String, bool) and Attribute#shouldCollapseAttribute(Document.OutputSettings).
These will be removed in a future version.
+ Change: Deprecated Connection#sslSocketFactory(SSLSocketFactory) in favor of the new Connection#sslContext(SSLContext). Using sslSocketFactory will force the use of the legacy HttpUrlConnection implementation, which does not support HTTP/2.
+ Improvement: When pretty-printing, if there are consecutive text nodes (via DOM manipulation), the non-significant whitespace between them will be collapsed.
+ Improvement: Updated Connection.Response#statusMessage() to return a simple loggable string message (e.g. OK) when using the HttpClient implementation, which doesn't otherwise return any server-set status message.
+ Improvement: Attributes#size() and Attributes#isEmpty() now exclude any internal attributes (such as user data) from their count. This aligns with the attributes' serialized output and iterator.
+ Improvement: Added Connection#sslContext(SSLContext) to provide a custom SSL (TLS) context to requests, supporting both the HttpClient and the legacy HttUrlConnection implementations.
+ Improvement: Performance optimizations for DOM manipulation methods including when repeatedly removing an element's first child (element.child(0).remove()), and when using Parser#parseBodyFragement() to parse a large number of direct children.
+ Bugfix: When parsing from an InputStream and a multibyte character happened to straddle a buffer boundary, the stream would not be completely read.
+ Bugfix: In NodeTraversor, if a last child element was removed during the head() call, the parent would be visited twice.
+ Bugfix: Cloning an Element that has an Attributes object would add an empty internal user-data attribute to that clone, which would cause unexpected results for Attributes#size() and Attributes#isEmpty().
+ Bugfix: In a multithreaded application where multiple threads are calling Element#children() on the same element concurrently, a race condition could happen when the method was generating the internal child element cache (a filtered view of its child nodes). Since concurrent reads of DOM objects should be threadsafe without external synchronization, this method has been updated to execute atomically.
+ Bugfix: When parsing HTML with svg:script elements in SVG elements, don't enter the Text insertion mode, but continue to parse as foreign content. Otherwise, misnested HTML could then cause an IndexOutOfBoundsException.
+ Bugfix: Malformed HTML could throw an IndexOutOfBoundsException during the adoption agency.
* Changes of 1.21.1 + Change: Removed previously deprecated methods.
+ Change: Deprecated the :matchText pseduo-selector due to its side effects on the DOM; use the new ::textnode selector and the Element#selectNodes(String css, Class<T> type) method instead.
+ Change: Deprecated Connection.Response#bufferUp() in lieu of Connection.Response#readFully() which can throw a checked IOException.
+ Change: Deprecated internal methods Validate#ensureNotNull(Object) (replaced by typed Validate#expectNotNull(T)); protected HTML appenders from Attribute and Node.
+ Change: If you happen to be using any of the deprecated methods, please take the opportunity now to migrate away from them, as they will be removed in a future release.
+ Improvement: Enhanced the Selector to support direct matching against nodes such as comments and text nodes. For example, you can now find an element that follows a specific comment:
::comment:contains(prices) + p will select p elements immediately after a <!-- prices: --> comment. Supported types include ::node, ::leafnode, ::comment, ::text, ::data, and ::cdata. Node contextual selectors like ::node:contains(text), :matches(regex), and :blank are also supported. Introduced Element#selectNodes(String css) and Element#selectNodes(String css, Class<T> nodeType) for direct node selection.
+ Improvement: Added TagSet#onNewTag(Consumer<Tag> customizer):
register a callback that's invoked for each new or cloned Tag when it's inserted into the set. Enables dynamic tweaks of tag options (for example, marking all custom tags as self-closing, or everything in a given namespace as preserving whitespace).
+ Improvement: Made TokenQueue and CharacterReader autocloseable, to ensure that they will release their buffers back to the buffer pool, for later reuse.
+ Improvement: Added Selector#evaluatorOf(String css), as a clearer way to obtain an Evaluator from a CSS query. An alias of QueryParser.parse(String css).
+ Improvement: Custom tags (defined via the TagSet) in a foreign namespace (e.g. SVG) can be configured to parse as data tags.
+ Improvement: Added NodeVisitor#traverse(Node) to simplify node traversal calls (vs. importing NodeTraversor).
+ Improvement: Updated the default user-agent string to improve compatibility.
+ Improvement: The HTML parser now allows the specific text-data type (Data, RcData) to be customized for known tags.
(Previously, that was only supported on custom tags.) + Improvement: Added Connection.Response#readFully() as a replacement for Connection.Response#bufferUp() with an explicit IOException. Similarly, added Connection.Response#readBody() over Connection.Response#body(). Deprecated Connection.Response#bufferUp().
+ Improvement: When serializing HTML, the < and > characters are now escaped in attributes. This helps prevent a class of mutation XSS attacks.
+ Improvement: Changed Connection to prefer using the JDK's HttpClient over HttpUrlConnection, if available, to enable HTTP/2 support by default. Users can disable via
-Djsoup.useHttpClient=false.
+ Bugfix: The contents of a script in a svg foreign context should be parsed as script data, not text.
+ Bugfix: Tag#isFormSubmittable() was updating the Tag's options.
+ Bugfix: The HTML pretty-printer would incorrectly trim whitespace when text followed an inline element in a block element.
+ Bugfix: Custom tags with hyphens or other non-letter characters in their names now work correctly as Data or RcData tags. Their closing tags are now tokenized properly.
+ Bugfix: When cloning an Element, the clone would retain the source's cached child Element list (if any), which could lead to incorrect results when modifying the clone's child elements.
* Changes of 1.20.1 + Change: To better follow the HTML5 spec and current browsers, the HTML parser no longer allows self-closing tags (<foo />) to close HTML elements by default. Foreign content (SVG, MathML), and content parsed with the XML parser, still supports self-closing tags. If you need specific HTML tags to support self-closing, you can register a custom tag via the TagSet configured in Parser.tagSet(), using Tag#set(Tag.SelfClose). Standard void tags (such as <img>, <br>, etc.) continue to behave as usual and are not affected by this change.
+ Change: Th ...

Please note that the description has been truncated due to length. Please refer to vendor advisory for the full description.

Tenable has extracted the preceding description block directly from the SUSE security advisory.

Note that Nessus has not tested for this issue but has instead relied only on the application's self-reported version number.

Solution

Update the affected jsoup, jsoup-javadoc, re2j and / or re2j-javadoc packages.

See Also

https://bugzilla.suse.com/1275912

https://www.suse.com/security/cve/CVE-2026-75140

Plugin Details

Severity: High

ID: 350139

File Name: openSUSE-2026-21900-1.nasl

Version: 1.1

Type: Local

Agent: unix

Published: 9/25/2026

Updated: 9/25/2026

Supported Sensors: Nessus Agent, Continuous Assessment, Nessus

Risk Information

VPR

Risk Factor: Low

Score: 3

Percentile: 23.61

CVSS v2

Risk Factor: High

Base Score: 7.8

Temporal Score: 5.8

Vector: CVSS2#AV:N/AC:L/Au:N/C:N/I:N/A:C

CVSS Score Source: CVE-2026-75140

CVSS v3

Risk Factor: High

Base Score: 7.5

Temporal Score: 6.5

Vector: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Temporal Vector: CVSS:3.0/E:U/RL:O/RC:C

CVSS v4

Risk Factor: High

Base Score: 8.7

Threat Score: 6.6

Threat Vector: CVSS:4.0/E:U

Vector: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Vulnerability Information

CPE: cpe:/o:novell:opensuse:16.0, p-cpe:/a:novell:opensuse:jsoup-javadoc, p-cpe:/a:novell:opensuse:jsoup, p-cpe:/a:novell:opensuse:re2j-javadoc, p-cpe:/a:novell:opensuse:re2j

Required KB Items: Host/local_checks_enabled, Host/cpu, Host/SuSE/release, Host/SuSE/rpm-list

Exploit Ease: No known exploits are available

Patch Publication Date: 9/21/2026

Vulnerability Publication Date: 8/20/2026

Reference Information

CVE: CVE-2026-75140