Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain valid share link and log into own Penpot account
-
ExploitLearn UUID of an out-of-scope page in the same file
-
ExecutionCall get-page/get-file-fragment RPC with unauthorized page-id
-
ImpactExfiltrate complete shape and design data of restricted page
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 | Three concrete prerequisites must all hold: (1) the attacker possesses a valid Penpot share link granting blanket read access to the target file; (2) the attacker has their own authenticated Penpot session, because the get-page RPC requires authentication; and (3) the attacker knows the identifier (random UUID) of a page in that file that is outside the share link's authorized pages set. The same applies to the get-file-fragment RPC, which permitted share-link access without mapping fragments to authorized pages. Limiting factors that reduce real-world risk: exploitation is confined to pages within the same file the attacker already has a share link to; the target page-id is a random UUID that must be known or leaked (it is not enumerable by design); and the flaw yields only read access to design/shape data (no modification or denial of service). Fixed configurations are any deployment running Penpot 2.18.0 or later. |
| Impact | This is a medium-severity information-disclosure flaw (CVSS 6.5). The provided vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N indicates a remote, authenticated attacker with low complexity and no user interaction can achieve high confidentiality impact with no integrity or availability impact - consistent with the CWE-862 missing-authorization (IDOR-style) nature of the bug. No EPSS probability, CISA KEV listing, or public proof-of-concept is present in the input, so there is no public exploit identified at time of analysis and no evidence of active exploitation. The practical risk is materially lower than the raw CVSS number suggests because exploitation is gated by three stacked prerequisites: possession of a valid share link, a separate authenticated Penpot session of the attacker's own, and knowledge of the target page's random UUID. Impact is also bounded - an attacker can only read other pages within the same file for which they already hold a share link, not arbitrary cross-file or cross-tenant data. This is a legitimate confidentiality concern for multi-tenant/SaaS or collaborative self-hosted Penpot deployments where scoped share links are widely distributed, but it is not a mass-exploitation or wormable candidate; remediation is a straightforward upgrade to 2.18.0. |
| Exploit ScenarioDerived | An owner shares a Penpot file via a share link scoped to read only one page. An attacker who holds that share link and is logged into their own Penpot account learns or obtains the UUID of a different (unauthorized) page in the same file and calls the authenticated get-page (or get-file-fragment) RPC with that page-id, receiving the complete shape and design data of the out-of-scope page. No public exploit code is identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 05, 2026
Missing authorization checks in Penpot prior to 2.18.0 let a holder of a valid share link read design and shape data from pages outside that link's authorized page set, within a file they can already access. Exploitation requires an authenticated Penpot session (the get-page RPC is authenticated, CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N, base 6.5) plus knowledge of the target page's random UUID, so the impact is limited to read-only information disclosure of design data rather than modification or denial of service. No public exploit code identified at time of analysis, and the flaw is fixed in version 2.18.0.
RemediationAI
Vendor-released patch: 2.18.0 - upgrade every Penpot instance (backend and frontend) to 2.18.0 or later, which is the release carrying the authorization fix; the corresponding source change is commit 52573be07472987703b2ce715c4c10919f4e153e and the advisory is GHSA-x9xg-qphx-8grr. If an immediate upgrade is not possible, the most direct compensating control is to inventory and revoke or re-scope existing share links, particularly any link with a restricted page set on a file that also contains sensitive pages, since a link that grants access to all pages removes the out-of-scope precondition entirely - the trade-off is that legitimate collaborators lose their existing link URLs and must be re-issued new ones. Because exploitation additionally requires knowing the target page's random UUID, avoid exposing page identifiers in client-side telemetry, support tickets, screenshots, or third-party analytics, and rotate share links whose page IDs may have leaked; this is a containment measure rather than a fix, because it cannot stop an attacker who already holds an identifier. Operators who cannot patch can also restrict the Penpot API to trusted networks or place the share-link endpoints behind an authenticating proxy, accepting the usability cost of breaking anonymous public sharing, and should monitor backend logs for get-page or get-file-fragment calls from share-link sessions referencing page identifiers not present in the link's scope. Note that per the upstream diff, the get-file-fragment path was closed to share-link callers altogether, so any workflow depending on fragment access through a share link will need to be revisited after upgrading.
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 is an open-source design and prototyping platform whose backend is written in Clojure and exposes functionality over an RPC command layer (for example get-page and get-file-fragment). Access is mediated by a permission map; when a request is made through a public share link the map has :type :share-link and carries a :pages set enumerating the pages that link is allowed to expose. The defect is a classic CWE-862 Missing Authorization: the get-page handler resolved the caller-supplied page-id (falling back to the file's first page) and returned the resulting page data without ever confirming that the resolved identifier was a member of the share link's authorized :pages set. Because get-page is an authenticated endpoint, an attacker needed both a valid share link for the target file and their own authenticated Penpot account, which together satisfied the permission resolution and let them pull any page in the same file whose random UUID they knew. The sibling get-file-fragment RPC had the analogous gap, permitting share-link access without mapping requested fragments to authorized pages. The upstream fix (commit 52573be07472987703b2ce715c4c10919f4e153e) computes a resolved-page-id before dispatch and raises a not-found error when the permission type is :share-link and that identifier is not contained in :pages, and it denies share-link callers access to file fragments outright; regression tests assert that a share-link holder can still reach the authorized page while receiving :object-not-found for out-of-scope pages and fragments, and that the file owner retains full page access.
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:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Remote RPC (AV:N); attacker needs an authenticated session plus a valid share link (PR:L); no user interaction; discloses full page design data (C:H) with no integrity or availability 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, the get-page RPC accepts a share-link permission object with blanket read access but does not verify that the caller-selected page-id belongs to the link's authorized pages set. An attacker with both a valid share link and the attacker's own authenticated Penpot session can retrieve the complete shape and design data of another page in the same file when its identifier is known, because get-page requires authentication. The related get-file-fragment RPC also permits share-link access without mapping fragments to authorized pages. 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
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
Server-side request forgery in Penpot before 2.18.0 allows an authenticated user who controls a media-import URL, or an
Penpot versions prior to 2.18.0 leak the contents of other users' in-progress uploads because the backend assemble-chunk
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-92715
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB