Skip to content

Runbook 03 — Web Application Security Assessment

Use this runbook after completing:

Runbook 02 — Reconnaissance and Attack Surface Discovery

At this stage, you should already know:

Which Applications Are In Scope
Which Assets Are High Priority
Which APIs Support the Application
Which Authentication Services Exist
Which Third Parties Must Be Avoided

The objective of this runbook is to move from:

Known Application

to:

Understood
Mapped
Tested
Validated
Web Application

The operating principle is:

Understand First
Model Security Boundaries
Create Hypotheses
Test Methodically
Validate Minimally
Document Clearly

Use this runbook:

  • when beginning assessment of a newly discovered web application.

  • when a high-priority web target is selected.

  • after significant application changes.

  • when new authenticated features are released.

  • when new roles or business workflows appear.

  • before deep authorization or business-logic testing.

  • when comparing current and legacy versions of an application.

  • when retesting a previously assessed web application.

At completion, you should have:

Application Map
User Journey Map
Feature Inventory
Research Account Model
Role Matrix
Object Register
Request Register
API Feature Map
Security Boundary Map
Authorization Matrix
Workflow State Map
Testing Hypotheses
Vulnerability Candidates
Evidence Package
Assessment Summary

Before starting, obtain the current:

Scope Register
Attack Surface Map
Asset Prioritization
Recon Hypotheses
Testing Restrictions
Third-Party Register

You should also have:

Dedicated Research Browser
Intercepting Proxy
Researcher-Controlled Accounts

Create or update:

01 Application_Map.md
02 User_Journey.md
03 Feature_Inventory.csv
04 Research_Accounts.csv
05 Role_Matrix.csv
06 Object_Register.csv
07 Request_Register.csv
08 API_Feature_Map.csv
09 Security_Boundaries.md
10 Authorization_Matrix.csv
11 Workflow_State_Map.md
12 Security_Hypotheses.csv
13 Testing_Log.csv
14 Vulnerability_Candidates.csv
15 Evidence_Register.csv
16 Assessment_Summary.md

Before opening the application for active testing, confirm:

Hostname Is In Scope
Application Is Not Excluded
Testing Method Is Allowed
Automation Limits Are Known
Third Parties Are Excluded

If any status is:

Unknown

stop and resolve it before proceeding.

Include only:

Authorized Application
Authorized API
Authorized Authentication Services

Exclude:

Analytics
Payment Providers
Support Platforms
Advertising
Other Third Parties

Do not begin with:

Find Vulnerabilities

Use something specific, such as:

Understand and assess
the application's
authentication,
authorization,
file-sharing and
organization workflows.

Where supported, prepare:

Account A
Account B

For multi-tenant applications:

Tenant A
└── Account A
Tenant B
└── Account B

If role testing is required:

Tenant A
├── Standard Member
└── Organization Admin

Create:

04 Research_Accounts.csv

with:

Account Role Tenant Purpose Status
Account A Standard User Tenant A Owner testing Active
Account B Standard User Tenant B Cross-user testing Active
Admin A Org Admin Tenant A Role testing Optional

Do not store passwords or live authentication tokens.

Before modifying requests, perform normal activities such as:

Register
Login
View Dashboard
Edit Profile
Create Resource
Upload File
Share Resource
Invite User
Change Settings
Logout

The objective is:

Understand
Application Behavior

Initially use the proxy primarily to capture:

Requests
Responses
API Calls
Cookies
Object IDs
State Changes

Avoid unnecessary request manipulation during this phase.

Create:

02 User_Journey.md

Example:

Visitor
Registration
Verification
Login
Dashboard
Create Organization
Create Project
Upload File
Share File
Invite Member
Account Management
Logout

Step 9 — Identify Security-Critical Transitions

Section titled “Step 9 — Identify Security-Critical Transitions”

Highlight transitions such as:

Guest
Authenticated
Member
Admin
Private
Shared
Active
Revoked
Tenant A
Tenant B

Create:

01 Application_Map.md

Example:

