# Scope model

A usable scope is an intersection of **asset identity, environment, researcher access, permitted action, data boundary, and time**. Payment eligibility is a separate decision. An asset can accept vulnerability reports without authorizing active testing, or permit testing without offering a bounty.

## Program and access dimensions

| Dimension | Values | Consequence |
|---|---|---|
| Visibility | Public, unlisted, invite-only/private | Knowing a private program exists does not enroll you |
| Reward model | Paid bounty, discretionary reward, unpaid VDP, contest prize, contracted assessment | Each uses different eligibility and duplicate/judging rules |
| Knowledge | Black box, gray box, white box | Source or credentials improve visibility; neither expands asset scope |
| Deployment | Vendor SaaS, provided sandbox, own self-hosted instance, customer deployment, offline artifact | The same codebase can have different authorized environments |
| Identity | Unauthenticated, self-registered user, issued researcher account, tenant admin, device owner, local low-privilege user | The starting privilege is part of the finding |
| Lifecycle | Supported release, prerelease/beta, exact commit, version range, fixed contest snapshot | Record exact versions and exclusions |
| Timing | Ongoing, limited campaign, live event, private window, paused, closed | Permission can expire even while a queue or old policy remains visible |
| Disclosure | Confidential, coordinated release, platform-approved disclosure, public advisory | Report submission is not permission to publish |

## Asset taxonomy

| Scope type | Identity to record | Do not infer | Primary test boundary |
|---|---|---|---|
| Exact URL or path | Scheme, hostname, effective port, path and stated matching rules | Other paths, ports, redirected hosts or API origins | Server-side handling of the permitted resource |
| Exact hostname | Canonical hostname and permitted protocols/ports | Sibling hosts, parent domain, origin IP, all ports | Application/service on that named asset |
| Wildcard domain | Literal expression, apex rule, depth rule, exclusions | Apex inclusion, acquired domains, third-party service takeover | Included hostname with ownership and policy confirmed |
| Apex/root domain | Literal root hostname; separate wildcard if provided | Every descendant host | Listed root service |
| IP/CIDR | Exact IPv4/IPv6 prefix, protocols, ports, allocation date | Every virtual host, tenant, or CDN customer on that IP | Authorized network listener or service |
| API | Base URL, version, paths, methods, authentication context | Mobile or partner backend because it uses similar tokens | Object/property/function and tenant authorization |
| Repository | Owner/repo, branch, commit, paths, submodules, releases | Git host infrastructure, all organization repos, deployments | Product code and relevant build/runtime behavior |
| Package/library/SDK | Ecosystem, exact package identity, version, artifact digest | Similar package names, downstream users, registry infrastructure | Caller/input privileges and vulnerable execution path |
| Self-hosted product | Product edition, release/image digest, supported configuration | Every publicly reachable installation | Reachable product flaw in a permitted deployment |
| Mobile application | Store URL, package/bundle ID, version/build, platform | All network endpoints contacted by the application | App/OS/user boundary plus separately scoped backend |
| Desktop/native application | Product, platform, version, architecture, signed artifact hash | Every helper, plug-in, online service or OS bug | Process, privilege, document, update or sandbox boundary |
| Browser extension | Extension ID, store, release, browser/version | Other extensions or arbitrary websites | Message origin, permissions and privileged APIs |
| Cloud resource | Account/project/subscription, region, resource ID, principal | Provider control plane or neighboring tenants | IAM/application authorization on permitted resources |
| Container/Kubernetes | Image digest, cluster, namespace, workload, identity | Host, adjacent namespaces, registry or nodes unless included | Workload/controller/host trust as explicitly scoped |
| AI/LLM/agent | Product/model/build, endpoint, tools, tenant, model artifact hash | All model behavior or all connected SaaS services | Data access, tool authority, action and isolation |
| Smart contract/protocol | Chain ID, address, proxy and implementation, block, source commit | Same-name deployments, all chains, every dependency | Listed impact and contract state invariant |
| Hardware/IoT | Model, board revision, firmware/build, interfaces, physical access assumptions | Cloud companion services or other hardware revisions | Boot, update, interface, identity and data trust |
| Firmware/binary artifact | Download provenance, digest, architecture, version | Permission to flash or test any deployed physical system | Artifact parser/runtime or trust mechanism |
| Organization-wide scope | Explicit ownership wording, acquisition exceptions, third-party clauses | Brand/name/certificate similarity proving ownership | Only assets that meet the program's actual definition |

