Lab 04 — Web Application Mapping and Security Boundary Analysis
Welcome to:
Lab 04 — Web Application Mapping and Security Boundary Analysis
In Lab 03, you built a validated and prioritized attack surface.
You now know:
Which Assets Exist
Which Applications Are Live
Which APIs Are Exposed
Which Systems Are High Priority
Which Assets Are Third PartyThe next step is to move inside the primary application and understand:
How the ApplicationActually WorksA common mistake in Bug Bounty hunting is to begin testing before understanding:
Users
Roles
Objects
Features
Workflows
Trust RelationshipsProfessional research should instead follow:
Use Application Normally ↓Map Features ↓Map Objects ↓Map Roles ↓Capture Requests ↓Identify Security Boundaries ↓Create Hypotheses ↓Begin TestingYour mission in this lab is to build a complete security model of the fictional NovaCloud application before attempting vulnerability exploitation.
Mission Information
Section titled “Mission Information”Your Role
Section titled “Your Role”You are operating as a:
Bug Bounty Hunter
Application Security Researchercontinuing research against:
NovaCloud Security Research Program
Your primary target is:
app.novacloud.testwith supporting API traffic through:
api.novacloud.testYou will use only:
Researcher-Controlled Accounts
Researcher-Controlled Objects
Authorized Training AssetsMission Objective
Section titled “Mission Objective”By the end of this lab, you should be able to explain:
Who Uses the Application?
Which Roles Exist?
Which Objects Exist?
Who Owns Each Object?
Which Features Exist?
Which APIs Power Them?
Which Security Boundaries Exist?
Where Must AuthorizationBe Enforced?Lab Objectives
Section titled “Lab Objectives”By completing this lab, you will learn how to:
-
use a web application from a legitimate user perspective.
-
map user journeys.
-
identify authentication workflows.
-
identify application roles.
-
identify tenant relationships.
-
map application features.
-
identify backend objects.
-
document object ownership.
-
capture baseline HTTP requests.
-
map UI actions to API requests.
-
identify object identifiers.
-
understand role-based access.
-
build authorization matrices.
-
identify horizontal trust boundaries.
-
identify vertical trust boundaries.
-
identify tenant boundaries.
-
identify client-to-server trust boundaries.
-
map file and sharing workflows.
-
map invitation workflows.
-
understand state transitions.
-
identify business logic assumptions.
-
build structured security hypotheses.
-
create a testing backlog for later labs.
Prerequisites
Section titled “Prerequisites”You should have completed:
Lab 01 — Build Your Professional Bug Bounty Research Environment
Lab 02 — Bug Bounty Program Scope Analysis and Target Prioritization
Lab 03 — Reconnaissance and Attack Surface MappingYou should also understand:
HTTP
Sessions
Cookies
APIs
Authentication
Authorization
Basic Web Application ArchitectureLab Scenario
Section titled “Lab Scenario”NovaCloud provides a multi-tenant collaboration platform.
Users can:
Register
Login
Create Organizations
Invite Members
Create Projects
Upload Files
Share Files
Manage Profiles
Generate API KeysThe application architecture is:
Browser ↓app.novacloud.test ↓api.novacloud.test ↓Application Services ↓Database / File StorageYour task is not to exploit anything yet.
Your task is to build the application security model.
Lab Deliverables
Section titled “Lab Deliverables”By the end of this lab, create:
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 Application_Hypotheses.csv
13 Testing_Backlog.csv
14 Application_Mapping_Summary.mdPart 1 — Prepare Research Accounts
Section titled “Part 1 — Prepare Research Accounts”For this lab create:
Account A
Account BIf the training application supports organizations, create:
Tenant A
Tenant BRecommended structure:
Tenant A├── Account A└── Project A
Tenant B├── Account B└── Project BPart 2 — Create Research Account Register
Section titled “Part 2 — Create Research Account Register”Create:
04 Research_Accounts.csvUse:
| Account | Role | Tenant | Purpose | Status |
|---|---|---|---|---|
| Account A | Standard User | Tenant A | Owner-side testing | Active |
| Account B | Standard User | Tenant B | Cross-user testing | Active |
| Admin A | Organization Admin | Tenant A | Role testing | Optional |
Do not place passwords or live tokens in this file.
Part 3 — Start as a Normal User
Section titled “Part 3 — Start as a Normal User”Do not immediately open the proxy repeater and modify requests.
First use the application normally.
Perform:
Register
Verify Account
Login
View Dashboard
Edit Profile
Create Organization
Create Project
Upload File
Share File
Invite Member
LogoutObserve:
What Changes?
What Objects Are Created?
Which Roles Matter?
Which Requests Occur?Part 4 — Build the User Journey
Section titled “Part 4 — Build the User Journey”Create:
02 User_Journey.mdExample:
Visitor ↓Register ↓Email Verification ↓Login ↓Dashboard ↓Create Organization ↓Create Project ↓Upload File ↓Share File ↓Invite Member ↓Manage Account ↓LogoutPart 5 — Why User Journey Mapping Matters
Section titled “Part 5 — Why User Journey Mapping Matters”Security vulnerabilities often occur between:
Stepsnot only inside individual pages.
For example:
Invite User ↓Assign Role ↓Accept Invitationmay contain security assumptions that are invisible if you inspect only:
Invite PagePart 6 — Build Application Map
Section titled “Part 6 — Build Application Map”Create:
01 Application_Map.mdExample:
NovaCloud Application│├── Authentication│ ├── Registration│ ├── Login│ ├── Password Reset│ ├── Session│ └── Logout│├── Profile│ ├── View Profile│ └── Edit Profile│├── Organizations│ ├── Create Organization│ ├── View Organization│ ├── Invite Members│ ├── Change Roles│ └── Remove Members│├── Projects│ ├── Create Project│ ├── View Project│ ├── Edit Project│ ├── Delete Project│ └── Share Project│├── Files│ ├── Upload│ ├── Download│ ├── Preview│ ├── Share│ └── Delete│├── API│ ├── Profile│ ├── Projects│ ├── Files│ └── Invitations│└── Developer ├── API Keys └── IntegrationsPart 7 — Create Feature Inventory
Section titled “Part 7 — Create Feature Inventory”Create:
03 Feature_Inventory.csvUse:
| Feature | Area | Authentication | Role | Primary Object | Priority |
|---|---|---|---|---|---|
| Login | Authentication | No | Guest | Session | High |
| Edit Profile | Profile | Yes | User | User | Medium |
| Create Project | Projects | Yes | User | Project | High |
| Upload File | Files | Yes | User | File | High |
| Invite Member | Organization | Yes | Admin | Invitation | High |
| Change Role | Organization | Yes | Admin | Membership | High |
| Generate API Key | Developer | Yes | User | API Key | High |
Part 8 — Identify Application Objects
Section titled “Part 8 — Identify Application Objects”Objects are one of the most important concepts in authorization testing.
NovaCloud may contain:
User
Organization
Membership
Project
File
Invitation
Share Link
API Key
SessionPart 9 — Create Object Register
Section titled “Part 9 — Create Object Register”Create:
06 Object_Register.csvUse:
| Object | Identifier | Owner / Parent | Sensitivity | Operations |
|---|---|---|---|---|
| User | user_id | User | High | Read / Update |
| Organization | org_id | Members | High | CRUD |
| Project | project_id | Organization | High | CRUD |
| File | file_id | Project/User | High | CRUD / Share |
| Invitation | invite_id | Organization | Medium | Create / Accept / Revoke |
| Share Link | token/link_id | File | High | Create / Revoke |
| API Key | key_id | User | High | Create / Revoke |
Part 10 — Identify Object Relationships
Section titled “Part 10 — Identify Object Relationships”Create relationships such as:
User ↓ belongs toOrganization ↓ containsProject ↓ containsFileAnother:
Organization ↓ createsInvitation ↓ createsMembershipAnother:
File ↓ createsShare LinkPart 11 — Why Relationships Matter
Section titled “Part 11 — Why Relationships Matter”Authorization may correctly validate:
Project IDbut fail to validate:
Projectbelongs toOrganizationThis creates opportunities for:
Nested ObjectAuthorization FailurePart 12 — Map Object Ownership
Section titled “Part 12 — Map Object Ownership”Example:
Tenant A│├── Account A├── Project A└── File A
Tenant B│├── Account B├── Project B└── File BThis gives you controlled ownership boundaries for future testing.
Part 13 — Identify Roles
Section titled “Part 13 — Identify Roles”Possible roles include:
Guest
Standard User
Organization Member
Organization Admin
Platform AdminYour training environment may expose only some of these.
Record only confirmed roles.
Part 14 — Create Role Matrix
Section titled “Part 14 — Create Role Matrix”Create:
05 Role_Matrix.csvExample:
| Feature | Guest | User | Org Member | Org Admin |
|---|---|---|---|---|
| Login | Yes | N/A | N/A | N/A |
| View Own Profile | No | Yes | Yes | Yes |
| Create Project | No | Yes | Yes | Yes |
| Invite Member | No | No | No | Yes |
| Change Member Role | No | No | No | Yes |
| View Organization | No | Depends | Yes | Yes |
Part 15 — UI Permission vs Server Permission
Section titled “Part 15 — UI Permission vs Server Permission”Important principle:
Button Hidden ≠Action ProtectedFor example:
Standard Usermay not see:
Change Rolebutton.
But later testing must verify whether the backend actually blocks:
Role Change API RequestPart 16 — Configure Proxy
Section titled “Part 16 — Configure Proxy”Use your dedicated research browser.
Route:
Browser ↓Intercepting Proxy ↓NovaCloudConfigure scope for:
app.novacloud.test
api.novacloud.test
authorized lab subdomainsExclude known third-party services.
Part 17 — Browse with Interception Off Initially
Section titled “Part 17 — Browse with Interception Off Initially”Use the proxy primarily as:
Recorderwhile navigating normally.
Allow requests to flow and inspect:
HTTP HistoryThis helps you understand application behavior without constantly interrupting the workflow.
Part 18 — Map UI Actions to Requests
Section titled “Part 18 — Map UI Actions to Requests”For each feature, identify the backend request.
Example:
Click:Create Project ↓Request:POST /api/v2/projectsAnother:
Click:Open File ↓Request:GET /api/v2/files/{file_id}Part 19 — Create Request Register
Section titled “Part 19 — Create Request Register”Create:
07 Request_Register.csvUse:
| Feature | Method | Endpoint | Object | Auth | Role |
|---|---|---|---|---|---|
| View Profile | GET | /api/v2/profile | User | Yes | User |
| Create Project | POST | /api/v2/projects | Project | Yes | User |
| View Project | GET | /api/v2/projects/{id} | Project | Yes | User |
| Upload File | POST | /api/v2/files | File | Yes | User |
| Download File | GET | /api/v2/files/{id} | File | Yes | User |
| Invite User | POST | /api/v2/invitations | Invitation | Yes | Admin |
Part 20 — Save Baseline Requests
Section titled “Part 20 — Save Baseline Requests”For important features save clean baseline requests.
Examples:
05-Requests/│├── Authentication/│ ├── login.txt│ └── logout.txt│├── Projects/│ ├── create-project.txt│ └── view-project.txt│├── Files/│ ├── upload-file.txt│ └── download-file.txt│└── Organizations/ ├── invite-member.txt └── change-role.txtRedact authentication material in saved copies.
Part 21 — Why Baselines Matter
Section titled “Part 21 — Why Baselines Matter”Future tests will follow:
Known-Good Request ↓Modify One Variable ↓Compare BehaviorWithout a baseline, you may not know whether:
Unexpected Responsewas caused by your test or normal application state.
Part 22 — Identify Object Identifiers
Section titled “Part 22 — Identify Object Identifiers”Look for identifiers in:
URL
JSON Body
Query Parameters
Headers
API ResponsesExamples:
user_id
org_id
project_id
file_id
invite_idPart 23 — Identifier Example
Section titled “Part 23 — Identifier Example”Request:
GET /api/v2/projects/2001 HTTP/1.1Host: api.novacloud.testAuthorization: Bearer <TOKEN>Potential object:
Project 2001Record:
Identifier Type:project_idPart 24 — Do Not Modify IDs Yet
Section titled “Part 24 — Do Not Modify IDs Yet”This lab focuses on:
Mappingnot:
Authorization ExploitationSimply document where identifiers appear.
Part 25 — Map API Features
Section titled “Part 25 — Map API Features”Create:
08 API_Feature_Map.csvUse:
| UI Feature | API Endpoint | Method | Object | Security Decision |
|---|---|---|---|---|
| View Project | /projects/{id} | GET | Project | Can user read project? |
| Rename Project | /projects/{id} | PATCH | Project | Can user modify project? |
| Download File | /files/{id} | GET | File | Can user access file? |
| Invite Member | /invitations | POST | Invitation | Can user invite members? |
| Change Role | /members/{id} | PATCH | Membership | Can user assign role? |
Part 26 — Map Authentication Flow
Section titled “Part 26 — Map Authentication Flow”Document:
Registration ↓Verification ↓Login ↓Session Creation ↓Authenticated Requests ↓LogoutPart 27 — Identify Session Mechanism
Section titled “Part 27 — Identify Session Mechanism”Determine whether the application uses:
Session Cookie
Bearer Token
JWT
Other TokenDo not attempt to break it yet.
Record:
Where Is It Sent?
Cookie or Header?
Does It Change After Login?Part 28 — Map Logout Behavior
Section titled “Part 28 — Map Logout Behavior”Observe normal behavior:
Authenticated ↓Logout ↓Login PageRecord whether the browser:
Removes Cookie
Changes Token
RedirectsActual revocation validation comes in later labs.
Part 29 — Map Password Reset
Section titled “Part 29 — Map Password Reset”Without attacking it, document:
Request Reset ↓Receive Reset Mechanism ↓Reset Password ↓LoginIdentify:
Endpoints
Tokens
State ChangesPart 30 — Map Organization Workflow
Section titled “Part 30 — Map Organization Workflow”Example:
Create Organization ↓Become Admin ↓Invite Member ↓Member Accepts ↓Membership CreatedPart 31 — Map Invitation Workflow
Section titled “Part 31 — Map Invitation Workflow”Create:
Admin ↓Creates Invitation ↓Invite ID / Token ↓Invitee ↓Accepts ↓MembershipThis creates future questions around:
Token Binding
Role Assignment
Expiration
Replay
Tenant BindingPart 32 — Map File Workflow
Section titled “Part 32 — Map File Workflow”Document:
Select File ↓Upload Request ↓File Object Created ↓Storage ↓File Listed ↓Download / PreviewPart 33 — Map File Sharing
Section titled “Part 33 — Map File Sharing”Example:
File Owner ↓Create Share Link ↓Share Token ↓Recipient ↓Access FileIdentify:
Who Creates Link?
What Object Is Linked?
Can Link Be Revoked?
Does It Expire?Do not test weaknesses yet.
Part 34 — Map Project Workflow
Section titled “Part 34 — Map Project Workflow”Document:
Create Project ↓Project ID ↓Add Members ↓Create Files ↓Update Project ↓Archive / DeletePart 35 — Map Developer API Key Workflow
Section titled “Part 35 — Map Developer API Key Workflow”If available:
User ↓Generate API Key ↓Key Created ↓API Access ↓Revoke KeySecurity questions for later:
What Permissions?
What Scope?
What Happens After Revocation?Part 36 — Identify Client-Controlled Values
Section titled “Part 36 — Identify Client-Controlled Values”Look for fields such as:
user_id
org_id
project_id
role
owner_id
status
price
permissionsAsk:
Should the ClientControl This?Do not modify them yet.
Part 37 — Identify Server-Controlled Values
Section titled “Part 37 — Identify Server-Controlled Values”Likely server-controlled values include:
Created By
Role
Owner
Tenant
Account Status
Internal PermissionsThis distinction creates future mass-assignment and authorization hypotheses.
Part 38 — Map Security Boundaries
Section titled “Part 38 — Map Security Boundaries”Create:
09 Security_Boundaries.mdBegin with:
# Security Boundaries
## Boundary 1 — Guest → Authenticated User
Control:Authentication
Sensitive Functions:ProfileProjectsFilesOrganizations
## Boundary 2 — User A → User B
Control:Object-Level Authorization
Objects:ProfileProjectsFiles
## Boundary 3 — Tenant A → Tenant B
Control:Tenant Isolation
Objects:OrganizationsProjectsFilesMemberships
## Boundary 4 — Member → Organization Admin
Control:Role-Based Authorization
Functions:Invite MemberChange RoleRemove Member
## Boundary 5 — Browser → API
Control:Server-Side Validation
Risk:Client values must not be trusted.
## Boundary 6 — Application → File Storage
Control:Backend Authorization
Risk:Signed or direct file access mustremain bound to authorized objects.Part 39 — Horizontal Security Boundary
Section titled “Part 39 — Horizontal Security Boundary”Horizontal authorization concerns users with similar privilege.
Example:
User A ↓User B's FileThe expected control is:
Object-LevelAuthorizationPart 40 — Vertical Security Boundary
Section titled “Part 40 — Vertical Security Boundary”Vertical authorization concerns:
Lower Privilege ↓Higher PrivilegeExample:
Organization Member ↓Organization Admin FunctionPart 41 — Tenant Boundary
Section titled “Part 41 — Tenant Boundary”Multi-tenant SaaS applications must enforce:
Tenant A ≠Tenant Beven when users have equivalent roles.
Part 42 — Client/Server Boundary
Section titled “Part 42 — Client/Server Boundary”The browser is:
User-ControlledTherefore the backend should not trust:
Hidden Form Fields
Disabled Buttons
Client-Side Roles
Object IDs
Client-Side Validationwithout server-side checks.
Part 43 — Build Authorization Matrix
Section titled “Part 43 — Build Authorization Matrix”Create:
10 Authorization_Matrix.csvExample:
| Action | User A Own | User B Object | Tenant B Object | Member | Admin |
|---|---|---|---|---|---|
| View Profile | Allow | Deny | N/A | Allow | Allow |
| View Project | Allow | Deny | Deny | Depends | Allow |
| Edit Project | Allow | Deny | Deny | Depends | Allow |
| Download File | Allow | Deny | Deny | Depends | Allow |
| Invite Member | N/A | N/A | N/A | Deny | Allow |
| Change Role | N/A | N/A | N/A | Deny | Allow |
At this stage these are:
ExpectedSecurity DecisionsLater labs will validate them.
Part 44 — Why Expected Decisions Matter
Section titled “Part 44 — Why Expected Decisions Matter”You cannot identify:
Authorization Failureunless you first know:
What AuthorizationShould Have HappenedPart 45 — Map Application States
Section titled “Part 45 — Map Application States”Many objects have states.
Examples:
Invitation:PendingAcceptedRevokedExpired
Project:ActiveArchivedDeleted
Account:ActiveSuspendedDisabledPart 46 — Create Workflow State Map
Section titled “Part 46 — Create Workflow State Map”Create:
11 Workflow_State_Map.mdExample:
# Invitation
Created ↓Pending ↓Accepted
Alternative:Pending ↓Revoked
Alternative:Pending ↓ExpiredPart 47 — State Security Questions
Section titled “Part 47 — State Security Questions”Future questions may include:
Can Revoked InvitationBe Accepted?
Can Expired LinkStill Work?
Can Archived ProjectBe Modified?
Can Removed MemberStill Access Resources?Part 48 — Identify Business Rules
Section titled “Part 48 — Identify Business Rules”Document expected rules such as:
Only Organization AdminCan Change RolesOnly Authorized MembersCan Access Project FilesRevoked Share LinksShould Stop WorkingDeleted API KeysShould No Longer AuthenticatePart 49 — Build Security Assumption List
Section titled “Part 49 — Build Security Assumption List”Create notes such as:
ASSUMPTION-001
The backend assumesproject_id belongs tothe authenticated user's tenant.ASSUMPTION-002
Only organization adminscan submit role changes.ASSUMPTION-003
File download authorizationoccurs before generatingstorage access.These become later hypotheses.
Part 50 — Convert Mapping into Hypotheses
Section titled “Part 50 — Convert Mapping into Hypotheses”Create:
12 Application_Hypotheses.csvUse:
| ID | Feature | Observation | Hypothesis | Priority |
|---|
Part 51 — Hypothesis 1: Project Authorization
Section titled “Part 51 — Hypothesis 1: Project Authorization”Observation:
Project IDis presentin URL.Hypothesis:
A standard user may be ableto access another user'sproject by substituting adifferent project identifierif object authorization isnot enforced server-side.Priority:
HighPart 52 — Hypothesis 2: File Authorization
Section titled “Part 52 — Hypothesis 2: File Authorization”Observation:
File download usesfile_id.Hypothesis:
A user may be ableto download a fileowned by another useror tenant if ownershipis not validated.Part 53 — Hypothesis 3: Role Change
Section titled “Part 53 — Hypothesis 3: Role Change”Observation:
Organization adminssend role valuesthrough the API.Hypothesis:
A standard organization membermay be able to call the samerole-change endpoint directlyif server-side role authorizationis missing.Part 54 — Hypothesis 4: Invitation Binding
Section titled “Part 54 — Hypothesis 4: Invitation Binding”Observation:
Invitation acceptanceuses invitation token.Hypothesis:
An invitation token maynot be correctly bound tothe intended user, tenantor assigned role.Part 55 — Hypothesis 5: Revoked Share Link
Section titled “Part 55 — Hypothesis 5: Revoked Share Link”Observation:
Share links canbe revoked.Hypothesis:
A previously generatedshare link may remainusable after revocationif link state is notvalidated at access time.Part 56 — Hypothesis 6: API Key Revocation
Section titled “Part 56 — Hypothesis 6: API Key Revocation”Observation:
Users can createand revoke API keys.Hypothesis:
A revoked API key mayremain valid if backendauthorization relies oncached credential state.Part 57 — Hypothesis 7: Sensitive Property
Section titled “Part 57 — Hypothesis 7: Sensitive Property”Observation:
Profile update requestcontains multiple JSONproperties.Hypothesis:
The backend may acceptsensitive properties notintended to be user-controlledif property allowlistingis incomplete.Part 58 — Hypothesis 8: Tenant Relationship
Section titled “Part 58 — Hypothesis 8: Tenant Relationship”Observation:
Project requests containboth org_idand project_id.Hypothesis:
The backend may validatethe organization and projectindependently without verifyingthat the project belongsto the specified organization.Part 59 — Hypothesis 9: Removed Member Access
Section titled “Part 59 — Hypothesis 9: Removed Member Access”Observation:
Organization memberscan be removed.Hypothesis:
A removed member may retainaccess through an existingsession, cached permissionor API token.Part 60 — Hypothesis 10: Hidden Admin Function
Section titled “Part 60 — Hypothesis 10: Hidden Admin Function”Observation:
JavaScript contains/admin/export.Hypothesis:
A standard user may be ableto invoke the administrativeexport function directlyif access control existsonly in the frontend.Part 61 — Create Testing Backlog
Section titled “Part 61 — Create Testing Backlog”Create:
13 Testing_Backlog.csvUse:
| Priority | Hypothesis | Feature | Required Accounts | Status |
|---|---|---|---|---|
| P1 | Cross-user project access | Projects | A + B | Ready |
| P1 | Cross-user file access | Files | A + B | Ready |
| P1 | Cross-tenant project access | Organizations | Tenant A + B | Ready |
| P1 | Role change authorization | Membership | Member + Admin | Ready |
| P1 | Share-link revocation | Sharing | Account A | Ready |
| P2 | Invitation binding | Invitations | A + B | Ready |
| P2 | API key revocation | Developer | Account A | Ready |
| P2 | Sensitive property update | Profile | Account A | Ready |
Part 62 — Do Not Test Everything at Once
Section titled “Part 62 — Do Not Test Everything at Once”Prioritize:
High-ImpactSecurity Boundariesfirst.
Recommended order:
1. Object Authorization
2. Tenant Isolation
3. Role Authorization
4. File Access
5. Sharing
6. Authentication State
7. Business Logic
8. Lower-Priority FeaturesPart 63 — Create Request Ownership Notes
Section titled “Part 63 — Create Request Ownership Notes”For baseline requests annotate:
Account:Account A
Tenant:Tenant A
Object:Project A
Expected Authorization:AllowedThis makes later differential testing much easier.
Part 64 — Example Baseline Annotation
Section titled “Part 64 — Example Baseline Annotation”Request ID:REQ-PROJECT-001
Account:Account A
Role:Standard User
Object:Project A
Owner:Tenant A
Expected:AllowPart 65 — Record Negative Space
Section titled “Part 65 — Record Negative Space”Also note functionality that does not exist.
Example:
No MFA Feature Observed
No Billing Feature in Training App
No Platform Admin Role AvailableDo not invent attack surfaces.
Part 66 — Distinguish Confirmed and Assumed Architecture
Section titled “Part 66 — Distinguish Confirmed and Assumed Architecture”Confirmed:
app.novacloud.testcallsapi.novacloud.testAssumed:
API probablyuses microservicesKeep these separate.
Part 67 — Facts vs Hypotheses
Section titled “Part 67 — Facts vs Hypotheses”Create two mental categories:
Facts
HypothesesExample fact:
POST /api/v2/invitationscontains role parameter.Hypothesis:
Standard user may beable to assign admin role.Never report the hypothesis as though it were already proven.
Part 68 — Map Error Behavior
Section titled “Part 68 — Map Error Behavior”While using the application normally, record:
401
403
404
Validation Errors
Conflict ErrorsThese responses help establish expected application behavior.
Part 69 — Authorization Denial Baseline
Section titled “Part 69 — Authorization Denial Baseline”If an operation is legitimately denied, preserve that request/response.
Example:
Standard User ↓Admin Feature ↓403This becomes a useful comparison later.
Part 70 — Map API Response Shapes
Section titled “Part 70 — Map API Response Shapes”Document object structures.
Example:
{ "id": "project-1001", "name": "Research Project", "organization_id": "org-100", "owner_id": "user-101"}This reveals important:
Object RelationshipsPart 71 — Identify Potential Server-Controlled Fields
Section titled “Part 71 — Identify Potential Server-Controlled Fields”From responses you may see:
owner_id
organization_id
role
status
created_byLater compare whether these appear in editable requests.
Part 72 — Build Client vs Server Map
Section titled “Part 72 — Build Client vs Server Map”Example:
Client Controls├── project_name├── description└── file_name
Server Should Control├── owner_id├── organization_id├── role└── account_statusPart 73 — Map Sharing Trust Boundary
Section titled “Part 73 — Map Sharing Trust Boundary”Sharing often creates:
Authenticated ↓Create Link ↓Possession-Based AccessThis introduces a new boundary:
Identity-Based Access ↓Token-Based AccessPart 74 — Map Invitation Trust Boundary
Section titled “Part 74 — Map Invitation Trust Boundary”Invitation systems transition:
Unknown User ↓Invitation Token ↓Organization MembershipThis is a high-value:
Privilege CreationBoundaryPart 75 — Map API Key Trust Boundary
Section titled “Part 75 — Map API Key Trust Boundary”API key creation transitions:
Authenticated User ↓Longer-Lived Credential ↓API AccessImportant future questions include:
Scope
Revocation
Ownership
PermissionsPart 76 — Map File Storage Boundary
Section titled “Part 76 — Map File Storage Boundary”Conceptually:
User ↓Application Authorization ↓File Service ↓StorageFuture tests should determine whether:
Storage Accessremains controlled by:
Application AuthorizationPart 77 — Identify High-Risk Boundaries
Section titled “Part 77 — Identify High-Risk Boundaries”For NovaCloud, the top boundaries are:
User A → User B
Tenant A → Tenant B
Member → Admin
Authenticated App → File Storage
Active Access → Revoked AccessPart 78 — Prioritize by Business Context
Section titled “Part 78 — Prioritize by Business Context”Because NovaCloud manages:
Private Files
Projects
Organizationsauthorization failures may have higher business relevance than cosmetic frontend issues.
Part 79 — Create Application Mapping Summary
Section titled “Part 79 — Create Application Mapping Summary”Create:
14 Application_Mapping_Summary.mdUse:
# Application Mapping Summary
## Target
app.novacloud.test
## Supporting API
api.novacloud.test
## Research Accounts
- Account A / Tenant A- Account B / Tenant B
## Major Application Areas
- authentication- profile- organizations- projects- files- sharing- invitations- developer/API access
## Primary Objects
- user- organization- membership- project- file- invitation- share link- API key- session
## Primary Roles
- guest- standard user- organization member- organization admin
## Highest-Value Security Boundaries
1. User A → User B2. Tenant A → Tenant B3. Member → Admin4. Application → File Storage5. Active → Revoked Access
## High-Priority Hypotheses
- cross-user project access- cross-user file access- cross-tenant project access- unauthorized role changes- revoked share-link reuse- invitation binding weakness- API key revocation weakness
## Next Phase
Controlled authentication andauthorization testing usingresearcher-owned accountsand objects.Part 80 — Common Mistake: Testing Before Mapping
Section titled “Part 80 — Common Mistake: Testing Before Mapping”Avoid:
Open Application ↓Find ID Parameter ↓Change Itwithout knowing:
What Object Is This?
Who Owns It?
Which Tenant?
What Should Happen?Part 81 — Common Mistake: Map Only Pages
Section titled “Part 81 — Common Mistake: Map Only Pages”A page map is not enough.
You also need:
Objects
Roles
Requests
States
Relationships
Security DecisionsPart 82 — Common Mistake: Assume UI Equals Authorization
Section titled “Part 82 — Common Mistake: Assume UI Equals Authorization”Never treat:
Hidden Buttonas proof that:
Backend ActionIs ProtectedPart 83 — Common Mistake: Ignore Object Relationships
Section titled “Part 83 — Common Mistake: Ignore Object Relationships”Testing:
project_idwithout understanding:
organization_idmay cause you to miss:
Cross-TenantRelationship FailuresPart 84 — Common Mistake: Ignore State
Section titled “Part 84 — Common Mistake: Ignore State”A resource may behave differently when:
Active
Revoked
Expired
Removed
ArchivedState is part of the attack surface.
Part 85 — Common Mistake: No Baselines
Section titled “Part 85 — Common Mistake: No Baselines”Do not modify requests without preserving:
Known-GoodBehaviorPart 86 — Common Mistake: Use Real Users
Section titled “Part 86 — Common Mistake: Use Real Users”Your test model should remain:
Account A ↔Account Bnot:
Researcher ↓Unknown CustomerPart 87 — Common Mistake: Overcollect Requests
Section titled “Part 87 — Common Mistake: Overcollect Requests”You do not need every:
Analytics Call
Static Asset
Image RequestFocus on requests that represent:
Security DecisionsPart 88 — Common Mistake: Create Generic Hypotheses
Section titled “Part 88 — Common Mistake: Create Generic Hypotheses”Avoid:
Test authorization.Prefer:
Account B may be ableto access File A bychanging file_id ifserver-side ownershipvalidation is missing.Part 89 — Mapping Quality Checklist
Section titled “Part 89 — Mapping Quality Checklist”Confirm:
Research Accounts Created
User Journey Mapped
Application Areas Mapped
Features Inventoried
Objects Identified
Relationships Identified
Roles Identified
Baseline Requests Saved
API Endpoints Mapped
Security Boundaries Defined
Authorization Matrix Built
Workflow States Mapped
Hypotheses Created
Testing Backlog CreatedPart 90 — Lab Success Criteria
Section titled “Part 90 — Lab Success Criteria”You have successfully completed this lab when you can explain:
How NovaCloud Works
Which Objects Exist
Who Owns Them
Which Roles Exist
Which APIs Power Features
Which Security Boundaries Matter
What AuthorizationShould Occur
and
Which Security HypothesesShould Be Tested NextPortfolio Deliverables
Section titled “Portfolio Deliverables”Keep:
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 Application_Hypotheses.csv
13 Testing_Backlog.csv
14 Application_Mapping_Summary.mdPortfolio Structure
Section titled “Portfolio Structure”Lab 04 — Web Application Mapping and Security Boundary Analysis│├── Application Map├── User Journey├── Feature Inventory├── Research Account Model├── Role Matrix├── Object Register├── Request Register├── API Feature Map├── Security Boundary Map├── Authorization Matrix├── Workflow State Map├── Security Hypotheses├── Testing Backlog└── Application Mapping SummaryKnowledge Check
Section titled “Knowledge Check”-
Why should an application be mapped before deep testing?
-
What is a user journey?
-
What is a feature inventory?
-
What is an application object?
-
Why is object ownership important?
-
What is an object relationship?
-
Why do nested objects matter for authorization?
-
What is a role matrix?
-
Why is a hidden UI control not proof of authorization?
-
Why should proxy traffic be captured during normal usage?
-
What is a baseline request?
-
Why should baseline requests be saved?
-
What is an object identifier?
-
Why should identifiers be documented before being modified?
-
What is an API feature map?
-
What is a session mechanism?
-
What should be mapped in a logout workflow?
-
What should be mapped in a password-reset workflow?
-
What is an invitation workflow?
-
Why are invitation systems security-sensitive?
-
What is a file workflow?
-
What is a share-link workflow?
-
Why are API keys security-sensitive?
-
What is client-controlled data?
-
What is server-controlled data?
-
What is a security boundary?
-
What is horizontal authorization?
-
What is vertical authorization?
-
What is tenant isolation?
-
Why is the browser considered untrusted?
-
What is an authorization matrix?
-
Why should expected authorization behavior be documented?
-
What is an application state?
-
Why are revoked and expired states important?
-
What is a business rule?
-
What is a security assumption?
-
How does a security assumption become a hypothesis?
-
What makes a good authorization hypothesis?
-
Why should facts and hypotheses remain separate?
-
Why should application response structures be documented?
-
What can fields such as owner_id reveal?
-
Why is the file-storage boundary important?
-
What is the invitation trust boundary?
-
What is the API-key trust boundary?
-
What are NovaCloud’s highest-value security boundaries?
-
Why should business context influence prioritization?
-
Why should only security-relevant requests be preserved?
-
Why should researcher-controlled objects be used?
-
What should an application mapping summary contain?
-
What defines successful security boundary analysis?
Key Takeaways
Section titled “Key Takeaways”Application security testing should not begin with:
PayloadIt should begin with:
UnderstandingThe professional workflow is:
Use Application ↓Map Journey ↓Map Features ↓Map Roles ↓Map Objects ↓Map Relationships ↓Capture Baselines ↓Map APIs ↓Map States ↓Identify Boundaries ↓Create HypothesesRemember:
Page ≠Security ModelHidden Button ≠AuthorizationObject ID ≠Object OwnershipSame Role ≠Same Resource AccessSame Tenant ≠All Resources AllowedClient Validation ≠Server ValidationA strong researcher should be able to look at:
Project ID
File ID
Organization ID
Role
Stateand immediately ask:
Who Controls It?
Who Owns It?
What RelationshipShould Exist?
Which Server-SideSecurity DecisionMust Be Enforced?Career Connection
Section titled “Career Connection”Web application mapping and security-boundary analysis are critical skills for:
Bug Bounty Hunters
Application Security Engineers
Web Penetration Testers
Product Security Engineers
Security Researchers
Red TeamersDuring an interview, you should be able to explain:
Before attempting securitytests, I map the applicationfrom a legitimate userperspective.
I identify user journeys,roles, objects, relationshipsand workflow states, then mapeach important UI action toits backend API request.
I preserve known-goodbaseline requests and documentthe expected authorizationdecision for each operation.
From that model I identifyhorizontal, vertical andcross-tenant securityboundaries.
I then convert observations,such as client-controlledobject identifiers or roleparameters, into specifictestable security hypotheses.
This means my testing isbased on the application'ssecurity model rather thanrandom payloads.What’s Next?
Section titled “What’s Next?”➡️ Next: Lab 05 — Authentication, Session and Account Security Testing
You now understand:
Users
Roles
Objects
Application Features
HTTP Requests
API Operations
Workflow States
Security BoundariesThe next step is to begin controlled security testing.
We will start with:
Identitybecause every later authorization test depends on knowing:
Who the ApplicationBelieves You AreIn the next lab, you will assess:
Registration
Login
Session Creation
Cookies / Tokens
Logout
Password Reset
Account Recovery
Session Revocation
Password Change
Authentication Stateusing:
Researcher-Controlled Accounts
Baseline Requests
Controlled State Changes
Minimal ValidationYou will build:
Authentication Flow Map
Session Register
Token Lifecycle Map
Password Reset Map
Authentication Test Matrix
Validated Findings
Evidence PackageYou will move from:
I Understandthe Authentication Flowto:
I Can ValidateWhether Authenticationand Session SecurityAre Correctly Enforced➡️ Next: Lab 05 — Authentication, Session and Account Security Testing