Application
├── Authentication
│ ├── Register
│ ├── Login
│ ├── Password Reset
│ └── Logout
├── Profile
├── Organizations
│ ├── Members
│ ├── Invitations
│ └── Roles
├── Projects
├── Files
│ ├── Upload
│ ├── Download
│ ├── Preview
│ └── Share
├── Developer
│ ├── API Keys
│ └── Integrations
└── Administration

Create:

03 Feature_Inventory.csv

with:

Feature Area Auth Required Role Object Priority

Increase priority for:

Authentication
Private Data
Files
Sharing
Organizations
Administrative Functions
API Keys
Payments
Account Recovery

Examples:

User
Organization
Membership
Project
File
Message
Invitation
Share Link
API Key
Session

Create:

06 Object_Register.csv

with:

Object Identifier Owner/Parent Sensitivity Operations

Example:

User
↓ belongs to
Organization
↓ contains
Project
↓ contains
File

Another:

Organization
↓ creates
Invitation
↓ creates
Membership

Ask:

Does the Project
Belong to the
Specified Organization?
Does the File
Belong to the
Specified Project?
Does the Member
Belong to the
Specified Tenant?

Many authorization weaknesses occur because one object is validated while its parent relationship is not.

Examples:

Guest
Standard User
Member
Manager
Organization Admin
Platform Admin

Do not invent roles that are not observed.

Create:

05 Role_Matrix.csv

Example:

Feature Guest User Member Admin
View Own Profile No Yes Yes Yes
Create Project No Yes Yes Yes
Invite Member No No No Yes
Change Role No No No Yes

Step 18 — Separate UI and Backend Authorization

Section titled “Step 18 — Separate UI and Backend Authorization”

Remember:

Hidden Button
Protected Action

Record any privileged UI action for later backend validation.

Step 19 — Map UI Actions to Backend Requests

Section titled “Step 19 — Map UI Actions to Backend Requests”

For each important feature, identify:

UI Action
HTTP Request
Endpoint
Object
Security Decision

Example:

Download File
GET /api/v2/files/{file_id}
Can This User
Access This File?

Create:

07 Request_Register.csv

with:

Feature Method Endpoint Object Role Security Decision

For important operations save known-good requests:

Authentication/
Authorization/
Projects/
Files/
Organizations/
Developer/

Redact authentication material.

Create:

08 API_Feature_Map.csv

with:

UI Feature API Endpoint Method Object Expected Control

Example:

| View Project | /projects/{id} | GET | Project | Object authorization |
| Change Role | /members/{id} | PATCH | Membership | Role authorization |
| Download File | /files/{id} | GET | File | Ownership/access check |

Look for:

user_id
organization_id
project_id
file_id
member_id
invite_id
token

Record where each identifier appears.

Phase 10 — Identify Client-Controlled Values

Section titled “Phase 10 — Identify Client-Controlled Values”

Step 24 — Record Client-Supplied Security-Relevant Fields

Section titled “Step 24 — Record Client-Supplied Security-Relevant Fields”

Examples:

owner_id
organization_id
role
status
permissions
price
user_id

Ask:

Should the Client
Be Allowed to
Control This?

Step 25 — Identify Expected Server-Controlled Fields

Section titled “Step 25 — Identify Expected Server-Controlled Fields”

Typical server-controlled values include:

Owner
Tenant
Role
Privilege
Account Status
Created By

These observations become later hypotheses.

Create:

09 Security_Boundaries.md

Include at least:

Guest
Authenticated User
User A
User B
Tenant A
Tenant B
Member
Admin
Browser
Backend
Application
File Storage

Expected:

User A
Can Access
User A Resources

but:

User A
Should Not Access
User B Resources

unless explicitly shared.

Expected:

Member
Administrator

Privileged actions must be enforced server-side.

For SaaS:

Tenant A
Tenant B

even when user roles are identical.

Step 30 — Create Expected Authorization Decisions

Section titled “Step 30 — Create Expected Authorization Decisions”

Create:

10 Authorization_Matrix.csv

Example:

Action Own Object Other User Other Tenant Member Admin
View Project Allow Deny Deny Depends Allow
Edit Project Allow Deny Deny Depends Allow
Download File Allow Deny Deny Depends Allow
Change Role N/A N/A N/A Deny Allow

The matrix documents:

Expected
Security Behavior

before testing begins.

Step 31 — Identify Authentication Workflows

Section titled “Step 31 — Identify Authentication Workflows”

Map:

Registration
Login
Logout
Password Change
Password Reset
MFA
Recovery
Session Creation

Identify whether the application uses:

Session Cookie
Bearer Token
JWT
Refresh Token

Record only enough for mapping.

Detailed authentication testing should follow the dedicated authentication runbook when needed.

Document:

Select File
Upload
File Object
Storage

Record:

Upload Endpoint
File Identifier
Owner
Project/Tenant Relationship
Processing

Document:

User
Application
Authorization
File Access

Document:

Owner
Create Share
Token / Link
Recipient Access
Revoke

Create future questions around:

Ownership
Expiration
Revocation
Token Binding

Phase 15 — Map Invitation and Membership Workflows

Section titled “Phase 15 — Map Invitation and Membership Workflows”

Example:

Admin
Create Invitation
Invitation Token
Recipient Accepts
Membership Created

Record:

Assigned Role
Tenant
Recipient
Expiry
Revocation

Document:

Actor
Target Member
Old Role
New Role
Endpoint
Expected Permission

Examples:

Invitation:
Pending
Accepted
Revoked
Expired
Project:
Active
Archived
Deleted
Share Link:
Active
Revoked
Expired

Create:

11 Workflow_State_Map.md

Step 40 — Create State Security Questions

Section titled “Step 40 — Create State Security Questions”

Examples:

Can Revoked Link
Still Work?
Can Expired Invitation
Still Be Accepted?
Can Removed Member
Still Access Resources?
Can Archived Object
Still Be Modified?

Create:

12 Security_Hypotheses.csv

with:

ID Feature Observation Hypothesis Priority Status

Use:

Because
[Observation]
I Believe
[Control Failure]
May Allow
[Capability]
Because project_id
is supplied by the client,
I believe object ownership
may not be enforced
server-side,
which may allow another
authenticated user to
access the project.

Step 44 — Example: Vertical Authorization

Section titled “Step 44 — Example: Vertical Authorization”
Because role changes
are performed through
a normal API request,
I believe a standard member
may be able to invoke
the endpoint directly
if role authorization
is enforced only by the UI.
Because file access
can occur through
share links,
I believe revoked links
may remain usable
if revocation state
is not checked at
access time.

Step 46 — Follow Baseline-Driven Testing

Section titled “Step 46 — Follow Baseline-Driven Testing”

Use:

Known-Good Baseline
Change One Variable
Repeat Request
Compare

Create:

13 Testing_Log.csv

with:

Date Hypothesis Test Expected Observed Result

Record both:

Positive Results
Negative Results

Use:

Account A
Create Object A
Account B
Request Object A

Expected:

Denied

unless explicitly shared.

Use:

Tenant A Resource
Tenant B Account

Expected:

Denied

Use controlled low-privilege and admin accounts where available.

Compare:

Admin Request

against:

Member Request

Change only the authentication context where possible.

If one controlled unauthorized request proves the boundary failure:

Capture Evidence
Stop

Do not enumerate additional unrelated resources.

Before testing an input, determine whether it is used as:

Text
Number
Object ID
URL
File Name
Path
Search Query
Structured JSON

Do not run random payload lists.

Use:

Input Context
Security Hypothesis
Minimal Test

Step 54 — Prefer Non-Destructive Validation

Section titled “Step 54 — Prefer Non-Destructive Validation”

For suspicious interpreter behavior, prefer:

Controlled Errors
Harmless Response Differences
Researcher-Controlled Callbacks
Test Objects

Avoid:

Data Destruction
Bulk Data Extraction
System Disruption

Using controlled files:

Account A
File A
Account B
Request File A

Expected:

Denied

unless sharing is intended.

For controlled share links:

Create
Access
Revoke
Access Again

Expected after revoke:

Denied

Never use:

Customer Files
Production Secrets
System Files

to prove access control.

Example:

Invite Member
Accept Invitation
Membership Created

or:

