What Are Bug Bounties and How Do They Work?

What Are Bug Bounties and How Do They Work?

A bug bounty is a standing offer to pay anyone who finds and responsibly discloses a real vulnerability. Here is exactly how the model works, from scoping to payout, across web, API, cloud, mobile, network, web3 and IoT.

HackerSavanna Research Team
12 min read38 views

A researcher in Lagos finds a broken access control flaw in a fintech's wallet API at 11pm on a Tuesday. Twenty minutes later, the report is sitting in a triage queue on the other side of the world. By Thursday, the fix is live and the researcher has been paid. No procurement cycle, no six-week statement of work, no waiting for the next scheduled audit. That compressed loop, someone finding a real flaw and getting paid for disclosing it responsibly, is the entire idea behind a bug bounty, and it has quietly become one of the most effective tools in modern application security.

What a bug bounty actually is

A bug bounty program is a standing offer from an organization to pay anyone who finds and responsibly reports a security vulnerability in their systems. Unlike a penetration test, which is a scheduled, time-boxed engagement with a handful of testers working from a fixed scope for a week or two, a bug bounty runs continuously and is open to a much larger, more diverse pool of researchers. You are not paying for hours worked. You are paying for results, and only for results that hold up under triage.

That distinction matters more than it sounds. A pentest tells you what a small team found during the window they were looking. A bug bounty tells you what hundreds or thousands of researchers, each with different backgrounds, tooling, and pet techniques, could find given open-ended time. Coverage compounds. A researcher who spent three years specializing in GraphQL introspection abuse will find things a generalist pentester never will, and a program that stays open converts that specialization into an asset instead of a one-off engagement fee.

Where the model came from

The idea is older than most people assume. Netscape Communications ran what is widely credited as the first modern bug bounty program in 1995, offering cash and Netscape gear to anyone who found flaws in the beta of Netscape Navigator 2.0. It was a small experiment at the time. Mozilla picked up the model in 2004, Google formalized the Chromium Vulnerability Reward Program in 2010, and Facebook launched its own bounty program in 2011. By 2016 the concept had matured enough that the United States Department of Defense ran "Hack the Pentagon," the first bug bounty program by the federal government, and it turned up genuine, previously unknown vulnerabilities in public-facing DoD systems within the first hours of launch.

What changed between 1995 and now is not the core idea, it is the infrastructure around it. Dedicated platforms emerged to handle the parts that used to make bounty programs unmanageable at scale: intake, deduplication, severity scoring, payment logistics across dozens of currencies and countries, and a legal safe harbor that protects researchers who test in good faith. That infrastructure is what turned "email us if you find something" into a repeatable, auditable process that a security team can actually run.

How a report moves from submission to payout

Every credible bug bounty program follows roughly the same lifecycle, even if the tooling differs. Understanding each step is the difference between a program that researchers trust and one they quietly stop submitting to.

Scoping and rules of engagement. Before a single researcher looks at anything, the organization defines what is in scope (specific domains, apps, API endpoints, mobile builds), what is explicitly out of scope (third-party integrations, denial-of-service testing, social engineering against staff), and what severities qualify for what reward ranges. A vague scope produces noise. A precise one produces signal, because researchers self-select into the areas they can actually test well.

Discovery and submission. Researchers work the scope using whatever mix of manual testing and tooling fits the target: proxy-based manual analysis in Burp Suite, automated recon with tools like Subfinder, httpx, and Nuclei for the easy wins, and a lot of just reading how the application actually behaves under edge-case input. A good report is not just "I found XSS." It includes a clear title, a reproduction path, proof of concept, and a plain explanation of business impact, because impact is what turns a technical curiosity into a bounty-worthy finding.

Triage and validation. This is where most programs live or die. Someone, ideally a trained triager backed by tooling that flags likely duplicates and auto-checks common patterns, has to reproduce the bug, confirm it is real, and rule out duplicates against everything already submitted. A slow or dismissive triage process is the fastest way to lose good researchers to a competitor's program. This is also the stage where AI-assisted triage has started to earn its keep, not by replacing a human's judgment on severity, but by filtering out the roughly 30 to 40 percent of submissions that are template scanner output or clearly out of scope, so triagers spend their time on reports that actually matter.

Severity scoring. Confirmed findings get scored, typically against CVSS as a baseline, then adjusted against a program-specific vulnerability rating taxonomy that accounts for real business impact rather than a purely technical score. An authentication bypass on an admin panel and an authentication bypass on a marketing microsite are not the same severity even though the underlying flaw class is identical, and a good taxonomy captures that difference instead of flattening it.

Remediation and retest. The engineering team fixes the issue, and the same researcher (or the triage team) verifies the fix actually closes the hole rather than just changing the error message. Skipping retest is how the same bug quietly reopens six months later after a refactor.

Payout and disclosure. The researcher gets paid according to the program's reward table, and, where the organization allows it, the report can eventually be published publicly once the fix has shipped and enough time has passed to protect users. Public disclosure is not mandatory, but programs that support it build more trust with the researcher community than ones that keep every finding permanently confidential, because researchers can point to a real, verifiable track record instead of just a promise.

Where the bugs actually live, across every layer of the stack

The phrase "bug bounty" tends to conjure a mental image of someone finding cross-site scripting on a login form. In practice, modern programs span every layer an organization runs, and the vulnerability classes differ meaningfully by layer.

Web applications. Still the largest single category by submission volume, because most organizations still expose the most surface area here. Broken object level authorization, commonly called IDOR, remains the highest-volume finding class year over year, because it is conceptually simple to introduce and easy to miss in code review. It looks like this in practice:

javascript531 Bytes
1// Vulnerable: trusts the client-supplied ID with no ownership check
2app.get('/api/invoices/:id', requireAuth, async (req, res) => {
3 const invoice = await db.invoices.findById(req.params.id);
4 res.json(invoice);
5});
6
7// Fixed: the query itself enforces that the invoice belongs to the caller
8app.get('/api/invoices/:id', requireAuth, async (req, res) => {
9 const invoice = await db.invoices.findOne({
10 _id: req.params.id,
11 ownerId: req.user.id,
12 });
13 if (!invoice) return res.status(404).end();
14 res.json(invoice);
15});

One line of the fix, and it closes a class of bug that shows up constantly across bounty programs of every size.

APIs. As applications shift toward API-first architectures, REST, GraphQL, and RPC-style APIs each carry distinct risk. GraphQL's flexible query shape makes excessive data exposure and resource exhaustion through deeply nested queries a recurring finding. Rate limiting gaps on shared infrastructure are their own category, and they are easy to underestimate. A real, publicly disclosed example on HackerSavanna's own platform, a shared rate limit on an AI assistant endpoint, meant a single researcher hitting the limit could deny service to every other researcher relying on the same backend quota, a High severity finding purely because the blast radius extended past the account that triggered it.

Server racks in a data center

Cloud infrastructure. Misconfiguration, not zero-day exploitation, is the dominant failure mode in cloud environments, and the stakes are severe because a single misconfigured rule can expose an entire dataset at once. This is exactly the shape of one of the most serious reports ever disclosed on HackerSavanna's own program: a Firestore security rules misconfiguration granting full read access to all user data, reports, and programs, rated Critical, discovered and fixed through the same responsible disclosure process this article is describing. A rule that looks almost right is often functionally identical to no rule at all:

javascript391 Bytes
1// Vulnerable: any authenticated user can read any document in the collection
2match /reports/{reportId} {
3 allow read: if request.auth != null;
4}
5
6// Fixed: read access requires actual ownership or an explicit role
7match /reports/{reportId} {
8 allow read: if request.auth != null &&
9 (resource.data.ownerId == request.auth.uid ||
10 request.auth.token.role in ['admin', 'triager']);
11}

Mobile applications. iOS and Android each bring their own risk surface: insecure local storage of tokens or PII, certificate pinning that is missing or trivially bypassable, and, still shockingly common, API keys or secrets hardcoded directly into the compiled app where anyone with a decompiler can pull them out in minutes.

kotlin329 Bytes
1// Vulnerable: a real secret baked directly into the shipped APK
2private const val API_KEY = "sk_live_51H8x...redacted"
3
4// Fixed: the client authenticates itself and receives a short-lived,
5// scoped token at runtime instead of shipping a permanent secret
6val sessionToken = authClient.exchangeDeviceAssertion(deviceAttestation)

Networks. Less glamorous than web and mobile findings but no less consequential. Exposed management interfaces, weak segmentation between environments, and outdated services with known CVEs are exactly the class of flaw that turned EternalBlue, a Windows SMB vulnerability, into the engine behind the 2017 WannaCry ransomware outbreak that hit organizations across more than 150 countries. A network-scoped bounty or a coordinated disclosure channel gives an organization a real chance to hear about that kind of exposure from a researcher before an attacker finds it independently.

