One AWS Key Left in a JavaScript Build File Exposed Every Beacon CRM Customer
Cybersecurity

One AWS Key Left in a JavaScript Build File Exposed Every Beacon CRM Customer

A single hardcoded credential in a public build artifact gave an attacker a 90-minute window to copy the entire donor database of a CRM used by more than 1,000 UK charities, including names, donors, and attachment files.

PublishedAugust 19, 2026
Read time5 min read
Share

A single leaked string did all the damage

Beacon CRM, a UK-based customer relationship management platform built for charities and nonprofits, disclosed that an attacker used a compromised AWS access key to copy its entire customer database. The company's investigation traced the key's exposure to publicly available JavaScript build artifacts, the compiled front-end code that ships to every visitor's browser. If a credential ends up embedded in that code, whether through a misconfigured environment variable, a debug build accidentally pushed to production, or a developer hardcoding a key during testing and forgetting to remove it, anyone who views the page source has it.

The attacker did not need to breach a firewall, exploit a zero-day, or social-engineer an employee. They needed to find one string in one JavaScript file, and from there they had legitimate, functioning access to the same AWS resources Beacon's own application used. Encryption at rest, network segmentation, and access logging all become far less useful once an attacker holds credentials the system treats as authorized. That is the uncomfortable core of this incident: the most sophisticated defenses in the world do not matter if the front door key is sitting in a public file.

Ninety minutes was enough for the whole database

Beacon's timeline shows the malicious activity occurred over roughly one hour and twenty-seven minutes on July 27 and 28, a remarkably short window to exfiltrate an entire customer database. That speed reflects how AWS access keys work: once an attacker has one with sufficient permissions, bulk data access through S3 exports, database snapshots, or direct API calls to managed services can move an enormous amount of data in a fraction of the time a manual intrusion through a web application would require. CTO David Simpson confirmed that a copy of the database holding all Beacon customer data, including attachment files, was made and likely downloaded in a readable format.

Beacon disclosed the breach publicly on August 4, roughly a week after the activity occurred, and issued a more detailed update the week of August 14 acknowledging real limits in what its own logs could reconstruct. The company stated plainly that specific objects accessed, the exact destination of the downloads, and definitive attribution of which objects were compromised could not be determined from available logs. That gap is common and worth naming directly: many organizations discover during incident response that their logging was never built to answer forensic questions, only operational ones.

The victim list reads like a spot-check of the UK charity sector

Over 1,000 charities, effectively Beacon's entire customer base of more than 1,500 organizations, had data exposed, though Beacon has not determined precisely how many had specific records taken. Named affected organizations include the Molly Rose Foundation, Macmillan Cancer Support Jersey, English National Ballet, Sheffield Hospitals Charity, the British Deaf Association, and Lincoln Cathedral, a cross-section spanning health, arts, disability advocacy, and heritage institutions. Each of those organizations now faces its own separate obligation to notify donors and supporters, a burden multiplied across every Beacon customer simultaneously.

This is the defining feature of vendor and platform breaches versus single-organization incidents: one exploited credential at one SaaS provider generates a thousand separate incident response processes downstream, each with its own regulatory notification requirements, donor communications, and reputational exposure. For a sector where donor trust is close to the entire value proposition, a breach of this scale at a shared CRM vendor is a genuinely serious event even though no financial data or payment details were involved, since charities do not typically store card or bank account numbers in the platform.

Secrets in front-end build artifacts are an old problem that keeps recurring

Hardcoded credentials in client-side JavaScript rank among the oldest, most well-documented mistakes in web application security, and they keep causing real breaches precisely because the problem is boring and unglamorous compared to zero-days and nation-state campaigns. Every modern CI/CD pipeline has the tooling available to catch this before deployment: secret-scanning in pre-commit hooks, build-time linting that fails on embedded AWS key patterns, and separation between build-time and runtime environment variables so server-side secrets never make it into a browser bundle in the first place.

The fact that this keeps happening at well-resourced SaaS companies points squarely at process discipline as the real gap, more than tooling availability. Secret scanners generate false positives, get disabled under deadline pressure, or simply are not configured to run against every build target. For CTOs evaluating their own engineering pipelines, the useful test is deliberate and concrete: push a build with an embedded AWS key and confirm the pipeline actually fails, rather than assuming the coverage is there.

What this means for SaaS vendor risk reviews

For any organization evaluating or currently using a CRM, donor management, or similar SaaS platform, this incident is a useful prompt to ask a specific, uncomfortable question during vendor security reviews: does your build pipeline scan for and block hardcoded cloud credentials before deployment, and can you demonstrate it rather than describe it. Generic SOC 2 attestations and security questionnaires rarely surface this specific failure mode, because the control in question is a build-time engineering practice, not a policy an auditor typically samples directly.

Beacon's incident also underscores a broader point worth internalizing: least-privilege scoping on cloud credentials functions as the last line of defense once a key inevitably leaks somewhere, and leaks happen even at organizations that genuinely care about security. An AWS key with narrowly scoped permissions to only the specific resources an application actually needs would have limited this attacker's reach even after exposure. A key with broad account access turns any single leak, anywhere in the pipeline, into a full-database event exactly like the one Beacon's 1,000-plus charity customers are now dealing with.

Tagged#news#security#cybersecurity#breach#cisa#ransomware#zero-day#supply-chain#ai-security#beacon-crm#aws#credential-exposure#cloud-security#secrets-management#nonprofit-sector#saas-security