Create Order
Pay
Complete

Examples:

Only Admin Can Change Roles
Revoked Invitation Cannot Be Accepted
User Cannot Approve Own Restricted Action
Price Must Be Server-Controlled

Ask:

Can Step Be Skipped?
Can State Be Reordered?
Can Restricted Value
Be Changed?
Can Old State
Be Reused?

Use controlled objects and accounts.

Create:

14 Vulnerability_Candidates.csv

with:

ID Hypothesis Observation Evidence Status

Use:

Needs Validation
False Positive
Confirmed
Reported

Remember:

Unexpected Behavior
Candidate
Validation
Finding

Ask:

Can It Be Repeated?
Under Which Account?
Under Which Role?
Against Which Object?
Under Which State?

Possible boundaries:

Authentication
Object Authorization
Tenant Isolation
Role Authorization
Workflow State
File Ownership
Client/Server Trust

Determine what the attacker gains:

Read
Modify
Delete
Share
Assume Role
Perform Restricted Action

Step 66 — Separate Observed and Potential Impact

Section titled “Step 66 — Separate Observed and Potential Impact”

Observed:

Account B accessed
Account A's controlled file.

Potential:

The same missing
ownership control may expose
other user files.

Do not present potential impact as proven.

For each confirmed issue:

Evidence/
└── FIND-001/
├── 01-baseline-request.txt
├── 02-baseline-response.txt
├── 03-test-request.txt
├── 04-test-response.txt
├── 05-screenshot.png
└── 06-timeline.md

Create:

15 Evidence_Register.csv

with:

Evidence Finding Purpose Redacted

Remove:

Passwords
Session Cookies
Bearer Tokens
API Keys
Private Data

Stop immediately if:

Real Customer Data Appears
Unexpected Administrative
Access Is Obtained
Production Secrets Appear
Out-of-Scope Systems Are Reached
Operational Impact Occurs

Also stop once:

Minimum Evidence
Required to Prove
the Vulnerability
Has Been Collected

Create:

16 Assessment_Summary.md

Include:

Target
Assessment Objective
Accounts Used
Application Areas Mapped
Objects
Roles
Security Boundaries
Workflows Tested
Hypotheses Tested
Secure Behaviors
Candidates
Confirmed Findings
Evidence
Recommended Next Actions

Use:

Application Selected
Scope Check
Normal Usage
Map Features
Map Roles
Map Objects
Capture Requests
Map Boundaries
Create Hypotheses
Test Baseline
Modify One Variable
Unexpected?
/ \
No Yes
↓ ↓
Record Candidate
Reproduce
Boundary Broken?
/ \
No Yes
↓ ↓
Reject Validate Impact
Evidence
Stop

During assessment, repeatedly ask:

Can User A
Access User B?
Can Tenant A
Access Tenant B?
Can Member
Act as Admin?
Can Client-Controlled
Values Affect Ownership
or Privilege?
Can Revoked
Access Still Work?
Can Restricted
Workflow States
Be Reused?
Does the Backend
Revalidate Every
Sensitive Action?

Common Failure 1 — Testing Before Understanding

Section titled “Common Failure 1 — Testing Before Understanding”

Avoid:

Find Parameter
Send Payload

before understanding:

Purpose
Owner
Role
State
Expected Behavior

Common Failure 2 — Treating Pages as the Security Model

Section titled “Common Failure 2 — Treating Pages as the Security Model”

Security decisions usually occur around:

Objects
APIs
Roles
States
Relationships

not simply pages.

Remember:

Disabled Field
Server-Side Validation
Hidden Button
Server-Side Authorization

Common Failure 4 — No Object Ownership Model

Section titled “Common Failure 4 — No Object Ownership Model”

Testing file_id without knowing:

Owner
Tenant
Parent Project
Sharing State

can produce incorrect conclusions.

Always preserve:

Legitimate
Expected Behavior

before manipulating requests.

Common Failure 6 — Random Payload Testing

Section titled “Common Failure 6 — Random Payload Testing”

Avoid:

500 Payloads
No Context

Use:

Security Question
Relevant Test

Common Failure 7 — Using Real Customer Resources

