Stored cross-site scripting in Penpot through unsanitized SVG uploads
Key facts
- Attack vector
- Network
- Privileges required
- Low
- User interaction
- Required
- Attack complexity
- Low
- Impact type
- Cross-site scripting
- Confidentiality · integrity · availability
- Low · Low · None
- Fix status
- Fixed
Attack profile from CVSS 3.1 · CNA. Fix status from CNA. Impact type from CWE-79.
Summary
Penpot before 2.18.0 stores uploaded SVG media without sanitization, keeping scripts, event-handler attributes and foreignObject elements (CWE-79). An authenticated user with file-edit permission can upload such a file, and when a victim opens its asset URL, the script runs in the Penpot origin with the victim's session authority. The attacker can then make requests and access data as that victim.
Written with Claude Haiku 5.5 from the sources below · 2026-10-29
Description from the CNA
Penpot is an open-source design and prototyping platform. Prior to 2.18.0, authenticated users with file-edit permission can upload SVG media whose scripts, event-handler attributes, and foreignObject elements are stored without sanitization and served as image/svg+xml from the Penpot origin. A victim who navigates to the asset URL executes attacker-controlled JavaScript in that origin, allowing requests and data access with the victim's Penpot session authority. This issue is fixed in version 2.18.0.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- Poc
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
Remediation
Upgrade Penpot to version 2.18.0 or later, which fixes this issue.
Written with Claude Haiku 5.5 from the sources below · 2026-10-29
- Fix · CNA penpot (penpot) Fixed in 2.18.0
Timeline
- 2026-10-06 Threatist record created from CVE-2026-105694
- 2026-10-07 Priority changed: MEDIUM → LOW
- 2026-10-08 CISA SSVC decision points changed
- 2026-10-08 Priority changed: LOW → MEDIUM
References
Other 6
- https://github.com/penpot/penpot/security/advisories/GHSA-xg6f-5v5x-g4w2
- https://github.com/penpot/penpot/security/advisories/GHSA-wrcr-m7p8-m2c4
- https://github.com/penpot/penpot/pull/10989
- https://github.com/penpot/penpot/pull/11044
- https://github.com/penpot/penpot/commit/c4dd04353fcf06c3e10a64e3d8e43945508ae98c
- https://github.com/penpot/penpot/releases/tag/2.18.0
More penpot vulnerabilities
- TI-2026-68335 OS command injection in Penpot SVG exporter via fill color CVSS 3.1CRITICAL 9.9
- TI-2026-32845 Penpot: Pre-authenticated account takeover via team-invitation token + prepare-register-profile CVSS 3.1CRITICAL 9.9
- TI-2026-35172 Penpot: Stored XSS via comment content, innerHTML renders unsanitized HTML CVSS 3.1HIGH 8.7
- TI-2026-33540 Penpot: MCP REPL server binds to 0.0.0.0 with unauthenticated /execute endpoint — RCE CVSS 3.1HIGH 8.8
- TI-2026-14441 Missing authorization in Penpot CVSS 3.1HIGH 7.5
- TI-2026-33541 Penpot: Authenticated SSRF in remote image import via create-file-media-object-from-url CVSS 3.1HIGH 7.7
Sources
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences