OWASP API3:2023 Broken Object Property Level Authorization: BOPLA Guide
OWASP API3:2023 BOPLA: Prevention and Testing
OWASP API Security Top 10 – 2023

OWASP API3:2023 Broken Object Property Level Authorization: BOPLA Guide

Understand how APIs expose or accept restricted object properties, how BOPLA unifies excessive data exposure and mass assignment, and how to design, test, monitor, and verify property-level authorization.

OWASP API3:2023 Broken Object Property Level Authorization, or BOPLA, occurs when an API exposes or accepts object properties that a caller should not be allowed to read or modify. The object itself may be legitimate for the caller. The failure exists inside the object: an internal field appears in a response, a protected property can be changed, or a broad update operation accepts data that should remain server controlled.

What Is OWASP API3:2023 Broken Object Property Level Authorization?

BOPLA is a property-level authorization failure. It affects both directions of an API contract:

  • Read-side BOPLA: the API returns a property that the caller should not see or does not need.
  • Write-side BOPLA: the API allows the caller to add, change, or delete a protected property.

Examples include exposing administrative notes in a customer response, returning another tenant’s internal account flags, accepting a role or owner field from a normal user, or allowing a broad partial update to change approval state.

A complete authorization decision should answer:

  • May this identity access the object?
  • May this identity read this property through this operation?
  • May this identity write this property through this operation?
  • Is the requested state transition allowed now?
  • Does the operation need to return or accept the property at all?
Authentication and object access do not automatically grant access to every field inside the object.

Why OWASP Combined Excessive Data Exposure and Mass Assignment

The OWASP API Security Top 10 – 2023 combined the former API3:2019 Excessive Data Exposure and API6:2019 Mass Assignment categories. Both commonly result from missing or incorrect authorization at the object-property level.

Earlier category Direction Typical failure API3:2023 interpretation
Excessive Data ExposureAPI to callerA response contains properties the caller should not receiveBroken read authorization for object properties
Mass AssignmentCaller to APIA request can set properties the caller should not controlBroken write authorization for object properties

This combined model is useful because read and write failures often share the same causes: broad internal models, reused schemas, incomplete role rules, automatic serialization, automatic binding, and weak operation-specific authorization.

BOPLA vs. BOLA, Function Authorization, and Parameter Tampering

Risk Primary question Example
BOLA or IDORMay the caller access this object?A user changes an invoice ID and receives another customer’s invoice
BOPLAWhich properties of the object may the caller read or write?A valid profile response contains internal risk flags
Broken function-level authorizationMay the caller invoke this operation?A normal user calls an administrative suspension action
Parameter tamperingDoes changing a client value bypass a server rule?A caller changes owner, role, price, or status and the server accepts it
Business-logic abuseDoes a valid sequence create a harmful business outcome?A promotion or workflow is repeated beyond its intended use

One request can reveal several risks. A changed object ID may produce BOLA, while the returned object also exposes restricted fields through BOPLA. A broad update endpoint may combine property authorization and function authorization failures.

For object access, review BOLA and IDOR API security. For client-controlled values, review API parameter tampering.

OWASP API3 BOPLA showing object access readable properties writable properties and business state authorization

Common BOPLA Patterns

Pattern What looks normal Property-level failure
Full backend object in a responseThe endpoint returns a valid customer or account objectInternal notes, permissions, fraud flags, tenant fields, or secrets are included
Client-side filteringThe user interface hides restricted valuesThe API still sends the properties to the browser or mobile client
Broad automatic request bindingThe request body matches a domain or persistence modelUnexpected properties can alter owner, role, state, price, or internal flags
Shared schema across rolesOne model is convenient for users, partners, support, and administratorsEvery audience receives or can submit the same property set
Generic partial updateA PATCH operation accepts arbitrary property pathsThe caller can target properties outside the intended operation
GraphQL field or mutation overreachThe schema exposes flexible selections or input objectsResolvers do not enforce field-level read or write permissions
Bulk updateThe endpoint modifies many objects efficientlyPer-object and per-property authorization is applied incompletely
Schema driftA release adds a useful fieldThe new property reaches clients before security and privacy rules are updated

Why BOPLA Happens

Internal models become public contracts

Database or domain entities are serialized and bound directly instead of being mapped through narrow API models.

Authorization stops at the object

The API verifies ownership but assumes all properties inside an allowed object are equally accessible.

Roles are too coarse

Property rules vary by operation, tenant, object state, relationship, and business purpose—not only by a global role.

Clients are trusted to hide data

Frontend filtering is mistaken for response authorization.

Automatic binding is too broad

Framework convenience maps unapproved request properties into internal objects.

Partial updates lack path controls

Generic patch documents or field maps accept sensitive properties without explicit allowlists.

Contracts are reused

Public, partner, administrative, and internal operations use one large schema.

Production behavior is not observed

New fields, real roles, legacy routes, and alternate clients escape pre-release testing.

Build an Explicit Property Authorization Model

Property authorization should be defined by operation and context. A field can be readable but not writable, writable only during creation, visible only to support staff, or available only when the object is in a particular state.

Property Customer read Customer write Support read Administrator write Server owned
displayNameYesYesYesYesNo
emailYesThrough verified change flowMaskedRestrictedPartly
tenantIdUsually noNoYesRestrictedYes
riskFlagNoNoRestrictedRestrictedYes
roleLimitedNoLimitedThrough dedicated actionControlled
accountStatusYesNoYesThrough approved transitionControlled

The matrix should also include tenant relationship, object ownership, business state, client type, data classification, and the operation where access is allowed. Store the rule close enough to the application to use real domain context.

How to Prevent BOPLA

Use operation-specific request and response models

Create separate models for registration, profile update, administrative review, partner access, search results, and internal processing. Avoid exposing one broad object everywhere.

Map properties deliberately

Build responses from approved values and map request fields into explicit commands or DTOs. Do not serialize persistence entities or bind arbitrary request properties directly into domain objects.

Authorize read and write directions separately

A caller may be allowed to see a field without changing it, or update a field without receiving its internal representation. Treat read and write decisions independently.

Keep protected values server controlled

Role, tenant, owner, balance, risk decision, approval state, internal flags, calculated price, and audit fields should normally be derived or changed through dedicated trusted operations.

Minimize responses

Return only the fields and records required for the operation and recipient. Removing unnecessary properties reduces privacy, security, compatibility, and monitoring risk.

Reject unknown or protected properties

Strict rejection is often safer because it exposes incorrect clients and attempted over-posting. If compatibility requires ignoring unknown fields, record the behavior and ensure protected fields cannot be silently accepted.

Apply authorization after loading trusted state

Property rules may depend on object ownership, tenant, current state, account relationship, or prior approval. Retrieve the trusted object and evaluate the rule before returning or changing the property.

BOPLA prevention using operation-specific DTOs readable and writable property rules and response minimization

Secure PATCH, JSON Patch, GraphQL Mutations, and Bulk Operations

Flexible update mechanisms are useful, but they expand the property authorization surface.

Update style Primary BOPLA concern Safer requirement
JSON Merge PatchAny supplied property may be applied to the objectAllowlist properties by operation and authorize null or deletion semantics
JSON PatchPatch paths and operations can target protected or nested valuesRestrict operations and paths, authorize each path, and validate final state
GraphQL mutationBroad input types allow sensitive properties or nested writesUse narrow input types and enforce resolver-level property and object rules
Field map or key-value updateDynamic names bypass static request modelsMap supported keys to explicit commands and reject everything else
Bulk updateOne decision is reused across many objects or tenantsAuthorize each object and property, limit scope, and record partial failures
Administrative importTrusted file or integration can overwrite server-owned propertiesValidate source identity, schema, property permissions, approvals, and audit trail

After applying a partial update, validate the complete resulting object and the requested state transition. A valid property value can still be unauthorized in the current context.

Use OpenAPI and JSON Schema Carefully

OpenAPI can describe operation-specific request bodies, response bodies, properties, required fields, content types, and security schemes. This makes the contract useful for design review, client generation, testing, gateway validation, and runtime drift detection.

  • Use separate request and response schemas.
  • Create narrow schemas for different operations and audiences.
  • Restrict undeclared properties where compatibility permits.
  • Document nested objects, arrays, bulk operations, files, errors, and alternate media types.
  • Review new response and input properties as security and privacy changes.
  • Compare the approved contract with gateway configuration and observed runtime fields.

The OpenAPI `readOnly` and `writeOnly` annotations can help tools understand direction, but they do not enforce authorization. Server-side application logic or a trusted policy point must still decide whether the current caller may read or write the property.

Use API schema drift detection for the production contract-monitoring workflow.

Defensive BOPLA Testing Method

Testing should verify expected-denied behavior across roles, objects, operations, and states. Perform it only in authorized test environments or approved assessments.

Step Assessment activity Evidence
1. Inventory object operationsList create, read, search, export, update, patch, delete, bulk, partner, and administrative operationsOperation and owner matrix
2. Enumerate propertiesCompare public schemas, responses, request models, domain objects, and persistence entitiesReadable, writable, internal, and server-owned property list
3. Define authorization rulesDocument permissions by role, tenant, relationship, operation, object state, and clientProperty authorization matrix
4. Test read boundariesCompare response fields across approved identities and object contextsExpected and actual response properties
5. Test write boundariesSubmit only approved negative cases for restricted, unknown, nested, and server-owned propertiesResponse, persisted state, audit, and downstream results
6. Test flexible operationsReview PATCH formats, GraphQL mutations, bulk actions, imports, and alternate content typesPath, operation, object, and final-state authorization results
7. Test related routesReview old versions, partner APIs, mobile routes, direct services, and asynchronous consumersCoverage and limitation record
8. Create regression coverageTurn confirmed failures into repeatable role- and property-aware testsAutomated acceptance criteria

The OWASP Web Security Testing Guide includes a focused excessive-data-exposure test and maps it to API3:2023. The OWASP Mass Assignment Cheat Sheet recommends allowlisting properties and using request-specific models.

For the combined lifecycle, review API security testing vs. runtime monitoring.

Runtime Signals for BOPLA

Testing proves selected cases. Runtime monitoring helps identify undocumented APIs, real client roles, schema drift, unexpected data combinations, and behavior that appears only in production.

Runtime signal Why it matters Validation context
First-seen response propertyA release or unmanaged route begins returning a new fieldSpecification, deployment, audience, data class, and owner
Sensitive field on an unexpected routeThe operation may expose data outside its business purposeRole, tenant, object, client, and expected response contract
Role-to-property mismatchA low-privilege caller receives or submits an administrative propertyIdentity, operation, policy, object state, and outcome
Unknown writable propertyThe API may be binding fields beyond the documented request modelRequest schema, framework behavior, persistence, and audit record
Protected property changeRole, owner, tenant, state, price, or internal flags change unexpectedlyPrevious value, caller, command, workflow, and downstream effect
Schema drift across versionsLegacy or alternate routes may expose broader object modelsVersion, gateway route, client, owner, and specification
Successful sensitive responseThe property exposure produced a real outcomeStatus, returned fields, object count, data class, and affected population
Telemetry gapThe team cannot determine which properties were returned or changedCollection point, encryption boundary, sampling, and affected APIs

Responses and Persisted Outcomes Determine Severity

Observed behavior Outcome evidence Interpretation
A request includes a protected role propertyThe property is rejected and no state changesAttempted or accidental over-posting with an effective control
A request includes a protected role propertyThe role changes in the database or audit trailConfirmed write-side BOPLA with possible privilege escalation
A profile response contains an internal fieldThe value is non-sensitive and approved for the clientLegitimate contract change that still requires documentation
A profile response contains an internal fieldThe field reveals risk, tenant, credential, or confidential dataMaterial read-side BOPLA requiring scoping
A patch targets a protected nested pathThe service denies the operation before persistenceAttempted property manipulation with an effective path rule
A bulk update includes mixed authorized objectsUnauthorized objects or properties are still modifiedScope and per-object authorization failure

Reduce False Positives

Use operation context

A property may be valid on an administrative route and prohibited on a customer route.

Separate read and write rules

A property can be visible but server controlled, or writable without exposing its internal representation.

Correlate releases

New fields may be legitimate, but they still require owner, schema, authorization, and data-class review.

Confirm the outcome

Prioritize properties that were returned successfully or persisted, not only attempted inputs.

Segment by audience

Customers, partners, support staff, administrators, and services can have different approved property sets.

Expire exceptions

Temporary exposure, compatibility rules, and suppressions need scope, owner, reason, and review date.

Runtime BOPLA detection using request response schema identity property and SIEM evidence

SIEM-Ready BOPLA Event Model

Event category, confidence, and severity
Application, environment, endpoint, method, version, and API owner
User, workload, client, token, tenant, and source context
Object type, object identifier category, and ownership context
Property names or classifications and read/write direction
Expected property authorization rule or response schema
Request operation, patch path, mutation, or bulk context
Response status, returned fields, object count, and size
Persisted change, audit result, and downstream business outcome
First-seen, schema-drift, release, and related-event context
Affected users, tenants, objects, and sensitive-data categories
Evidence limitations and telemetry-health status
Recommended validation, containment, or remediation action
Case and correlation identifiers

Use centralized SIEM log-forwarding formats so the event remains useful outside the API security platform.

BOPLA Remediation and Verification Workflow

Phase Required work Closure evidence
1. ValidateConfirm the identity, object, property, operation, response or state change, and authorization ruleReproducible authorized test or production evidence
2. ScopeReview related roles, objects, schemas, models, versions, clients, and operationsAffected-surface assessment
3. Correct the modelCreate narrow request and response contracts and explicit readable and writable rulesReviewed design and implementation
4. Correct the operationFix mapping, binding, resolver, patch, bulk, and state-transition controlsCode, policy, or configuration change
5. Test related pathsRun negative and regression tests across roles, versions, formats, and alternate routesPassing acceptance tests
6. Validate deploymentConfirm the intended version and configuration are active everywhereDeployment evidence
7. Observe productionVerify that restricted fields are no longer returned or writable and telemetry remains healthyRuntime evidence during the agreed validation period
8. Close or acceptClose only when acceptance criteria are met or residual risk is formally approvedVerified closure or time-bound exception

For deeper write-side remediation, use mass assignment API vulnerability. For read-side scoping, use API sensitive data exposure and API forensics.

BOPLA Program Metrics

Metric Definition Interpretation caution
Property authorization coverageCritical operations with approved readable and writable rules / all critical object operationsA documented matrix does not prove implementation
Operation-specific schema coverageIn-scope operations using narrow request and response schemas / all in-scope operationsShared schemas may hide role differences
Negative-test coverageRequired role, object, property, state, and update-format cases tested / all required casesCount contexts, not only endpoints
Runtime response coverageCritical read operations with usable field, identity, object, and telemetry evidence / all critical read operationsState unobservable routes separately
Protected-property write rateRequests attempting server-owned or unauthorized properties / monitored write requestsSeparate client defects from malicious behavior
Confirmed BOPLA rateValidated unauthorized property reads or writes / reviewed BOPLA eventsSeparate attempted access from successful outcomes
Mean time to validateTime from event or finding creation to reliable disposition and owner assignmentSeparate automation from human review
High-risk issue ageOpen material BOPLA issues grouped by owner, age, and treatmentShow accepted risk separately
Verified remediation rateClosed material issues with successful test and production evidence / all closed material issuesTicket closure alone is not verification
Recurring root-cause ratePreviously addressed broad-model, binding, schema, or authorization failures that returnNormalize by root cause rather than alert title

90-Day BOPLA Improvement Roadmap

Period Primary objective Key outputs
Days 1–30Inventory and defineCritical object operations, property inventory, data classes, server-owned fields, authorization matrix, schema gaps, owners, and pilot scope
Days 31–60Test and observeRead and write negative tests, patch and bulk coverage, response-field monitoring, SIEM events, telemetry-health checks, and prioritized findings
Days 61–90Remediate and operationalizeNarrow DTOs, mapping standards, verified fixes, regression tests, metrics, runbooks, exception review, and expansion plan

OWASP API3:2023 BOPLA Prevention Checklist

Checklist item Validation question Status
Object operations inventoriedAre read, search, export, create, update, patch, bulk, partner, and administrative operations known?Required
Property inventoryAre public, sensitive, internal, server-owned, readable, and writable fields classified?Required
Read authorizationAre response properties authorized by operation, identity, tenant, object, state, and purpose?Required
Write authorizationAre request properties authorized independently from object and route access?Required
Operation-specific DTOsAre narrow request and response models separated from domain and database models?Required
Server-owned propertiesAre role, owner, tenant, status, risk, balance, audit, and calculated values protected?Required
Unknown-property handlingAre undeclared and protected fields rejected or guaranteed to be ignored safely?Required
Partial-update safetyAre patch operations, paths, nested values, final state, and deletion semantics authorized?Required
GraphQL and bulk safetyAre input fields, resolvers, per-object decisions, partial failures, and scope controlled?Required
Response minimizationDoes each operation return only the fields and records required by the recipient?Required
Negative testingAre expected-denied property reads and writes tested across roles, tenants, states, and versions?Required
Runtime visibilityCan new, sensitive, role-mismatched, and protected properties be detected in requests and responses?Recommended
SIEM workflowDo events contain identity, object, property, direction, expected rule, outcome, owner, and action?Recommended
Remediation verificationAre fixes retested and observed after deployment before closure?Required
Frontend filteringIs the API sending restricted fields and relying on the client to hide them?Avoid

For the wider program, use API security architecture design and API security implementation playbook.

