Bug Bounty Research 🚀: Smart Methodology to Pick Tests
Learn bug bounty research with a proven bug bounty methodology: authorization testing, AI in cybersecurity, and smarter security research—get verified findings!

How to Choose the Right Features for Bug Bounty Research
A bug bounty researcher can spend days testing a feature and find nothing - or spot one weird behavior that points to an authorization flaw. The difference rarely comes down to some secret technique. Usually it's about picking what to investigate, understanding how the feature is supposed to work, and following up when what you see doesn't match the design.
A GitHub researcher, @vaib25vicky, laid out this approach in a GitHub Bug Bounty researcher spotlight. Instead of chasing a single bug class everywhere, they start with a feature, figure out what "normal" looks like, and then look for ways it might be used improperly. Because the focus is authorization and access control, it's especially useful for complex products with lots of users, roles, and shared resources.
And the idea isn't limited to GitHub. It's a practical way to decide where to spend limited research time: test modern web apps (including AI-powered parts), and avoid turning a guess into a report. Below is the method as a repeatable workflow - plus the guardrails that keep testing responsible and useful.
Key takeaways
- Pick features based on complexity and potential impact, not just how familiar a bug category feels.
- Learn how the feature is supposed to work before you try to break it.
- Treat authorization as "who can do what to which resource," with which user context matters.
- Use AI to speed up supporting work, but verify everything yourself.
- Stay inside the program's scope and write up findings clearly.
Why feature selection matters
Bug bounty work is an allocation problem. You have limited time, a defined scope, and a huge product surface. The useful question isn't just, "What bug classes should I test?" It's, "Which feature is worth understanding deeply, and what assumptions does it rely on?"
That matters because the same bug class can show up differently across products. A permission issue in a profile setting, an issue in a repository integration, and something in organization-wide administration might all fall under a broad "authorization" umbrella - but the actors, resources, workflows, and real-world consequences aren't the same. Starting from a list of techniques can spark ideas, but it doesn't tell you which feature is the best combination of complexity and impact to dig into.
The approach here is feature-first: pick a part of the product that looks complex, use it like a normal user would, and build a clear model of what it does. Then look for situations where it behaves differently than intended. That's often where the security gaps hide - places a generic checklist wouldn't naturally land.
Look for complexity with a reason to exist
Complexity by itself isn't a vulnerability. A complicated screen that shows no sensitive data and doesn't enable meaningful actions may be a waste of time. Complexity becomes interesting when it sits near real boundaries - who can view information, who can change it, and who actually owns the account or resource involved.
For each candidate feature, ask:
- Does it involve multiple users, roles, or organizations?
- Does it act on resources that belong to someone else?
- Can it create, transfer, or expose sensitive data?
- Does it rely on invitations, links, tokens, or integrations?
- Are there multiple paths to the same action, like a UI and an API?
- Could it behave differently for an owner, member, guest, or an unauthenticated visitor?
These questions aren't a scoring rubric. They're a way to stop treating every feature as equally worth your time. A feature with multiple actors and sensitive actions is more likely to justify deeper testing than a simple, isolated setting.
Choose depth over indiscriminate coverage
The "move on" part matters. The researcher spends some time on a feature, looks for useful signals, and switches when further work doesn't pay off. That's basically opportunity cost: if you keep chasing an area that isn't going anywhere, you're giving up time that could go toward something with sharper security boundaries.
That doesn't mean you abandon everything at the first dead end. Early results can be ambiguous. A better move is to set a limited discovery window: learn the main flows, note what you're still unsure about, and then decide. If you see meaningful roles, resource ownership rules, or inconsistent behavior, keep going. If it stays simple and low-impact after reasonable exploration, move on - and save your notes for later.
On paper, exhaustive coverage sounds great. In practice, it can mean repeatedly testing the same familiar paths while more consequential areas get ignored. Picking targets on purpose helps you balance breadth and depth.
A practical workflow for investigating a feature
A repeatable workflow keeps curiosity productive. It also reduces the odds of confusing expected behavior, a UI glitch, or an incomplete test for a vulnerability. The steps below follow the feature-first approach - while also adding the documentation and safety checks that make reports actually usable.
1. Confirm scope before testing
Read the program's current rules before you touch the target. Confirm which domains, products, accounts, and testing methods are allowed. Pay attention to exclusions, rate limits, restrictions on accessing data, and any requirements for using test accounts.
Scope isn't "administrative busywork." It's what you're authorized to test. A technically interesting path isn't worth pursuing if it crosses a prohibited boundary or risks impacting another user. If the rules are unclear, don't guess - ask the program for clarification.
Use accounts and resources you control. Avoid actions that could disrupt service, expose someone else's information, or create lasting changes. A good test demonstrates the security issue with the smallest practical impact.
2. Learn the feature's normal workflow
Use the feature as intended before you try to break it. Identify the normal steps, the roles involved, and what data changes. Note what the UI shows - but don't treat the interface as the source of truth. Most applications enforce permissions on the server, and the controls you see are only part of the story.
Write down a simple model:
- Actor: Who initiates the action?
- Resource: What object or data is affected?
- Action: What is the user trying to do?
- Context: Which account, organization, project, or role applies?
- Expected rule: Who should be allowed to do this, and under what conditions?
This model helps because many security failures are basically mismatches between who the actor is and what they're allowed to do on a resource. If you can't describe the normal rule, it's hard to show how the behavior you saw actually violates it.
3. Map trust boundaries and variations
Once the normal flow makes sense, test meaningful variations using accounts and resources you control. For example, compare what an owner can do versus a member, or how the same action behaves for two test resources with different ownership. Keep one variable different at a time when you can - your results will be easier to interpret.
Look for boundaries like:
- Different user roles or membership states
- Resources owned by separate test accounts
- Public versus private visibility
- Invitations that are existing versus expired or revoked
- Actions performed through different supported interfaces
- Changes to an object after a link or permission is created
The goal isn't to spray requests randomly. It's to check whether the product enforces its stated rules consistently when the context changes.
4. Investigate anomalies, then reproduce them
If something behaves unexpectedly, pause and form a specific hypothesis. For example: "A user without access to this resource might still perform this action through a second workflow." Then test it safely and repeatably.
Separate observation from interpretation. "The response includes a field I didn't expect" is an observation. "This exposes another user's private data" is a claim that needs evidence. Verify that claim with controlled test accounts and only the minimum data necessary. If you can't reproduce the behavior or you can't tell what impact it actually has, keep investigating before you submit anything.
As you go, keep useful notes: the accounts and roles used, the setup, the steps, what you expected, what actually happened, and any limitations. A clear record saves time later and makes it easier to separate a real issue from a false lead.
5. Decide whether to continue or move on
A good stopping decision is part of research quality. Keep going when the feature has meaningful trust boundaries, you've found a repeatable anomaly, or you have a plausible path to real security impact. Reassess when the same low-value tests produce nothing new and no credible hypothesis is emerging.
You don't need to prove every possible issue in a feature before moving on. You do need enough understanding to make a rational call. Over time, this turns into a feedback loop: which signals led to valid findings, which assumptions were wrong, and which feature types weren't worth the time.
Why authorization deserves special attention
Authorization determines whether a particular user can perform a particular action on a particular resource, in a particular context. It sounds simple in a sentence - and it's surprisingly easy to implement inconsistently across a large product.
A single feature can have multiple routes to the same underlying operation: a web interface, an API, an invitation flow, an integration, or an automated agent. Permissions that work in the main UI can be missing in an alternate path. Changes to roles or ownership can also introduce edge cases that weren't present when the resource was first created.
That's why access control is a strong "feature-first" lens. It gives you concrete things to test, not a vague instruction to "hunt security bugs." Who's acting? What do they own? What role do they have right now? What operation are they requesting? Does the server enforce the same rule across all relevant paths?
Treat permissions as a matrix, not a button
For a feature that touches several roles, build a small permission matrix. Put roles (or account states) on one axis and actions on the other. Mark what should be allowed, what should be denied, and what you've actually verified. Keep it limited to the feature and the test accounts you're using.
For example, a project might have an owner, a collaborator, and a user with no membership. You could check whether each can view a resource, edit it, invite another user, or change its visibility. The point isn't to assume every product uses the same rules. The point is to make the product's own rules explicit - and then check whether behavior matches them.
A matrix also prevents a common mistake: assuming authorization is enforced just because a control is hidden. A hidden button might make the UI nicer, but the security question is whether an unauthorized action gets rejected by the system itself.
Assess impact without overstating it
A reproducible permission failure isn't automatically critical. Impact depends on what an unauthorized user can actually do, whose data or resources are affected, and how much access this issue really enables. Be clear about the difference between reading data, changing it, taking an administrative action, or affecting another user.
For a useful report, explain the affected role, resource, and operation; show the expected restriction; and document what you observed. Avoid claiming broad compromise when the evidence supports a narrower behavior. Clear impact descriptions help triage teams reproduce the issue and set an appropriate severity.
This discipline helps both sides. Programs get reports they can act on instead of speculative claims. Researchers spend less time defending conclusions that go beyond what they demonstrated.
Using AI without outsourcing judgment
AI tools can save time in security research. They might help explain unfamiliar code or protocols, organize your notes, generate test ideas, or summarize a long flow. The researcher frames AI as a capable assistant - but one that still needs guidance. The analogy is pretty apt: a fast car doesn't pick the destination, and it certainly doesn't make driving safe.
That distinction matters in bug bounty work. A model can produce a plausible explanation that's wrong, suggest a test that breaks program rules, or treat an unusual response as proof of a vulnerability. "Looks fluent" isn't the same as "verified." You're still responsible for the test, the evidence, and the final report.
Where AI can help
Use AI for bounded tasks where you can check the result. For example, ask it to explain documentation in simpler terms, propose alternative hypotheses for behavior you observed, or turn your notes into a clearer report outline. You can also use it to generate a checklist of questions - then decide which ones are relevant and permitted.
Be careful about what you share. Don't paste secrets, private user data, sensitive program information, or any material the tool's terms don't allow you to submit. Use approved tools and follow both the bounty program's rules and your organization's policies.
What must remain human-verified
Before you treat AI output as useful, validate it against what you can observe in the product and the program's documentation. In particular, independently verify:
- That the test is within scope and safe to perform
- That the behavior is reproducible
- That you understand the affected data or action
- That the explanation matches the evidence
- That your report doesn't overstate impact
Don't submit a finding just because an AI system suggested it. A report should describe what you personally confirmed, with enough detail for a triage team to reproduce it. AI can shorten parts of the work, but it can't take responsibility for your conclusion.
AI features still need security fundamentals
AI-powered products introduce new behaviors and components, but they don't make traditional security reasoning irrelevant. The researcher's point is that authorization failures, weak guardrails, and overlooked capabilities still matter - even when products add "AI experiences."
That's a useful check against novelty bias. An AI feature might require questions about how prompts and outputs are handled, which tools get connected, and how user data is used. But the core investigation still starts with boundaries: who can invoke the capability, what information it can access, what actions it can take, and whether the product enforces those limits. Test the feature's actual design rather than assuming every AI feature is either a brand-new security category or just another normal web page.
Conclusion
The central lesson from this researcher spotlight is simple: productive bug bounty work is less about testing everything and more about choosing a feature, understanding it, and following what the evidence shows across trust boundaries. Feature-first research keeps you deliberate without turning your process into a rigid checklist.
Start with scope. Map actors, resources, and expected permissions. Investigate anomalies with controlled tests, document what you can reproduce, and use AI as support - not as proof. If a feature doesn't produce useful signals after a reasonable investigation, move on. If you find a real issue, report exactly what you confirmed.
For more on the program and its current rules, read the GitHub Bug Bounty program information before testing. If you're ready to participate, submit findings through the program's designated reporting channel, and keep your research safe, in scope, and evidence-led.