Cyble scan: 35 of 22,306 AI-built websites shipped live private keys to the browser
Summary
Cyble Research and Intelligence Labs (CRIL) says that over a month it scanned more than 1.3 million newly registered domains, picked out 22,306 sites it identified as built with AI app builders, and read their public front-end code for credentials. On 35 of those sites it found a secret that is never meant to leave a server: live OpenAI API keys, Stripe secret keys, Supabase service-role tokens, AWS access keys, a GitHub token or Google OAuth secret, and a Slack incoming webhook. Some leaks repeated across fleets of cloned sites, Cyble says, including one Slack webhook on 13 near-identical domains and one Stripe secret key on four domains under two brands. Cyble filtered out thousands of values that are meant to be public, such as Supabase anon keys and Stripe publishable keys, which is why its confirmed count is small. It did not name the sites and withheld the key values.
Severity
Timeline
Cyble publishes "The Keys Are in the Browser: Secret Exposure Across AI-Built Websites", the results of a month-long scan of newly registered domains.
How it happened
Cyble describes two patterns. In the first, a site that generates its content with a language model ships the model key in the page itself. Five sites carried live OpenAI keys, 16 distinct keys between them, and one AI-writing site shipped 12 different keys, one per content category, as plain values in its JavaScript. In the second, which Cyble calls clone-and-leak, an operator copies a working template across many domains and any secret in the template goes with it. Cyble says the 13-domain Slack cluster runs on Bubble, which it identified from Bubble's response headers, and that Bubble ships any value a developer places in a client-accessible field inside the app's dynamic.js bundle in plain text. The Stripe cluster ran on a Next.js build, which Cyble says shows the pattern spans builders rather than tracing to one platform. In both cases the secret was put where the browser could read it by whoever built the site; Cyble does not describe a flaw in any builder. Cyble also found four sites exposing a Supabase service-role token, which bypasses row-level security and gives full read and write access to the database. Its breakdown by type is OpenAI key 5 sites, Slack webhook 13, Stripe secret key 6, Supabase service-role token 4, AWS access key 5, and GitHub token or Google OAuth secret 2, with a few sites in more than one row. Cyble is a security vendor and its post promotes its own products. Because the sites are not named, we could not check the findings independently.
How to check your app
- Open your live site, view the page source and the JavaScript files it loads, and search for the strings Cyble suggests: sk-, sk_live_, service_role and hooks.slack.com. If you can find a secret there, so can anyone.
- Keep secret keys (OpenAI, Stripe sk_live_, a Supabase service-role token, cloud keys) in a server-side function or backend workflow. In a no-code builder, don't put a secret in any field the builder sends to the browser.
- Use only browser-safe keys on the front end, such as Supabase anon keys and Stripe publishable keys, and protect the data behind them with row-level security, Firebase rules or API key restrictions.
- If a secret ever shipped to the browser, rotate it at the provider and treat the old one as compromised.
- If you cloned a site from a template, check every copy. A key found on one copy is exposed on all of them.
Sources
Corrections and updates
Cite this entry
- Title
- Cyble scan: 35 of 22,306 AI-built websites shipped live private keys to the browser
- Added
- Oct 22, 2026
- URL
- https://vibeincidents.com/incidents/cyble-ai-built-sites-secrets-in-browser/
- Suggested citation
VibeIncidents. "Cyble scan: 35 of 22,306 AI-built websites shipped live private keys to the browser." Oct 22, 2026. https://vibeincidents.com/incidents/cyble-ai-built-sites-secrets-in-browser/