Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify victim's active storybook playground session
-
DeliveryEnumerate or predict session-specific PubSub topic name
-
ExploitLoad crafted iframe URL with victim topic as query parameter
-
ExecutionAttacker iframe PID broadcast on victim's PubSub topic
-
PersistVictim playground routes control messages to attacker process
-
ImpactIntercept variation state, theme, and assign payloads
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
|
| Exploitation Conditions | A victim user must have an active phoenix_storybook playground session with the playground tab open and a ComponentIframeLive iframe rendered and subscribed to its session-specific PubSub topic - the victim's StoryLive LiveView must be actively awaiting an iframe PID announcement. The attacker must have network access to the same phoenix_storybook instance and must know or successfully enumerate the victim's session-specific topic name; topic names follow the predictable pattern psb-component-iframe-<positive integer> (confirmed by test code), making brute-force enumeration feasible against a running instance. The CVSS AT:P modifier confirms these prerequisite conditions are required. Exploitation is strictly limited to the storybook playground session: confidentiality and integrity of variation state, theme, and extra-assign control messages are affected, but there is no remote code execution, no file system access, and no impact on data or systems outside the storybook playground. Deployments where storybook is restricted to a single trusted developer or an internal-only network are not at realistic risk. |
| Impact | The CVSS 4.0 score of 2.3 accurately represents a low-severity finding. The vector AV:N/AC:L/AT:P/PR:N/UI:P indicates network-accessible exploitation with no privileges required, but the AT:P (attack target: partial) qualifier is the decisive limiting signal - exploitation depends on a victim having an active playground session, and the attacker must know or predict the victim's session-specific PubSub topic name. Confirmed impact is limited to low confidentiality (VC:L) and low integrity (VI:L) on the vulnerable system, with no availability impact and no subsequent system impact (SC:N/SI:N/SA:N). No EPSS score was provided in the available data. There is no CISA KEV listing and no public exploit code identified, meaning exploitation status is unconfirmed rather than confirmed safe. Real-world exposure is further constrained by phoenix_storybook's typical deployment as a developer-facing documentation tool on internal or restricted networks - organizations that have inadvertently exposed storybook instances to untrusted users on shared staging environments carry the greatest realistic risk. This is not a high-priority remediation for most teams, but multi-user storybook deployments accessible to untrusted parties should upgrade promptly. |
| Exploit ScenarioDerived | An attacker on a shared development or staging environment where phoenix_storybook is accessible observes or predicts a victim's active playground session topic - topic names follow the pattern psb-component-iframe-<positive integer> as evidenced by the test suite, making enumeration feasible. The attacker loads /storybook/iframe/<any-story>?topic=psb-component-iframe-<guessed-id>, causing their iframe LiveView process PID to be broadcast on the victim's PubSub topic; the victim's StoryLive playground then routes all subsequent control messages (variation state changes, theme switches, extra-assign payloads) to the attacker's process rather than the legitimate iframe. No public exploit code exists at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – May 20, 2026
Cross-session PubSub topic injection in phoenix_storybook (versions 0.4.0 through before 1.1.0) allows a remote unauthenticated attacker to redirect a victim's playground control messages to an attacker-controlled LiveView iframe process. The vulnerability exists because ComponentIframeLive reads the PubSub coordination topic verbatim from a URL query parameter with no session-binding validation, enabling an attacker who loads a crafted iframe URL to hijack variation state changes, theme switches, and extra-assign payloads intended for a victim's active playground session. No public exploit code exists and no CISA KEV listing is present; the CVSS 4.0 score of 2.3 reflects genuinely low severity given the prerequisites required.
RemediationAI
Upgrade phoenix_storybook to version 1.1.0 or later by updating mix.exs to specify {:phoenix_storybook, ">= 1.1.0"} and running mix deps.update phoenix_storybook. The fix is confirmed in commit 6ee03f1c at https://github.com/phenixdigital/phoenix_storybook/commit/6ee03f1c738d4436dde1b066cf65c80663d489f5, which introduces signed token verification for the playground topic parameter. If an immediate upgrade is not feasible and the storybook instance is not restricted to trusted users, restrict network access to the /storybook route at the reverse proxy level (e.g., nginx allow/deny directives or WAF IP allowlisting) - this eliminates the network-accessible attack vector without code changes, though it prevents any external access to the storybook interface. Note that exposing phoenix_storybook publicly is generally inadvisable regardless of this CVE. Full advisory details are at https://github.com/phenixdigital/phoenix_storybook/security/advisories/GHSA-mrhx-6pw9-q5fh.
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
phoenix_storybook is an Elixir Hex package that builds interactive component documentation playgrounds on top of Phoenix LiveView and Phoenix PubSub. The playground architecture uses a shared PhoenixStorybook.PubSub bus to coordinate between a parent StoryLive LiveView and an embedded ComponentIframeLive iframe: the iframe announces its process PID on a session-specific topic so the playground can direct control messages via Elixir send/2. The root cause is CWE-639 (Authorization Bypass Through User-Controlled Key) - handle_params/3 in component_iframe_live.ex consumed params["topic"] directly from the URL without verifying that the topic was generated by, or belongs to, the requesting session. The fix confirmed in commit 6ee03f1c replaces the raw topic query parameter with a cryptographically signed Phoenix.Token (salt: "phoenix_storybook:playground_topic", max_age: 86,400 seconds), ensuring only a server-generated token can authorize a topic binding. The parameter was renamed from "topic" to "playground_token" to make the change explicit at the protocol level.
Know when the next one hits your stack
- 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
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Primary rating from Vendor (6b3ad84c-e1a6-4bf7-a703-f496b71e49db) · only source for this CVE.
CVSS VectorVendor: 6b3ad84c-e1a6-4bf7-a703-f496b71e49db
Lifecycle Timeline
1DescriptionCVE.org
Authorization Bypass Through User-Controlled Key vulnerability in phenixdigital phoenix_storybook allows cross-session PubSub topic injection via a URL query parameter.
'Elixir.PhoenixStorybook.Story.ComponentIframeLive':handle_params/3 in lib/phoenix_storybook/live/story/component_iframe_live.ex reads a PubSub topic directly from params["topic"] and broadcasts {:component_iframe_pid, self()} on it with no check that the topic belongs to the requesting session. The shared PhoenixStorybook.PubSub is used to coordinate playground LiveViews with their iframes: a playground subscribes to a session-specific topic and uses the received iframe pid to direct subsequent control messages (variation state, theme switches, extra-assign payloads) via send/2. Because the iframe trusts the query parameter, an attacker who loads /storybook/iframe/<story>?topic=<victim_topic> causes their iframe process pid to be announced on the victim's topic. The victim's playground then addresses its private messages to the attacker's iframe process.
This issue affects phoenix_storybook from 0.4.0 before 1.1.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.
EUVD-2026-31111
GHSA-mrhx-6pw9-q5fh
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB