---
id: "CVE-2026-94545"
kind: "vulnerability"
aliases: ["CVE-2026-94545", "GHSA-wx4j-mvgx-mqwp"]
title: "Satori-generated SVG has improper escaping"
severity: "medium"
cvss: 5.3
epss: 0.01082
exploited: false
status: "open"
category: "package"
products: [{"name": "satori", "fixed": ["0.33.5"], "affected": ">= 0.0.27, < 0.33.5", "ecosystem": "npm"}]
ecosystems: ["npm"]
tags: ["cwe-116", "next.js", "node", "npm", "open-graph-images", "package"]
not_affected_if: ["no-user-input-rendered", "static-content-only"]
published_at: "2026-09-30T15:22:38+00:00"
first_seen_at: "2026-10-27T14:47:34+00:00"
updated_at: "2026-10-27T15:02:22+00:00"
sources: [{"source": "ghsa", "url": "https://github.com/advisories/GHSA-wx4j-mvgx-mqwp", "first_seen_at": "2026-10-27T14:47:34+00:00"}, {"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-94545", "first_seen_at": "2026-10-27T15:02:22+00:00"}]
---

# Satori-generated SVG has improper escaping

Satori does not escape certain values before writing them into generated SVG, so attacker-supplied text can be read as SVG markup. The impact depends on how the resulting SVG is served or embedded, and the sources do not say whether it reaches script execution.

_Summary, check and fix written by a model from the sources; labelled as such._

## Affected

- npm:satori affected >= 0.0.27, < 0.33.5 fixed 0.33.5

## How to check

- Check the installed version with `npm ls satori`
- Look for `satori` in `package.json` and lockfiles to find all dependents
- Find routes or jobs that pass user-controlled text into Satori for rendering, such as OG image generators

## Fix

- Upgrade `satori` to `0.33.5` or later
- Until upgraded, do not render attacker-controlled content with Satori, per the advisory

## Timeline

- 2026-10-27T14:47:34+00:00 ghsa https://github.com/advisories/GHSA-wx4j-mvgx-mqwp
- 2026-10-27T15:02:22+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-94545

## From the sources

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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