These are common families, not a universal platform enumeration. A program might separately list browser engines, kernels, databases, cryptographic implementations, telecom equipment, vehicles, industrial systems, identity services, or AI model files. Map each to its precise artifact and execution boundary rather than forcing it into a domain-only scanner.

## Wildcards and URL matching

Treat wildcard semantics as a policy question. A program may define `*.example.com` to cover descendants broadly, while another may enumerate exclusions or interpret depth differently. Do not import TLS certificate wildcard semantics into bounty scope. If the apex is not explicitly covered or the policy is ambiguous, mark it for clarification instead of silently including it.

For your own approved hostname matcher, normalize case and a trailing dot, handle IDNA deliberately, and compare DNS label boundaries. The suffix `example.com` must not match `notexample.com` or `example.com.attacker.invalid`. Exclusions override the broad inclusion rule in your queue. Record the original source string alongside the normalized value.

For URL scopes, parse scheme, host, effective port, and path as separate fields. Do not use an unanchored regex or raw `startswith` comparison as the authorization engine. Encoded separators, normalization by proxies, path-segment boundaries, alternate ports, and redirect destinations require explicit handling. Even same-host redirects can leave a permitted path or port. A URL appearing in an archived page does not mean it still belongs to the organization.

## Third-party boundaries

An application may be in scope while its payment processor, email provider, identity provider, CDN management API, analytics service, or customer-hosted deployment is not. Test the application's handling of integration data where allowed; do not transfer the program's permission to the provider. HackerOne's safe-harbor text explicitly notes that organizations cannot authorize research on third-party infrastructure and that those parties are not bound by the statement. [Gold Standard Safe Harbor](https://docs.hackerone.com/en/articles/8494525-gold-standard-safe-harbor-statement).

Similarly, a DNS record pointing to a service is evidence of a dependency, not a license to claim the corresponding bucket, project, tenant, app name, or email domain. Some providers prohibit takeover testing independently of the target program. Use the current provider rules and a non-destructive proof path in the cloud chapter.

## Permission to disclose versus permission to test

`security.txt` identifies disclosure information. Its presence does not itself authorize testing; the RFC also says the file's domain/IP scope does not automatically extend to parents or subdomains. Follow its policy link and verify currency and provenance. [RFC 9116, sections 3.1 and 5.5](https://www.rfc-editor.org/rfc/rfc9116.html).

Public source code allows reading and use under its license; it does not grant permission to attack vendor infrastructure or customer installations. A self-hosted lab provides an environment you control, but a reward still depends on the program's accepted products, versions, configurations, attack assumptions, and reporting rules. An unrestricted source review is not necessarily an unrestricted bounty.

## Actions are part of scope

| Action class | Decision before use | Bounded alternative when unclear |
|---|---|---|
| Public source/documentation review | Applicable license, confidentiality, retrieval terms | Read official published artifacts |
| Third-party passive discovery | Provider terms and data handling | Keep candidates outside the active queue |
| DNS/HTTP/service probing | Approved destination, method, rate and testing window | Validate scope first; review existing evidence |
| Authenticated state changes | Owned accounts/data and allowed workflows | Synthetic records in issued test tenants |
| Out-of-band callbacks | Callback service approval and data controls | Owned callback with a non-sensitive unique marker |
| Concurrency, load, fuzzing | Explicit limits and service-impact tolerance | Local harness or small program-approved sequence |
| Credential/secret validation | Specific program rule and ownership | Report location and redacted structure without using it |
| Resource or subdomain takeover | Target and provider authorization | DNS/configuration evidence without claiming resources |
| Social engineering, physical entry, radio tests | Explicit applicable authorization | Do not run a generic bounty workflow against these surfaces |
| Destructive data, fund movement, persistence, pivoting | Usually restricted; exact program permission necessary | Local reproduction and minimum proof of the initial boundary |

Do not invent a default traffic allowance. An internal conservative request limit controls your own tools; it does not replace program permission. Handle `429`, health degradation, or unexpected real user data as reasons to stop and reassess.

## Turning all.txt into a scoped review queue

The supplied file contains 5,520 unique nonempty hostname-like entries, predominantly associated by name with a single brand and related domains. This observation is a local string analysis. It establishes neither ownership nor active program status, and no network activity was performed against it.

1. Preserve the original file and its hash. Normalize into a separate candidate table without discarding the original value.
2. Add discovery source, discovery time, policy URL, policy review time, matching rule, exclusions, environment, allowed techniques, and decision reason. Unknown values stay unknown.
3. Resolve the program policy through official sources. Compare exact rules to each candidate. Do not use a third-party scope aggregator as the final authority.
4. Assign one status: `candidate`, `needs clarification`, `approved for specified actions`, `excluded`, or `stale`. Approval includes a specific policy snapshot and expiry/review trigger.
5. Export only the approved subset required for the next action. Keep candidate discovery output separate from the tool input.
6. Recheck policy and relevant ownership before a later session. Scope drift should invalidate queued actions, not merely update a dashboard label.

