CVE-2026-94545 in Satori
Summary
by MITRE • 09/30/2026
Satori is a library to convert HTML and CSS to SVG. Starting in version 0.0.27 and prior to version 0.33.5, Satori does not properly escape certain values before including them in generated SVG output. This can allow crafted values to be interpreted as SVG markup. The impact depends on how the generated SVG is consumed. Version 0.33.5 contains a patch. No complete workaround exists besides upgrading. Applications that cannot immediately upgrade should not render attacker-controlled content with Satori.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.
Analysis
by VulDB Data Team • 09/30/2026
The vulnerability identified in the Satori library, which functions as an HTML and CSS to SVG converter, represents a significant injection risk stemming from insufficient input sanitization during the rendering process. Specifically, versions ranging from 0.0.27 up to but not including 0.33.5 fail to properly escape certain user-supplied values before embedding them into the generated Scalable Vector Graphics output. This technical flaw allows crafted inputs that contain malicious markup or script elements to bypass standard escaping mechanisms and be interpreted directly as part of the SVG structure by downstream parsers or viewers. The core issue lies in the library's inability to distinguish between safe data strings and executable code fragments, thereby enabling an attacker to inject arbitrary content into the document tree when processing untrusted input.
From a technical perspective, this flaw aligns with Common Weakness Enumeration category CWE-79, which describes Improper Neutralization of Input During Web Page Generation known as Cross-site Scripting or XSS in broader contexts, although here it manifests specifically within SVG markup injection. The attack vector typically involves an attacker providing specially crafted HTML or CSS input that includes tags such as script elements, event handlers like onload or onerror, or other executable constructs supported by the SVG specification. When Satori processes this input without adequate escaping, these malicious fragments are preserved in the final output file rather than being converted to their literal character representations. This behavior effectively transforms a static graphics generation tool into an execution vector for injected code, depending entirely on how the resulting SVG is rendered or consumed by client applications or web browsers.
The operational impact of this vulnerability is heavily dependent on the consumption context of the generated SVG files. If the output is served directly to users via a web browser that supports JavaScript within SVG elements, attackers can achieve remote code execution through standard XSS techniques. This could lead to session hijacking, credential theft, defacement of user interfaces, or redirection to malicious sites. In enterprise environments where SVGs are processed by backend services for image manipulation or analytics, the impact might involve server-side request forgery if certain SVG features trigger network requests from the rendering engine. Furthermore, in applications that display these graphics within iframe contexts or mixed content environments, the risk of cross-origin data leakage increases significantly. The severity is thus contextual but generally rated as high due to the potential for widespread exploitation across various deployment scenarios involving user-generated content.
Mitigation strategies must prioritize immediate remediation through software updates. The maintainers have addressed this issue in version 0.33.5, which includes a patch that enforces proper escaping of all dynamic values before they are inserted into the SVG DOM structure. Organizations utilizing Satori should upgrade to this patched version or any subsequent release as soon as possible to eliminate the attack surface entirely. For environments where an immediate upgrade is not feasible due to dependency conflicts or testing requirements, strict operational controls must be implemented. These include disabling the rendering of any content derived from untrusted sources using Satori until a patch can be applied. Additionally, implementing Content Security Policy headers that restrict script execution within SVG contexts can provide a layer of defense-in-depth, although this is not a substitute for fixing the underlying vulnerability in the library itself. Continuous monitoring and input validation at the application level serve as supplementary measures but cannot fully compensate for the lack of proper escaping within the core rendering engine.