Logic flaws

Heavily inspired by PortSwigger - Web Security Academy - Business logic vulnerabilities

Trust in client-side controls

If the app relies too much or solely on client-side controls, you may be able to intercept requests, and e.g. change the price of an item.

Unconventional input

  • Negative numbers

  • Large numbers (integer overflows)

  • Long strings (they may get truncated only after the validation, to something you can use to exploit it)

(Un)trustworthy users

If privileged functionality is dependent on e.g. email address (domain) and you are able to register an account and then change the email address accordingly (without the need to revalidating it), you may be able to escalate you privileges.

Mandatory input

You may be able to trigger different logic flows inside the app by removing parameters. Only remove one at a time to ensure reaching all code paths and also remove only the value as well as name and value (may be handled differently on the server). Complete multi-stage processes, as changes may just reveal something further down the line.

E.g.

  • Remove the "old password" parameter from reset password request and try to reset another accounts password

  • If the password reset request contains the username, just change it

Multi-stage flows

Just mess with the sequence by:

  • Skipping steps (drop requests, GET as well as POST)

  • Doing steps more than once

  • Return to a step later on

  • etc.

Domain-specific flaws

Take a close look stuff like vouchers and gift-cards.

  • Try to apply vouchers multiple times

  • Try to apply different vouchers, different order, multiple times, etc.

  • If you are able to purchase gift-cards for a reduced price (e.g. using vouchers), you may be able to kinda "print" money.

Encryption oracle

If user-controllable data is encrypted and the resulting ciphertext is then made available to the user, the user can use this to encrypt arbitrary data. If the app also uses encrypted data (using the same algorithm) in sensitive functions, the user can use this to craft his own payload. Sometimes even a decrypt function can be found, which makes crafting payloads a lot easier.

Last updated