| Candidate example | Known from list | Missing | Decision |
|---|---|---|---|
| A hostname containing `stage` | A string suggesting an environment | Actual ownership, service, permission, excluded environments | Candidate only |
| An `api` subdomain | A name that might serve an API | API base paths, accounts, allowed test methods | Candidate only |
| A `mail` or `vpn` hostname | A service-like label | Whether network service testing is allowed | Candidate only |
| A regional brand domain | Similar naming | Legal/technical ownership and explicit inclusion | Candidate only |

The inventory is not embedded into this website as a clickable attack queue. The reusable scope template supports working on an approved subset when permission is established.

## Admission checklist

- [ ] Program is currently accepting the intended report type.
- [ ] Researcher eligibility and private-program enrollment are satisfied.
- [ ] Asset identifier, version, environment, and ownership match the policy.
- [ ] Exclusions and third-party dependencies have been reviewed.
- [ ] Intended techniques, rate, concurrency, and test window are permitted.
- [ ] Authentication identity and data used for proof are controlled or issued for testing.
- [ ] Safe harbor and disclosure terms have been read without assuming they bind third parties.
- [ ] Reward eligibility is recorded separately from permission to test.
- [ ] A stop condition and reporting route are recorded.
- [ ] Policy changes invalidate pending actions until re-reviewed.

## Recheck policy changes before resuming work

Keep a dated policy snapshot and a small decision log alongside the [scope template](https://bug-bounty-field-manual.kmahshooq.chatgpt.site/templates.html). Recheck at the start of an active session, before a materially different technique, and before submission or retesting. The sequence below is an operational recommendation; the specific program determines when permission starts or ends.

| What changed | What to suspend or re-evaluate | What can remain in your notes |
|---|---|---|
| Asset removed, engagement paused, invitation revoked, or testing window closed | Pending probes and new interactions with the affected asset; confirm the applicable reporting route for existing evidence | Earlier evidence, its collection time and the policy that applied then |
| New exclusion, lower rate allowance, or narrower allowed method | Jobs using that method and shared worker budgets until their configuration matches the reviewed rule | Passive observations and hypotheses, labeled with their review status |
| Repository branch, product edition, deployment or contract implementation changes | Assumptions about affected versions, reachability and the proof environment | The original pinned reproduction; do not silently relabel it as the new version |
| Reward table, submission cap, deposit, KYC or proof requirements change | Commercial selection and submission readiness; read any transition/grandfathering language | Testing permission, only if the relevant policy still grants it independently |
| Policy cannot be loaded or two official instructions conflict | Actions whose permission depends on the missing or contradictory information | A `needs clarification` decision; absence of a readable page is not evidence of permission |

For example, Bugcrowd distinguishes an invitation received while an engagement is launching from an engagement that is in progress. GitHub’s July 2026 bounty announcement explicitly distinguished reports before and after its effective date. Treat such timing rules as program-specific evidence, rather than assuming every policy update retroactively changes earlier reports. [Bugcrowd invitation and engagement timing](https://docs.bugcrowd.com/researchers/invites/viewing-and-accepting-engagement-invitations/), [GitHub transition terms](https://github.blog/security/next-chapter-restructuring-githubs-bug-bounty-program/).

- [ ] The decision records policy URL, retrieval time, effective date when stated, asset/environment and planned action.
- [ ] A relevant change suspends affected queued jobs until reviewed.
- [ ] Previously collected evidence retains its original version and timestamp.
- [ ] Testing permission, open reporting intake and funded reward status are updated independently.
- [ ] Any unresolved question names the exact rule or action that needs clarification.

## References

- Foudil, E., and Y. Shafranovich / IETF. [RFC 9116: A File Format to Aid in Security Vulnerability Disclosure](https://www.rfc-editor.org/rfc/rfc9116.html). April 2022; accessed 11 September 2026. Used for security.txt location, scope and lack of implied testing permission.
- HackerOne. [Gold Standard Safe Harbor Statement](https://docs.hackerone.com/en/articles/8494525-gold-standard-safe-harbor-statement). 11 August 2025; accessed 11 September 2026. Used for third-party and policy-compliance limits.
- Uploaded all.txt. Local supplied copy; accessed 11 September 2026. Used only for line-level inventory analysis; no public URL or authorization evidence.
