Business logic vulnerability testing means checking whether an application actually enforces its own rules about who is allowed to set which fields and what values count as valid, rather than looking for a specific injection payload in a response. Vexta runs two checks in this class: mass assignment probing across every JSON-accepting write endpoint, and negative-quantity or integer-overflow probing on money and quantity fields.
The problem: a business logic bug looks like success
A SQL injection produces a database error or a timing anomaly. A business logic flaw produces a normal-looking 200 response, because from the server's point of view the request was valid, it just should not have been. That is what makes this class hard for signature-based scanning to catch at all: there is no payload signature for "the server accepted a field it should have rejected" or "the server processed a negative order quantity without complaint."
Finding these bugs usually means reading the application's own rules carefully enough to know what a wrong-but-successful response looks like, which is exactly the kind of methodical, repetitive checking that is easy to skip under time pressure and well suited to automation once someone has defined what to probe.
What is mass assignment and how does Vexta test for it?
Mass assignment happens when a framework binds an incoming JSON body directly onto an internal model or object without an explicit allow-list of which fields a client is permitted to set. If the model has an is_admin or role attribute and the framework auto-binds any field name that matches, a client can potentially set that field simply by including it in the request body, even though the application's forms and documentation never mention it.
Vexta tests for this on every JSON-accepting POST, PUT and PATCH endpoint it finds, injecting more than 30 "magic" field names, including is_admin, role, verified, user_id, tenant_id and permissions, into the request body. It then looks for a response-shape delta, a change in the response that indicates the framework actually bound that field to the underlying object, rather than silently ignoring an unrecognized key the way a well-configured endpoint should.
Negative quantities and integer overflow on money fields
Checkout, transfer and inventory flows tend to assume that fields like quantity, amount, price, total and balance will always be positive, and that assumption sometimes never gets turned into an explicit validation rule. Vexta probes exactly those common field names with negative values and with integers at the scale where overflow becomes a risk.
A 2xx response to a -1 value on one of these fields is treated as a candidate finding. A server that accepts a negative quantity without complaint is a server where a hunter, or an attacker, may be able to turn an order into a credit, inflate a refund, or push a balance the wrong direction, depending on what the rest of the flow does with that value downstream.
Why these checks require explicit consent to run
Unlike a passive read-only probe, both of these checks can actually cause a write: a mass assignment attempt that succeeds has changed a real field, and a negative-quantity probe that returns 2xx may have created a real order or transaction on the target system. Because of that, Vexta gates this deeper checking behind an explicit scan profile with its own consent step before it runs, rather than firing it by default on every scan alongside passive checks.
That gating reflects the same authorized-testing principle behind every exploitation-adjacent feature Vexta ships: a check that can create real side effects on a target should require a deliberate decision to run it, made by someone who has the authority from the program's rules or a signed engagement to accept that risk.
Where this fits in an engagement
Business logic findings land in the same reporting pipeline as everything else Vexta detects, carrying the detail needed to reproduce the exact request that triggered them, along with a Confidence Score reflecting how unusual the accepted value or bound field actually was. Availability of these deeper business-logic checks depends on the license and the scan profile in use; see plans on the pricing page.
For a hunter working a program that explicitly covers business logic, or an engagement where the client has agreed to test data being created, this is the kind of check that finds the flaw a purely technical scan would walk straight past, because nothing about a successful mass assignment or a negative order ever looked like an error.
- Mass assignment probing injects 30+ "magic" field names, such as is_admin, role, user_id and permissions, into every JSON-accepting POST/PUT/PATCH request and watches for a response-shape delta showing the field got bound.
- Business logic probing targets common money and quantity field names (quantity, amount, price, total, balance) with negative values and overflow-scale integers.
- A 2xx response to a -1 value on a money or quantity field is treated as a candidate finding, since accepting a negative value there can lead to inflated refunds or manipulated balances.
- Because both checks can cause a real write on the target, Vexta gates them behind an explicit scan profile with its own consent step, rather than running them by default.
- Business logic findings carry the exact reproducing request and a Confidence Score into the same reporting pipeline as every other finding class.
Frequently asked questions
What is business logic vulnerability testing?
What is mass assignment and why does it matter?
How does Vexta test for mass assignment?
What does Vexta's negative-quantity check look for?
Why does Vexta require extra consent before running these checks?
Do business logic findings get verified before they are reported?
Check your write endpoints for business logic gaps
Run Vexta's business logic checks, with consent, against an application in scope and see whether mass assignment or negative-value probing turns up a real gap in validation.