Section titled “Common Failure 7 — Using Real Customer Resources”

Authorization testing should use:

Account A
Account B
Controlled Objects

Common Failure 8 — Over-Testing Confirmed Findings

Section titled “Common Failure 8 — Over-Testing Confirmed Findings”

Once a controlled test proves:

Security Boundary Failed

do not continue simply to increase the amount of exposed data.

Common Failure 9 — Ignoring Negative Results

Section titled “Common Failure 9 — Ignoring Negative Results”

Secure behavior is useful information.

Record:

Hypothesis Rejected

so it is not repeatedly tested.

If you prove:

Read One Test File

do not claim:

Full Platform Compromise

without a connected, demonstrated attack path.

Before closing this runbook, confirm:

[ ] Scope validated
[ ] Proxy scope configured
[ ] Research accounts prepared
[ ] User journey mapped
[ ] Features inventoried
[ ] Roles documented
[ ] Objects documented
[ ] Object relationships mapped
[ ] Baseline requests saved
[ ] API features mapped
[ ] Security boundaries defined
[ ] Authorization matrix created
[ ] Application states mapped
[ ] File workflows mapped
[ ] Invitation workflows mapped
[ ] Business rules documented
[ ] Security hypotheses created
[ ] Tests logged
[ ] Negative results recorded
[ ] Vulnerability candidates tracked
[ ] Confirmed findings reproduced
[ ] Evidence redacted
[ ] Stop conditions followed
[ ] Assessment summary completed

This runbook is complete when you can clearly explain:

How the Application Works
Which Roles Exist
Which Objects Exist
Who Owns Them
How Objects Relate
Which API Requests
Perform Important Actions
Which Security Boundaries
Must Be Enforced
Which Hypotheses
Were Tested
Which Behaviors
Were Secure
Which Findings
Were Confirmed
and
What Evidence
Supports Each Finding

Use:

Scope
Normal Usage
User Journey
Features
Roles
Objects
Relationships
Requests
Security Boundaries
Expected Controls
Hypotheses
Controlled Testing
Validation
Evidence
Reporting

Remember:

Page
Security Boundary
Hidden Button
Authorization
Object ID
Object Ownership
Client Validation
Server Validation
Unexpected Response
Confirmed Vulnerability
Potential Impact
Observed Impact
More Exploitation
Better Evidence

A professional web application assessment is built around:

Architecture
+
Users
+
Roles
+
Objects
+
Relationships
+
States
+
Security Boundaries
+
Evidence

The goal is not:

Try Every Payload

The goal is:

Understand
Which Security
Decision Should Occur
and
Verify Whether
the Backend
Enforces It

At completion, update or archive:

01 Application_Map.md
02 User_Journey.md
03 Feature_Inventory.csv
04 Research_Accounts.csv
05 Role_Matrix.csv
06 Object_Register.csv
07 Request_Register.csv
08 API_Feature_Map.csv
09 Security_Boundaries.md
10 Authorization_Matrix.csv
11 Workflow_State_Map.md
12 Security_Hypotheses.csv
13 Testing_Log.csv
14 Vulnerability_Candidates.csv
15 Evidence_Register.csv
16 Assessment_Summary.md

You now have the planned core operational runbooks for the Bug Bounty Hunter Learning Path:

Runbook 01
Bug Bounty Program Intake
and Scope Validation
Runbook 02
Reconnaissance and
Attack Surface Discovery
Runbook 03
Web Application
Security Assessment

Together they create a practical end-to-end operating model:

Program Intake
Authorization
Scope
Reconnaissance
Attack Surface
Application Mapping
Security Boundaries
Hypothesis-Driven Testing
Validation
Evidence
Reporting

The complete progression is now:

Bug Bounty Hunter
Learning Modules
5 Hands-On Labs
3 Core Operational Runbooks
Portfolio Projects
Independent Security Research

The final professional principle for this learning path is:

Know Your Scope
Understand the Target
Map the Security Model
Test with Purpose
Validate Minimally
Preserve Evidence
Communicate Clearly

➡️ Bug Bounty Hunter Learning Path — Labs and Core Runbooks Complete