Web3 and blockchain. Smart contracts raise the stakes of a single bug considerably, because a deployed contract is often immutable and directly controls funds. Reentrancy is the canonical example: it is the exact flaw class behind the 2016 DAO hack, where an attacker exploited a contract that sent funds before updating its internal balance, draining roughly sixty million dollars worth of ether before the flaw was understood.

solidity666 Bytes
1// Vulnerable: sends funds before updating the balance, allowing
2// the receiving contract to re-enter withdraw() before state updates
3function withdraw(uint amount) public {
4 require(balances[msg.sender] >= amount);
5 (bool sent, ) = msg.sender.call{value: amount}("");
6 require(sent);
7 balances[msg.sender] -= amount;
8}
9
10// Fixed: checks-effects-interactions, state is updated before the
11// external call so a reentrant call sees an already-zeroed balance
12function withdraw(uint amount) public {
13 require(balances[msg.sender] >= amount);
14 balances[msg.sender] -= amount;
15 (bool sent, ) = msg.sender.call{value: amount}("");
16 require(sent);
17}

IoT and embedded devices. The 2016 Mirai botnet is the textbook case here: it scanned the internet for IoT devices still running factory-default telnet credentials, roped hundreds of thousands of them into a botnet, and used that botnet to knock major DNS provider Dyn offline, taking down Twitter, Netflix, and Reddit for hours in the process. Hardcoded credentials, unauthenticated firmware update endpoints, and debug interfaces left enabled in shipped hardware are still common findings on any program that includes physical or embedded devices in scope.

Why organizations actually run these programs

The financial logic is straightforward once you look at it directly. A single serious data breach costs, on average, millions of dollars once you account for incident response, legal exposure, regulatory fines, and customer churn. A bug bounty program costs exactly what it pays out for confirmed, in-scope findings, plus whatever platform and triage overhead the organization chooses. You are trading an unpredictable, potentially catastrophic tail risk for a predictable, incremental operating cost, and you are finding out about your weaknesses from someone who wants to get paid to tell you, rather than from an attacker who wants to exploit you quietly.

There is a coverage argument too. A point-in-time pentest, however good the team running it, is a snapshot. A continuously running bounty program tests every new deploy, every feature flag, every quietly reintroduced regression, against a standing pool of researchers who are financially motivated to keep looking. Programs that pair fast triage with fair payouts consistently report response times in the range of a few days from submission to first meaningful response, which is also the single strongest predictor of whether good researchers keep coming back to a program, ahead of even bounty size.

And there is a trust argument that is easy to underweight. A public vulnerability disclosure program, or a bug bounty program that supports public disclosure once issues are fixed, is a visible signal to customers, auditors, and partners that an organization takes security seriously enough to invite scrutiny instead of avoiding it. HackerSavanna runs its own program on its own platform for exactly this reason, and every one of the examples referenced in this article is a real, disclosed report from that program, not a hypothetical.

What it takes to launch one well

The organizations that get the most out of a bug bounty program tend to do a small number of things right from day one. They start with a scope that is precise enough to be testable rather than a blanket "everything we own," even if that means starting narrow and expanding later. They commit to a real triage SLA and hold themselves to it, because researchers talk to each other, and a program with a reputation for silence dies quietly regardless of bounty size. They use a defensible, published severity taxonomy so researchers know roughly what a finding is worth before they spend the hours finding it. And they treat the researcher relationship as a long-term one, because the same person who finds a Medium-severity bug today is the same person who might find your next Critical if the first experience was fair.

HackerSavanna runs exactly this model for organizations across web, API, cloud, mobile, network, web3 and IoT, backed by the triage, severity scoring and payout infrastructure this article just walked through. The bug bounty capability is laid out in more detail on the platform page, and if you are ready to put a program in front of a vetted researcher community, you can onboard your organization directly. If you would rather talk through scope and pricing first, reach out to the team and someone will walk you through what a program built for your stack actually looks like.

The gap between a company that "has security" on paper and one that has actually pressure-tested its systems against a determined, motivated, diverse group of outsiders is enormous, and it only closes one way: by inviting the people who are already looking to tell you what they find, and paying them properly when they do.

Share: