CVE-2026-84369
SVGO: removeScripts incompletely sanitizes executable HTML in SVG foreignObject elements
SVGO, short for SVG Optimizer, is a Node.js library and command-line application for optimizing SVG files. From version 1.0.0 until versions 2.8.4, 3.3.5, and 4.1.0, the opt-in removeScripts plugin, named removeScriptElement in versions 2 and 3 and implemented in plugins/removeScripts.js, removes SVG and XHTML script elements but does not inspect executable HTML content inside SVG foreignObject elements. Event-handler attributes such as onload and onbeforetoggle, srcdoc documents, and executable URLs in the action, data, formaction, href, and src attributes can remain in attacker-controlled SVG input. When an application uses the plugin as its only protection and serves the optimized SVG in an active browser context, the payload can execute script in the viewer's origin, expose data, modify content, or perform actions as the victim. This issue is fixed in versions 2.8.4, 3.3.5, and 4.1.0.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- Required
What an attacker can affect
- Confidentiality
- Low
- Integrity
- Low
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
6.1
SVGO: removeScripts incompletely sanitizes executable HTML in SVG foreignObject elements
SVGO, short for SVG Optimizer, is a Node.js library and command-line application for optimizing SVG files. From version 1.0.0 until versions 2.8.4, 3.3.5, and 4.1.0, the opt-in removeScripts plugin, named removeScriptElement in versions 2 and 3 and implemented in plugins/removeScripts.js, removes SVG and XHTML script elements but does not inspect executable HTML content inside SVG foreignObject elements. Event-handler attributes such as onload and onbeforetoggle, srcdoc documents, and executable URLs in the action, data, formaction, href, and src attributes can remain in attacker-controlled SVG input. When an application uses the plugin as its only protection and serves the optimized SVG in an active browser context, the payload can execute script in the viewer's origin, expose data, modify content, or perform actions as the victim. This issue is fixed in versions 2.8.4, 3.3.5, and 4.1.0.
- Record
CVE-2026-84369- CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
EUVDEUVD-2026-69651
6.1
SVGO, short for SVG Optimizer, is a Node.js library and command-line application for optimizing SVG files. From version 1.0.0 until versions 2.8.4, 3.3.5, and 4.1.0, the opt-in removeScripts plugin, named removeScriptElement in versions 2 and 3 and implemented in plugins/removeScripts.js, removes SVG and XHTML script elements but does not inspect executable HTML content inside SVG foreignObject elements. Event-handler attributes such as onload and onbeforetoggle, srcdoc documents, and executable URLs in the action, data, formaction, href, and src attributes can remain in attacker-controlled SVG input. When an application uses the plugin as its only protection and serves the optimized SVG in an active browser context, the payload can execute script in the viewer's origin, expose data, modify content, or perform actions as the victim. This issue is fixed in versions 2.8.4, 3.3.5, and 4.1.0.
- Record
EUVD-2026-69651- CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-4vpr-x523-8j87
6.1
SVGO: removeScripts incompletely sanitizes executable HTML in SVG foreignObject elements
Summary
SVGO's opt-in removeScripts plugin did not inspect executable HTML content inside SVG <foreignObject> elements. Applications that used this plugin as their only protection for untrusted SVG input could produce SVGs containing active HTML and expose users to cross-site scripting (XSS).
SVGO is an optimizer rather than a comprehensive sanitization library, but removeScripts is maintained for consumers that already rely on it to remove common script execution paths.
Details
Although the plugin removed SVG and XHTML <script> elements, it left other HTML execution paths inside <foreignObject> unchanged. These included:
- event-handler attributes such as
onloadandonbeforetoggle; srcdocdocuments, including on<iframe>elements;- executable URLs in HTML attributes such as
action,data,formaction,href, andsrc.
An attacker could place one of these payloads in an SVG. If an application optimized the untrusted SVG with removeScripts and then served the result in an active browser context, the payload could execute in the viewer's origin.
Impact
Successful exploitation could allow script execution in the context where the optimized SVG is rendered. Depending on the embedding and origin configuration, this could expose cookies or local storage, modify content, or perform actions as the victim.
The plugin is opt-in, so consumers that do not enable removeScripts are not relying on the affected behavior. Typical local optimization of trusted SVG files is not affected.
Patches
Upgrade to one of the following releases for the maintained release line in use:
| Release line | Patched version | Plugin |
| --- | --- | --- |
| v2 | 2.8.4 | removeScriptElement |
| v3 | 3.3.5 | removeScriptElement |
| v4 | 4.1.0 | removeScripts |
The fix preserves visual HTML inside SVG <foreignObject> elements while removing event attributes, srcdoc, and executable URL values from active HTML URL attributes.
SVGO v1 is no longer maintained. Users of v1 should upgrade to a supported release line.
Workarounds
For hostile input, use a dedicated SVG sanitization tool before passing the SVG to SVGO. As defense in depth, applications can reject or remove <foreignObject> content and avoid serving user-controlled SVGs in an active same-origin context.
- Record
GHSA-4vpr-x523-8j87- CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
NVD
6.1
SVGO, short for SVG Optimizer, is a Node.js library and command-line application for optimizing SVG files. From version 1.0.0 until versions 2.8.4, 3.3.5, and 4.1.0, the opt-in removeScripts plugin, named removeScriptElement in versions 2 and 3 and implemented in plugins/removeScripts.js, removes SVG and XHTML script elements but does not inspect executable HTML content inside SVG foreignObject elements. Event-handler attributes such as onload and onbeforetoggle, srcdoc documents, and executable URLs in the action, data, formaction, href, and src attributes can remain in attacker-controlled SVG input. When an application uses the plugin as its only protection and serves the optimized SVG in an active browser context, the payload can execute script in the viewer's origin, expose data, modify content, or perform actions as the victim. This issue is fixed in versions 2.8.4, 3.3.5, and 4.1.0.
- Record
CVE-2026-84369- CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
OSV
6.1
SVGO: removeScripts incompletely sanitizes executable HTML in SVG foreignObject elements
SVGO, short for SVG Optimizer, is a Node.js library and command-line application for optimizing SVG files. From version 1.0.0 until versions 2.8.4, 3.3.5, and 4.1.0, the opt-in removeScripts plugin, named removeScriptElement in versions 2 and 3 and implemented in plugins/removeScripts.js, removes SVG and XHTML script elements but does not inspect executable HTML content inside SVG foreignObject elements. Event-handler attributes such as onload and onbeforetoggle, srcdoc documents, and executable URLs in the action, data, formaction, href, and src attributes can remain in attacker-controlled SVG input. When an application uses the plugin as its only protection and serves the optimized SVG in an active browser context, the payload can execute script in the viewer's origin, expose data, modify content, or perform actions as the victim. This issue is fixed in versions 2.8.4, 3.3.5, and 4.1.0.
- Record
CVE-2026-84369- CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-06
OSVDEBIAN-CVE-2026-84369
6.1
SVGO, short for SVG Optimizer, is a Node.js library and command-line application for optimizing SVG files. From version 1.0.0 until versions 2.8.4, 3.3.5, and 4.1.0, the opt-in removeScripts plugin, named removeScriptElement in versions 2 and 3 and implemented in plugins/removeScripts.js, removes SVG and XHTML script elements but does not inspect executable HTML content inside SVG foreignObject elements. Event-handler attributes such as onload and onbeforetoggle, srcdoc documents, and executable URLs in the action, data, formaction, href, and src attributes can remain in attacker-controlled SVG input. When an application uses the plugin as its only protection and serves the optimized SVG in an active browser context, the payload can execute script in the viewer's origin, expose data, modify content, or perform actions as the victim. This issue is fixed in versions 2.8.4, 3.3.5, and 4.1.0.
- Record
DEBIAN-CVE-2026-84369- CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Updated
- 2026-11-02
Show 9 moreShow less
OSVGHSA-4vpr-x523-8j87
6.1
SVGO: removeScripts incompletely sanitizes executable HTML in SVG foreignObject elements
Summary
SVGO's opt-in removeScripts plugin did not inspect executable HTML content inside SVG <foreignObject> elements. Applications that used this plugin as their only protection for untrusted SVG input could produce SVGs containing active HTML and expose users to cross-site scripting (XSS).
SVGO is an optimizer rather than a comprehensive sanitization library, but removeScripts is maintained for consumers that already rely on it to remove common script execution paths.
Details
Although the plugin removed SVG and XHTML <script> elements, it left other HTML execution paths inside <foreignObject> unchanged. These included:
- event-handler attributes such as
onloadandonbeforetoggle; srcdocdocuments, including on<iframe>elements;- executable URLs in HTML attributes such as
action,data,formaction,href, andsrc.
An attacker could place one of these payloads in an SVG. If an application optimized the untrusted SVG with removeScripts and then served the result in an active browser context, the payload could execute in the viewer's origin.
Impact
Successful exploitation could allow script execution in the context where the optimized SVG is rendered. Depending on the embedding and origin configuration, this could expose cookies or local storage, modify content, or perform actions as the victim.
The plugin is opt-in, so consumers that do not enable removeScripts are not relying on the affected behavior. Typical local optimization of trusted SVG files is not affected.
Patches
Upgrade to one of the following releases for the maintained release line in use:
| Release line | Patched version | Plugin |
| --- | --- | --- |
| v2 | 2.8.4 | removeScriptElement |
| v3 | 3.3.5 | removeScriptElement |
| v4 | 4.1.0 | removeScripts |
The fix preserves visual HTML inside SVG <foreignObject> elements while removing event attributes, srcdoc, and executable URL values from active HTML URL attributes.
SVGO v1 is no longer maintained. Users of v1 should upgrade to a supported release line.
Workarounds
For hostile input, use a dedicated SVG sanitization tool before passing the SVG to SVGO. As defense in depth, applications can reject or remove <foreignObject> content and avoid serving user-controlled SVGs in an active same-origin context.
- Record
GHSA-4vpr-x523-8j87- CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
OSVCLSA-2026-1788978124 No score
TuxCare security update for svgo (2 CVEs)
TuxCare rebuilt svgo to address 2 CVEs. Fixed in 4.0.2-tuxcare.1.
- Record
CLSA-2026-1788978124- Updated
- 2026-11-02
OSVCLSA-2026-1788978264 No score
TuxCare security update for svgo (2 CVEs)
TuxCare rebuilt svgo to address 2 CVEs. Fixed in 2.8.0-tuxcare.3.
- Record
CLSA-2026-1788978264- Updated
- 2026-11-02
OSVCLSA-2026-1790520171 No score
TuxCare security update for svgo (1 CVE)
TuxCare rebuilt svgo to address 1 CVE. Fixed in 1.3.2-tuxcare.1.
- Record
CLSA-2026-1790520171- Updated
- 2026-11-02
OSVCLSA-2026-1792163346 No score
TuxCare security update for svgo (3 CVEs)
TuxCare rebuilt svgo to address 3 CVEs. Fixed in 4.0.1-tuxcare.1.
- Record
CLSA-2026-1792163346- Updated
- 2026-11-02
OSVCLSA-2026-1792183680 No score
TuxCare security update for svgo (3 CVEs)
TuxCare rebuilt svgo to address 3 CVEs. Fixed in 2.8.2-tuxcare.1.
- Record
CLSA-2026-1792183680- Updated
- 2026-11-02
OSVCLSA-2026-1793045772 No score
TuxCare security update for svgo (2 CVEs)
TuxCare rebuilt svgo to address 2 CVEs. Fixed in 2.8.3-tuxcare.1.
- Record
CLSA-2026-1793045772- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:12070-1 No score
velociraptor-0.76.7.0.git145.b60ef1146-1.1 on GA media
These are all security issues fixed in the velociraptor-0.76.7.0.git145.b60ef1146-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:12070-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:12424-1 No score
agama-web-ui-25+475.275dd4727-56.1 on GA media
These are all security issues fixed in the agama-web-ui-25+475.275dd4727-56.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:12424-1- Updated
- 2026-11-06
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
svgonpm |
1.0.0 up to 2.8.4 | 2.8.4 |
svgonpm |
3.0.0 up to 3.3.5 | 3.3.5 |
svgonpm |
4.0.0 up to 4.1.0 | 4.1.0 |
svgoTuxCare:npm From an advisory covering 2 CVEs |
4.0.2-tuxcare.0 up to 4.0.2-tuxcare.1, plus listed versions 4.0.2 |
4.0.2-tuxcare.1 |
svgoTuxCare:npm From an advisory covering 2 CVEs |
2.8.0-tuxcare.0 up to 2.8.0-tuxcare.3, plus listed versions 2.8.02.8.0-tuxcare.12.8.0-tuxcare.2 |
2.8.0-tuxcare.3 |
svgoTuxCare:npm |
1.3.2-tuxcare.0 up to 1.3.2-tuxcare.1, plus listed versions 1.3.2 |
1.3.2-tuxcare.1 |
svgoTuxCare:npm From an advisory covering 3 CVEs |
4.0.1-tuxcare.0 up to 4.0.1-tuxcare.1, plus listed versions 4.0.1 |
4.0.1-tuxcare.1 |
svgoTuxCare:npm From an advisory covering 3 CVEs |
2.8.2-tuxcare.0 up to 2.8.2-tuxcare.1, plus listed versions 2.8.2 |
2.8.2-tuxcare.1 |
svgoTuxCare:npm From an advisory covering 2 CVEs |
2.8.3-tuxcare.0 up to 2.8.3-tuxcare.1, plus listed versions 2.8.3 |
2.8.3-tuxcare.1 |
node-svgoDebian:14 |
before 3.3.5+ds-1, plus listed versions 3.3.2+ds-1 |
3.3.5+ds-1 |
velociraptoropenSUSE:Tumbleweed From an advisory covering 40 CVEs |
before 0.76.7.0.git145.b60ef1146-1.1 | 0.76.7.0.git145.b60ef1146-1.1 |
agama-web-uiopenSUSE:Tumbleweed From an advisory covering 11 CVEs |
before 25+475.275dd4727-56.1 | 25+475.275dd4727-56.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, aliases, references | OSV | |
| affected, facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-84369 is a medium vulnerability (CVSS 6.1) in Svg Svgo, published September 1, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.43%, the 37th percentile. Fixed in svgo 2.8.4.
References
github.com/svg/svgo/security/advisories/GHSA-4vpr-x523-8j87
github.com/svg/svgo/pull/2264
github.com/svg/svgo/pull/2269
github.com/svg/svgo/pull/2272
github.com/svg/svgo/commit/0557385564a5c6c11d76cd934a6cff94451e532c
github.com/svg/svgo/commit/994a9f00d79ddec68ce19a1ce9eb8ca08d747e4f
Show 59 moreShow less
github.com/svg/svgo/commit/fd51e474a300417d9361d9302d596b1763146327
github.com/svg/svgo/releases/tag/v2.8.4
github.com/svg/svgo/releases/tag/v3.3.5
github.com/svg/svgo/releases/tag/v4.1.0
nvd.nist.gov/vuln/detail/CVE-2026-84369
github.com/advisories/GHSA-4vpr-x523-8j87
github.com/CVEProject/cvelistV5/tree/main/cves/2026/84xxx/CVE-2026-84369.json
security-tracker.debian.org/tracker/CVE-2026-84369
github.com/svg/svgo
suse.com/security/cve/CVE-2025-0914
suse.com/security/cve/CVE-2026-12143
suse.com/security/cve/CVE-2026-14257
suse.com/security/cve/CVE-2026-17535
suse.com/security/cve/CVE-2026-18348
suse.com/security/cve/CVE-2026-18636
suse.com/security/cve/CVE-2026-18638
suse.com/security/cve/CVE-2026-18639
suse.com/security/cve/CVE-2026-18860
suse.com/security/cve/CVE-2026-27601
suse.com/security/cve/CVE-2026-29074
suse.com/security/cve/CVE-2026-41650
suse.com/security/cve/CVE-2026-45623
suse.com/security/cve/CVE-2026-49356
suse.com/security/cve/CVE-2026-5329
suse.com/security/cve/CVE-2026-53550
suse.com/security/cve/CVE-2026-55602
suse.com/security/cve/CVE-2026-56852
suse.com/security/cve/CVE-2026-59869
suse.com/security/cve/CVE-2026-6290
suse.com/security/cve/CVE-2026-64951
suse.com/security/cve/CVE-2026-64952
suse.com/security/cve/CVE-2026-64954
suse.com/security/cve/CVE-2026-65903
suse.com/security/cve/CVE-2026-65912
suse.com/security/cve/CVE-2026-65913
suse.com/security/cve/CVE-2026-65914
suse.com/security/cve/CVE-2026-67314
suse.com/security/cve/CVE-2026-67320
suse.com/security/cve/CVE-2026-6863
suse.com/security/cve/CVE-2026-69152
suse.com/security/cve/CVE-2026-69153
suse.com/security/cve/CVE-2026-6948
suse.com/security/cve/CVE-2026-73086
suse.com/security/cve/CVE-2026-73646
suse.com/security/cve/CVE-2026-73650
suse.com/security/cve/CVE-2026-7572
suse.com/security/cve/CVE-2026-7573
suse.com/security/cve/CVE-2026-84369
suse.com/security/cve/CVE-2026-84370
suse.com/security/cve/CVE-2026-102277
suse.com/security/cve/CVE-2026-110725
suse.com/security/cve/CVE-2026-111181
suse.com/security/cve/CVE-2026-111755
suse.com/security/cve/CVE-2026-111756
suse.com/security/cve/CVE-2026-115754
suse.com/security/cve/CVE-2026-115897
suse.com/security/cve/CVE-2026-116689
suse.com/security/cve/CVE-2026-75899
suse.com/security/cve/CVE-2026-86472