✳ Linktree security replay
Controlled account · one click · no token read
Storybook React-node XSS → authenticated password creation
One click. New credential.
A cross-origin Storybook message revives an attacker-supplied React node. Its srcDoc executes under storybook.arbor.linktr.ee and submits Linktree’s cookie-authenticated CreatePassword mutation.
Verified trust path
01 updateStoryArgs accepts a serialized React element from an arbitrary origin.
02 An iframe srcDoc executes in the Storybook subdomain origin.
03 A simple text/plain request reaches POST /api/graphql with the victim session.
04 The chosen password authenticates a fresh client to the same account.
Controlled replay
Run the one-click chain
1 Use only a researcher-owned Linktree identity.
2 Sign in through Google to an identity that has no Linktree password yet.
3 Allow the Storybook popup. No click inside that popup is required.
The generated password stays in this page’s memory. The controller receives only a random marker and whether the opaque request was dispatched.
Replay console
Ready
Ephemeral takeover credential
The attacker-known password below is generated locally. Click once to open the vulnerable Storybook story and dispatch the authenticated mutation automatically.
Show
Copy
Run one-click controlled replay
Ready. No target request has been sent.
01
Before
Use a Google-backed controlled identity with no password. The account presents the Create password state.
02
Dispatch
The single click opens Storybook and sends one credentialed text/plain GraphQL mutation. The response remains opaque.
03
After
Log out, then authenticate in a fresh client using the controlled email and generated password. The verified end state is /admin .
Research replay only · Linktree Bugcrowd scope · controlled identities
Run harmless Storybook-origin marker only