Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach POST /api/v1/convert/svg/pdf without authentication
-
DeliverySubmit SVG with scheme-less root-relative image href
-
ExploitBypass SvgSanitizer.isExternalUrl() and Batik same-origin policy
-
ExecutionBatik resolves path as same-origin file:// and decodes image
-
ImpactReceive targeted server file rendered into returned PDF
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation, allowlisting
|
| Exploitation Conditions | Requires that the Stirling-PDF SVG-to-PDF converter (POST /api/v1/convert/svg/pdf) be reachable; it is exploitable in the DEFAULT configuration (disableSanitize=false) and needs no admin role. It is fully unauthenticated only on login-disabled deployments; when login is enabled, any non-admin authenticated user can trigger it (the controller has no @PreAuthorize role check). The attacker must supply an SVG whose image href is in scheme-less root-relative form (e.g. /C:/path/file.svg) - explicit file: URLs, bare C: paths, backslash paths, and HTTP references are all stripped or fail. Key limiting factors that cap real impact: the targeted file must be image-decodable (PNG/JPG/GIF/SVG) - text, binary, directories, XInclude text, and XXE do not leak; the attacker must be able to name/guess the target path; and the existence oracle only distinguishes decodable images (all other cases return an indistinguishable HTTP 500). |
| Impact | This is a genuine but bounded information-disclosure flaw, not a high-urgency emergency. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N, base 5.3) is internally consistent with the GHSA advisory: network-reachable, low-complexity, no authentication required on login-disabled deployments, with only limited confidentiality impact and no integrity or availability effect. The vuln.today decision label is 'this_month' (not act_now/emergency), which aligns with a medium-severity read-only bug. No EPSS score and no KEV listing were provided in the input, so there is no signal of active exploitation or high predicted exploitation probability - treat exploitation likelihood as unmeasured rather than low. A detailed PoC was reproduced end-to-end by the reporter in the GHSA advisory, but the input does not mark it as confirmed working exploit code, so it should be counted as a public PoC reference, not a packaged weapon. No SSVC decision string was supplied. The practical risk is tempered by real constraints the advisory verified: only image-decodable files (PNG/JPG/GIF/SVG) can be exfiltrated, plain text/binary/XXE/explicit-file-URL/HTTP vectors are all fail-closed, and the existence oracle only resolves decodable images. Net: a legitimate confidentiality issue worth patching this cycle, but materially lower real-world risk than the network-unauthenticated CVSS framing alone might suggest. |
| Exploit ScenarioDerived | An attacker (unauthenticated on a login-disabled Stirling-PDF instance, or any non-admin user when login is enabled) submits a crafted SVG to POST /api/v1/convert/svg/pdf whose image xlink:href is a scheme-less, root-relative path such as /C:/Users/.../signature.png pointing at a sensitive image on the server. Because the path bypasses both SvgSanitizer.isExternalUrl() and Batik's same-origin check (document base is hard-coded to file:///input.svg), Batik loads and renders that server-side file into the PDF returned to the attacker. A reproduced PoC exists in the GHSA advisory; the low attack complexity and no-UI/no-auth path make it directly scriptable and, with CSRF globally disabled, browser-triggerable. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 30, 2026
Local file disclosure in Stirling-PDF 2.13.1: the SVG-to-PDF converter (POST /api/v1/convert/svg/pdf) renders attacker-supplied SVG through Apache Batik with a hard-coded file:///input.svg document base, so an image reference written as a scheme-less root-relative path (for example /C:/Users/.../secret.svg) defeats both the SVG sanitizer's external-URL check and Batik's same-origin resource policy, and any server file Batik can decode as an image is embedded into the PDF returned to the caller. The flaw works in the default configuration (disableSanitize=false) and requires no admin role; it is fully unauthenticated on login-disabled deployments, while with login enabled any authenticated non-admin user can trigger it because the controller carries no role check. Impact is bounded: only PNG/JPG/GIF/SVG paths can be read, text/binary files, directories, XInclude text and external entities do not leak, and the existence oracle distinguishes only decodable images - reflected in the CVSS 5.3 (AV:N/AC:L/PR:N/UI:N/C:L). The issue is fixed in 2.13.2; a public proof-of-concept is published in the GHSA advisory and was reproduced end-to-end against a source build, and no confirmed active exploitation is reported.
RemediationAI
Vendor-released patch: upgrade to Stirling-PDF 2.13.2 (https://github.com/Stirling-Tools/Stirling-PDF/releases/tag/v2.13.2). The fix, delivered via PR https://github.com/Stirling-Tools/Stirling-PDF/pull/6796 and commit d06d3cabaf5b8a7dcd0dbfc584828d8e687e5dd5, makes SvgSanitizer.isExternalUrl() treat every reference other than in-document #fragments and data: URIs as external (so root-relative and relative local paths are stripped, as covered by new tests for /tmp/image.png, ../../assets/image.png and /C:/Users/x/external-image.svg), and replaces the plain UserAgentAdapter in both SvgToPdf.convert() and SvgToPdf.addSvgAsPage() with a secure user agent whose checkLoadExternalResource() throws SecurityException for anything except data: URIs. Until upgrading, the exposure path can be reduced by running with login enabled, since the advisory confirms the endpoint is unauthenticated only on login-disabled deployments - but note this is only partial, because with login enabled any authenticated non-admin user can still exploit the endpoint, and the operator should also consider making POST /api/v1/convert/svg/pdf unreachable at the reverse proxy or by disabling the SVG-to-PDF conversion feature, at the cost of removing that conversion capability for legitimate users. No further workaround is described in the available sources; updating is the complete fix.
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
Stirling-PDF wraps Apache Batik (org.apache.xmlgraphics:batik-bridge 1.19) to rasterise SVG input for PDF output in app/core/src/main/java/stirling/software/SPDF/utils/SvgToPdf.java - both convert() and addSvgAsPage() construct a plain UserAgentAdapter and parse the document with factory.createSVGDocument("file:///input.svg", inputStream). Two defensive layers were supposed to block local/remote resource fetches and both are defeated by the same root-relative form. First, SvgSanitizer.isExternalUrl() only recognised explicit schemes (http://, https://, //, file:) plus #fragment and data:, so a scheme-less root-relative path such as /C:/.../canary.svg returned false, the SSRF check in sanitizeAttributes() was skipped and the attribute survived sanitisation. Second, because the document base is a file:// URL, Batik resolved that root-relative reference into a same-origin file:// URL, and its default DefaultExternalResourceSecurity permits same-origin loads; the sibling class SvgOverlayUtil already overrode checkLoadExternalResource to deny such loads, confirming SvgToPdf was simply missed by the earlier hardening in PR #6572. The reported root-cause class is CWE-20 (improper input validation), overlapping with CWE-22, CWE-610 and CWE-918 as noted in the advisory. Behaviourally, the trigger requires the root-relative single-leading-slash form: explicit file: URLs are stripped by the sanitizer, bare C: paths are treated as a scheme by Batik and fail to resolve, backslash variants fail, and HTTP references are stripped or blocked as cross-origin, all returning HTTP 500.
Know when Java 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:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Network endpoint, low-complexity path bypass, no auth on default login-disabled config, so PR:N; only limited image-file read, hence C:L with I:N/A:N.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Stirling-PDF is a locally hosted web application that facilitates various operations on PDF files. From 2.13.1 until 2.13.2, the POST /api/v1/convert/svg/pdf endpoint renders attacker-supplied SVG through Apache Batik, and a scheme-less root-relative image reference bypasses SvgSanitizer.isExternalUrl() before Batik resolves it against the file:///input.svg document base as a same-origin local file. The convert() and addSvgAsPage() paths in app/core/src/main/java/stirling/software/SPDF/utils/SvgToPdf.java can then render image-decodable server files into the returned PDF when sanitization is enabled, including without authentication on login-disabled deployments or with non-admin access when login is enabled. The issue discloses PNG, JPG, GIF, or SVG content and provides an existence oracle only for image-decodable paths; plain text, binary files, directories, XInclude text, external entities, explicit file URLs, and tested HTTP references are not disclosed through this mechanism. This issue is fixed in version 2.13.2.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m
Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti
Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent
Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug
JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up
Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up
The WLS Security component in Oracle WebLogic Server 10.3.6.0, 12.1.2.0, 12.1.3.0, and 12.2.1.0 allows remote attackers
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow
Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla
The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during
EUVD-2026-114456
NVD
CVE.org
EPSS
GitHub
Exploit-DB