Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to Penpot instance
-
DeliveryObtain victim's live upload-session UUID
-
ExploitCall assemble-chunks with victim's session ID
-
ExecutionAssemble victim's chunks into attacker's file/font/import
-
ImpactDisclose uploaded bytes and delete victim session
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated account on the target Penpot instance (PR:L) and, critically, possession of another user's live, completed-but-not-yet-assembled upload-session UUID - exploitation is only possible against the chunked-upload flow (file import, team-font upload, or project import) during the brief window after chunks are uploaded but before assembly. The randomness of the session UUID and the narrow live window are the primary limiting factors (reflected in AC:H); there is no user-interaction requirement from the victim. Only Penpot versions prior to 2.18.0 are affected; the fix scopes the session lookup to the requesting profile. |
| Impact | This is a genuine but moderate-priority authorization flaw (BOLA/IDOR, CWE-862). The CVSS 3.1 vector (AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:L, base 5.9) is internally consistent with the description: an authenticated low-privilege user (PR:L) can act over the network (AV:N), but success is gated by high attack complexity (AC:H) because the attacker must obtain a victim's live, completed, not-yet-assembled upload-session UUID - a narrow, racy window. Confidentiality impact is high (C:H, disclosure of the victim's uploaded bytes), integrity is none (I:N), and availability is low (A:L, the victim's pending session is deleted). No EPSS score, KEV listing, or public POC was provided, so there is no public exploit identified at time of analysis and no evidence of active exploitation. The vulnerability, fix commit, PR, and regression test are all confirmed in Penpot's source, so the technical root cause is certain; however, the practical exploitability is constrained by the need to guess/obtain an unguessable UUID during a live upload, which keeps real-world risk lower than the C:H component alone might suggest. Overall: a real, confirmed issue worth patching, not a drop-everything emergency. |
| Exploit ScenarioDerived | An authenticated Penpot user who is a member of the same instance observes or obtains another user's live upload-session UUID (e.g. from a completed-but-unassembled chunked upload) and calls assemble-chunks - via file import, team-font upload, or project import - passing the victim's session ID. Because assemble-chunks scoped the lookup only by session ID, the attacker receives the victim's uploaded bytes into their own object and simultaneously deletes the victim's pending session. No public exploit code is identified, and the high attack complexity reflects the difficulty of capturing a valid live session UUID. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 05, 2026
Penpot versions prior to 2.18.0 leak the contents of other users' in-progress uploads because the backend assemble-chunks routine fetches an upload session by ID alone instead of scoping the lookup to the calling account. An authenticated attacker (PR:L) who comes to know a victim's live, completed-but-not-yet-assembled upload-session UUID can assemble the victim's stored chunks into the attacker's own file, team font, or project import - reading the uploaded bytes (C:H) and wiping the victim's pending session (A:L). Successful abuse is gated by the UUID's randomness and the brief window before the session is consumed, which the assessed vector captures as AC:H; no public exploit code or CISA KEV entry is associated with this issue at time of analysis.
RemediationAI
Upgrade Penpot to 2.18.0, which carries the vendor-released patch (commit 367e4d534c536c33d4f3fbad375f3e9c29b787a6, PR 11012) that scopes the upload-session lookup to the authenticated profile; consult GHSA-5vrm-3c6w-gjfv and the 2.18.0 release notes for deployment guidance. Because the flaw requires an attacker to already know a victim's live session UUID, no clean server-side toggle disables the vulnerable code path, but temporary compensating controls reduce exposure: shorten upload-session TTLs so the exploitable window between chunk upload and assembly is minimized (trade-off is more failed/expired large uploads), restrict account creation and file/font/project import privileges to trusted users during the exposure window (trade-off is reduced functionality for legitimate users), and monitor server logs for assemble-chunks or create-font-variant calls returning :not-found/:object-not-found from unexpected profiles, which signals attempted UUID guessing or leakage. Storing or transmitting upload-session UUIDs only over trusted channels and avoiding their exposure in logs, URLs, or client-side telemetry further limits the reconnaissance an attacker needs, and organizations unable to patch immediately should treat session UUIDs as sensitive authorization tokens. No vendor-released patch is identified for pre-2.18.0 lines beyond the 2.18.0 upgrade itself.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Penpot's Clojure backend exposes a chunked-upload feature in which clients push bytes via upload-chunk and later have the server concatenate the stored pieces through an assemble-chunks helper (backend/src/app/rpc/commands/media.clj). While upload-chunk correctly tied the session to the authenticated profile, assemble-chunks - reached from the binary-file import path (binfile.clj), the team-font upload path (fonts.clj), and the media path (media.clj) - performed a raw db/get on the :upload-session entity using only the supplied session ID, so no ownership predicate was applied. This is the classic Broken Object Level Authorization / missing-authorization pattern (CWE-862, test comments also reference CWE-639), where a resource identifier alone is treated as sufficient authority. The upstream fix threads profile-id through assemble-chunks and adds it to the datastore query ({:id session-id :profile-id profile-id}), raising :not-found/:object-not-found when the session does not belong to the requester, and adds a regression test confirming a second profile cannot assemble the first profile's session.
Know when Penpot gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:L
Authenticated network attacker (PR:L/AV:N) must obtain a victim's live, unguessable session UUID (AC:H); discloses uploaded bytes (C:H) and deletes the pending session (A:L), with no integrity impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Penpot is an open-source design and prototyping platform. Prior to 2.18.0, assemble-chunks retrieves an upload session using only its session ID, while upload-chunk correctly scopes the lookup to the authenticated profile. An authenticated user who obtains another user's live, completed upload-session UUID can assemble the victim's chunks into the attacker's own file, team font, or project import, disclosing the uploaded bytes and deleting the victim's pending session. This issue is fixed in version 2.18.0.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Penpot before version 2.13.2 contains a path traversal vulnerability in the font creation endpoint that allows authentic
Authenticated command injection in the Penpot SVG exporter prior to 2.18.0 allows a user with edit rights on a design fi
Account takeover in Penpot before 2.14.5 allows an authenticated registered user to hijack any non-blocked profile witho
Server-side request forgery in Penpot before 2.15.0 lets an authenticated file editor coerce the backend into fetching a
Missing authorization on Penpot's ::import-binfile RPC command allows any authenticated user to overwrite arbitrary file
Privilege escalation in Penpot before 2.18.0 lets a non-owner team administrator promote themselves to team owner by cre
Missing authorization checks in Penpot prior to 2.18.0 let a holder of a valid share link read design and shape data fro
Server-side request forgery in Penpot before 2.18.0 allows an authenticated user who controls a media-import URL, or an
Logout in Penpot versions prior to 2.18.0 clears the browser's auth-token cookie but leaves the matching server-side ses
Authenticated editors on a Penpot file (prior to version 2.18.0) can delete share links that were created by other users
Stored cross-site scripting in Penpot before 2.18.0 allows an authenticated user holding file-edit permission to upload
Authenticated users of Penpot prior to 2.18.0 can exhaust server-side temporary storage by repeatedly re-uploading a val
EUVD-2026-92714
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB