Checkout price tampering
A polished checkout still trusts a price sent by the browser.
Browser → pricing service
Implementation notes
Authorize an order against a trusted catalog. Client values can express intent, but cannot set the money owed. Recheck discounts and currency on the server. This fixture combines price tampering with an unsupported product selection.
A success page is not payment proof
The interface says “paid” before a trusted payment event exists.
Return URL → entitlement store
Implementation notes
A redirect is navigation, not evidence. Resolve the order server-side and confirm its owner, amount, currency and payment state. Delayed payment methods need pending states. Refunds and disputes need explicit entitlement policies.
Forged and repeated webhooks
An event endpoint trusts a payload and grants access twice.
Payment provider → webhook → records
Implementation notes
Provider events may be duplicated or arrive out of order. Authenticate the raw request before parsing business meaning. An event ledger must survive parallel delivery; a read-then-write flag is insufficient. Verify the order as well as the event.
Self-assigned administrator
An editable profile field becomes a permission.
Profile → trusted identity → protected API
Implementation notes
Authentication identifies a caller; authorization determines what they may do. Hidden controls do not protect APIs. Reject privileged profile fields and evaluate permissions at the action boundary, including background tasks.
Another customer’s invoice
A changed record identifier crosses an organization boundary.
Session → tenant → record
Implementation notes
Use two ordinary accounts in distinct organizations. Test direct records, lists, exports and writes. Never accept a tenant identifier as proof of membership. Administrative database clients bypass rules and require explicit server checks.
Public records and private files
Database rules and upload permissions are separate boundaries.
Anonymous visitor → database and storage
Implementation notes
Securing tables does not secure object storage. Review listing, download, upload and signed URL expiration separately. A public client identifier is not an administrator secret; broad policies are the vulnerability in this fixture.
An exposed key stays dangerous
Removing a secret from the browser does not revoke an earlier copy.
Public bundle → privileged service
Implementation notes
Inspect built assets and repository history. Keep privileged keys on the server with least privilege. Removing a file is not revocation. Source maps are not intrinsically secret: review their contents rather than claiming every source map is a vulnerability.
Untrusted uploads and rendered content
A file label and formatted text are accepted without validation.
Upload → server validation → rendering
Implementation notes
Browser validation is a convenience. Validate on the server and treat filenames, MIME declarations and generated content as untrusted. A URL-fetch feature also needs separate network restrictions. This fixture does not execute any uploaded content.
Unlimited requests and AI costs
A public endpoint has neither request limits nor spending limits.
Public API → workload budget
Implementation notes
Rate limits and quotas answer different questions: how quickly and how much. Apply controls before model calls or costly jobs. Distributed deployments require shared counters and a defined failure policy. Do not trust a browser cooldown.
Two purchases, one credit
Parallel requests both pass a non-atomic balance check.
API → credit ledger → fulfillment
Implementation notes
An idempotency key does not replace balance correctness, and a transaction does not identify a retried logical purchase. Test parallel requests at the boundary with one credit remaining. Commit the ledger and business state consistently.
A document asks for a customer export
Untrusted instructions steer a tool toward sensitive data.
External document → agent → authorized tool
Implementation notes
A prompt filter cannot guarantee tool authorization. Separate trusted instructions from retrieved content, constrain tool arguments and outbound destinations, and bind approvals to the exact action. This simulation illustrates an export within a scoped workflow that still requires approval.
A risky release with no signal
A release bypasses dependency checks and administrator failures go unnoticed.
Release pipeline → runtime → monitoring
Implementation notes
A scanner finding needs context and remediation ownership. An alert is useful only when someone can act on it. Protect logs from secrets and excess personal data. Monitoring detects and supports response; it does not automatically remove every vulnerability.