CVE-2022-44729 Overview
CVE-2022-44729 is a Server-Side Request Forgery (SSRF) vulnerability in Apache XML Graphics Batik version 1.16. Batik is a Java-based toolkit for processing Scalable Vector Graphics (SVG) content. The flaw allows a malicious SVG document to trigger loading of external resources by default. An attacker can abuse this behavior to cause resource consumption or, in some cases, disclose information accessible to the host processing the SVG. The issue is tracked under CWE-918: Server-Side Request Forgery. The Apache project recommends upgrading to Batik 1.17 or later.
Critical Impact
A crafted SVG processed by Apache Batik 1.16 can force the library to fetch attacker-controlled external resources, leading to information disclosure and denial of service against the host application.
Affected Products
- Apache XML Graphics Batik 1.16
- Debian Linux 10 (packaged Batik distribution)
- Downstream Java applications and services that embed Batik for SVG rendering or transcoding
Discovery Timeline
- 2023-08-22 - CVE-2022-44729 published to NVD and announced on the Apache mailing list and Openwall oss-security
- 2023-10 - Debian LTS security update released for affected Batik packages
- 2024-01 - Gentoo GLSA 202401-11 published
- 2025-02-13 - Last updated in the NVD database
Technical Details for CVE-2022-44729
Vulnerability Analysis
Apache Batik parses SVG documents that may reference external resources through attributes such as xlink:href, <image>, <use>, <feImage>, and CSS url() references. In version 1.16, the SVG processor resolves and fetches these external references during document handling without enforcing a restrictive default policy. An attacker who can submit an SVG to a server-side Batik component, such as a PDF transcoder, thumbnail generator, or document converter, can cause the server to issue outbound HTTP, HTTPS, FTP, or file: requests. These requests originate from the application server and inherit its network position, which often includes access to internal services, cloud metadata endpoints, and local filesystem URIs.
Root Cause
The root cause is the absence of a secure-by-default resource resolution policy in Batik 1.16. The library trusts URIs embedded in untrusted SVG input and dereferences them without consulting a strict allow-list. This design corresponds to [CWE-918] and matches the classic SSRF pattern: user-controlled input is concatenated into a server-initiated network request without validation of scheme, host, or destination.
Attack Vector
Exploitation requires that a victim application accept and process an attacker-supplied SVG using Batik 1.16. The CVSS vector indicates user interaction and local-scope delivery, typical of file-processing workflows such as document upload, report rendering, or batch conversion. A malicious SVG can include external references that point to internal HTTP services, cloud instance metadata endpoints, large remote files for denial of service, or file: URIs to read local content reachable by the JVM. The result is information disclosure or resource exhaustion on the host that runs Batik. No verified public proof-of-concept code is listed for this CVE; refer to the Apache XML Graphics security page for vendor technical details.
Detection Methods for CVE-2022-44729
Indicators of Compromise
- Outbound network connections originating from Java application processes (java, application server JVMs) to internal RFC1918 addresses, link-local 169.254.169.254 metadata endpoints, or unexpected external hosts shortly after SVG upload or document conversion activity.
- Application logs showing Batik classes such as org.apache.batik.transcoder.* or org.apache.batik.bridge.* resolving non-local URIs.
- Unusually large response payloads or long-running transcoder threads consistent with resource-consumption abuse.
Detection Strategies
- Inventory all Java applications and dependencies for batik-*-1.16.jar artifacts using software composition analysis or SBOM tooling.
- Inspect uploaded SVG files for external references such as xlink:href, <image href="http...">, <use href="...">, and CSS url(...) pointing to non-local destinations.
- Hunt for JVM-initiated egress to cloud metadata IPs and internal management interfaces in network telemetry and proxy logs.
Monitoring Recommendations
- Alert on any process executing Batik transcoder classes that opens sockets to addresses outside an approved allow-list.
- Monitor outbound DNS queries from application servers for domains supplied via user-uploaded content.
- Track CPU, memory, and thread counts on hosts that perform SVG processing to identify denial-of-service attempts.
How to Mitigate CVE-2022-44729
Immediate Actions Required
- Upgrade Apache XML Graphics Batik to version 1.17 or later in all applications, build pipelines, and container images.
- Apply distribution updates from the Debian LTS advisory and Gentoo GLSA 202401-11 where applicable.
- Restrict egress from servers that process SVG so they cannot reach internal services, cloud metadata endpoints, or arbitrary internet hosts.
Patch Information
The vendor fix is delivered in Apache XML Graphics Batik 1.17, which changes the default behavior so external resources are not loaded automatically. Consult the Apache XML Graphics security advisory and the project announcement thread for upgrade guidance. Rebuild and redeploy any application that statically bundles Batik to ensure the patched version is loaded at runtime.
Workarounds
- Configure Batik with a restrictive SVGUserAgent or ScriptSecurity and ExternalResourceSecurity policy that denies non-local URIs when an immediate upgrade is not possible.
- Pre-process untrusted SVG input to strip elements and attributes that reference external resources, including xlink:href, href, <image>, <use>, <feImage>, and CSS url() values.
- Run SVG processing in a network-isolated sandbox or container with no route to internal networks or 169.254.169.254.
# Maven dependency update example
# Replace the vulnerable Batik 1.16 coordinates with the fixed 1.17+ release
mvn versions:set-property -Dproperty=batik.version -DnewVersion=1.17
mvn -U dependency:tree | grep batik
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

