A06: Insecure Design · 2025
The system lacks necessary controls by design, even if the implementation has no individual bug
Summary
The system lacks necessary controls by design, even if the implementation has no individual bug. Risk originates in requirements, trust boundaries and insecure flows.
How the attack works
A user repeats a discount in the purchase flow because the design neither defines nor enforces a usage limit, abusing business logic.
Example
Vulnerable · PseudocodePOST /cart/apply-coupon
{"code": "WELCOME10"}
cart.discount += 10Fix: Define one use per customer and enforce it atomically on the server.
Prevention
- Perform threat modeling and define verifiable security requirements.
- Use secure patterns, business limits and separation of responsibilities.
- Test abuse scenarios during design, development and review.
Lineage
- 2021 · A04: Insecure Design New in 2021
- 2025 · A06: Insecure Design Moves down from rank 4
- 2021:A04 → 2025:A06: Insecure Design moves down from rank 4 to 6.