50,000 Stripe Secrets Leaked in Public Code

Over 50,000 exposed Stripe API keys show how leaked secrets can enable fraud, data access and account abuse within hours.
Ransomnews researchers have documented a large-scale leak of Stripe merchant API keys found exposed in public code repositories, GitHub Actions logs, and misconfigured web servers, with over 50,000 unique keys identified in total. The research is practical rather than theoretical: the team tested a sample of the keys, found a meaningful portion still active, and documented exactly how quickly a fraudster could exploit them. The answer is fast.
“A dataset published on a data-trading forum on 18 August 2026 contains live Stripe API keys for 659 merchant accounts, along with roughly 35 GB of customer and payment data pulled from them.” reads the report published by Ransomnews. “Ransomnews analysed the files offline and reported the exposure to Stripe before publishing. Stripe itself was not compromised. The keys belong to merchants.”

Researchers said that after finding an active Stripe API key, they were able to access a merchant’s customer list, create a fraudulent payment link and make a $1 test charge within 17 hours. The key alone was enough to perform these actions, highlighting the risks of exposed credentials and insufficient API protections.
The operations a live Stripe secret key unlocks are extensive: listing customers and their stored payment methods, creating charges and payment intents, issuing refunds to attacker-controlled accounts, modifying webhook endpoints to intercept future payment notifications, and in some cases accessing connected accounts if the merchant had enabled Stripe Connect. A secret key is not a partial credential. It’s full API access.
The sources of the leaked keys are unsurprising to anyone who has done developer security work. GitHub repositories — both public and accidentally made public, account for the largest share, typically through hardcoded keys in configuration files, .env files committed without a corresponding .gitignore entry, or keys left in code comments. GitHub Actions build logs are the second major source: when a workflow prints environment variables for debugging, any secret that wasn’t properly masked ends up in a log that anyone with repository access can read.
Misconfigured web servers are another major source of exposed Stripe API keys. Researchers found over 3,000 servers revealing Stripe-related strings, with about 12% containing keys that worked against the Stripe API.
The source of the 659 exposed merchant keys is unclear, but likely includes infostealer logs, public repositories, exposed environment files and misconfigured backups. The collector’s real advantage was systematically validating the keys, accessing each account and organizing the stolen data.
“The dataset doesn’t say, and we are not going to guess at a single source for 659 separate merchants. The realistic candidates are the ordinary ones: secret keys sitting in infostealer logs lifted from developer machines, keys committed to public repositories, keys left in exposed environment files, keys pulled out of misconfigured backups. Stripe’s own documentation says the company scans for exactly this, and describes finding merchant keys on repositories and package registries.” concludes the report.
“What the collector added was patience. Gathering keys is common. Validating several hundred of them, then systematically walking the API for each account and archiving the results into a consistent folder structure, is a different level of effort.”

Stripe does provide automatic secret scanning through GitHub’s partner program, which flags Stripe keys found in public repositories and can trigger automatic revocation when a merchant opts in. The problem is that opt-in rate is low, the scanning doesn’t cover private repositories, and it has no coverage over build logs, web server misconfigurations, or other platforms where keys surface. Ransomnews also found that some merchants had rotated their keys after a GitHub exposure but left the old keys active, possibly because Stripe doesn’t revoke keys on rotation unless you explicitly delete the old one.
The remediation is not complicated. Audit your current Stripe keys against your version control history to see if any have ever been committed. Rotate any key that has touched a public repository, a build log, or a configuration file that wasn’t explicitly protected. Enable Stripe’s restricted keys for any integration that doesn’t need full account access — a webhook handler doesn’t need the ability to create charges. And enable Stripe Radar rules to flag unusual charge patterns that might indicate someone else is using your key before you’ve noticed it’s gone.
Follow me on Twitter: @securityaffairs and Facebook and Mastodon
Pierluigi Paganini
(SecurityAffairs – hacking, data leak)