Common BOPLA Prevention Mistakes

Using the unofficial category name

The official OWASP title is Broken Object Property Level Authorization. Keep the exact terminology in the article and metadata.

Assuming object access covers every property

Object ownership does not automatically allow every read or write inside the object.

Returning full backend models

Internal fields reach clients and become difficult to remove without breaking compatibility.

Trusting frontend filtering

Hidden fields remain available in the API response and network traffic.

Using one update model everywhere

Normal users, partners, support teams, and administrators usually need different writable fields.

Ignoring PATCH and bulk operations

Flexible updates can bypass property rules that exist on ordinary create and update endpoints.

Treating schema annotations as enforcement

Contracts help describe intent, but server-side authorization must enforce the decision.

Closing after a code change

Related roles, routes, versions, formats, and deployed behavior must be verified before closure.

Authoritative Guidance

Conclusion

OWASP API3:2023 BOPLA is not only an excessive-response problem and not only a mass-assignment problem. It is the failure to enforce which properties a caller may read or write for a particular object, operation, tenant, relationship, and state.

The strongest defense combines operation-specific contracts, explicit readable and writable rules, server-side mapping, protected server-owned values, safe partial updates, response minimization, negative testing, runtime request and response evidence, SIEM workflows, and verified remediation. That approach addresses the shared root cause identified by OWASP without treating every new field or rejected property as a confirmed vulnerability.

Frequently Asked Questions

What is OWASP API3:2023 Broken Object Property Level Authorization?

OWASP API3:2023 Broken Object Property Level Authorization, commonly called BOPLA, occurs when an API allows a caller to read, add, change, or delete object properties that the caller should not be allowed to access.

Why did OWASP combine excessive data exposure and mass assignment?

OWASP combined the earlier Excessive Data Exposure and Mass Assignment categories because both commonly result from the same root problem: the API does not enforce authorization for individual object properties.

How is BOPLA different from BOLA or IDOR?

BOLA or IDOR asks whether the caller may access the object at all. BOPLA asks which properties of an allowed object the caller may read or modify. An API can enforce object ownership correctly and still expose or accept restricted fields.

How is BOPLA different from broken function-level authorization?

Broken function-level authorization allows a caller to invoke a restricted operation or administrative function. BOPLA concerns properties inside the object being read or changed. A single endpoint can contain both problems.

What are common read-side BOPLA examples?

Common examples include returning internal notes, administrative flags, permissions, tenant identifiers, financial details, risk scores, secrets, or personal data that the caller does not need or is not authorized to see.

What are common write-side BOPLA examples?

Common examples include allowing a caller to set role, owner, tenant, approval state, account status, discount, balance, internal flags, or other protected properties through broad request binding or an overly permissive update operation.

How can teams prevent BOPLA?

Use operation-specific request and response models, explicit readable and writable property rules, server-side object and property authorization, deliberate mapping, narrow schemas, safe partial-update handling, response minimization, and regression tests.

Do OpenAPI readOnly and writeOnly properties prevent BOPLA?

No. They are useful contract annotations for tools and documentation, but they do not independently enforce authorization. The application or trusted policy point must still decide which properties each caller may read or write.

How should PATCH and bulk update endpoints be secured?

Authorize every targeted property and state transition, restrict supported operations, reject unknown or protected paths, validate the resulting object, limit bulk scope, and preserve audit evidence. Do not assume partial updates are safe because they contain fewer fields.

How can runtime monitoring detect BOPLA?

Runtime monitoring can identify first-seen response fields, sensitive fields on unexpected routes, role-to-property mismatches, protected write attempts, schema drift, broad object binding, successful sensitive responses, and unusual property-change patterns.

What should a SIEM-ready BOPLA event contain?

Include the application, endpoint, identity, tenant, object, property names or classifications, read or write direction, expected authorization rule, response or persisted outcome, confidence, affected scope, owner, and recommended validation or remediation action.

How should BOPLA remediation be verified?

Repeat the authorized negative test, inspect the deployed response or state change, test related roles, routes, versions, bulk operations, and alternate update formats, confirm telemetry health, and close the issue only when acceptance criteria prove that restricted properties are no longer exposed or writable.

See which properties your APIs expose and accept at runtime

Ammune helps teams discover active APIs, inspect approved request and response context, identify sensitive properties and schema drift, analyze authorization behavior, forward SIEM-ready evidence, and support remediation verification.

© 2026 Ammune Security. OWASP API3:2023 BOPLA, property authorization, response minimization, and remediation guidance.