Business Logic Vulnerabilities

Las vulnerabilidades de lógica de negocio explotan cómo funciona la aplicación — no bugs técnicos, sino fallos en el diseño del flujo.

Business Logic Vulnerabilities

Las vulnerabilidades de lógica de negocio explotan cómo funciona la aplicación — no bugs técnicos, sino fallos en el diseño del flujo. Son las más difíciles de automatizar y las más consistentemente recompensadas.


Price Manipulation

Client-Side Price Trust

El precio se calcula en cliente y se envía en el body:

POST /checkout HTTP/1.1
{"items":[{"sku":"PROD001","qty":1,"price":99.99}],"total":99.99}

Probar cambiar price a 0.01, 0, o -99.99.

Negative Values

{"quantity": -1, "unitPrice": 99.99}
{"price": -99.99}
{"discount": 999}

Si quantity * unitPrice no valida signo → total negativo → la app te debe dinero.

Integer Overflow

{"quantity": 2147483648, "unitPrice": 0.01}

Si el backend usa int322147483648 wraps a -2147483648 → total negativo.

Decimal/Fraction Quantity

{"quantity": 0.5, "unitPrice": 100}
{"quantity": 0.0001, "unitPrice": 1000}

Si el backend no valida que quantity sea entero positivo → pagas fracción del precio.

Formula Injection

{"coupon": "50%OFF + FREE_SHIPPING + EXTRA_10"}

A veces el backend concatena cupones en una fórmula sin validar.


Coupon Abuse

Multiple redemptions

POST /cart/coupon
{"code": "WELCOME10", "apply_twice": true}
POST /cart/coupon
{"code": "WELCOME10"}
POST /cart/coupon
{"code": "WELCOME10"}

Probar aplicar el mismo cupón múltiples veces con race condition.

Stacking

Aplicar cupones que no deberían combinarse:

{"coupons": ["50OFF", "30OFF", "FREESHIP", "NEWUSER"]}

Personal coupon reuse

Cupones de un solo uso — ¿se pueden reusar en otra cuenta? ¿en otro carrito?


Race Conditions (TOCTOU)

Coupon double-redemption

import requests, threading

def apply_coupon():
    requests.post("https://target.com/cart/coupon",
                  json={"code": "WELCOME50"}, cookies=sess)

threads = [threading.Thread(target=apply_coupon) for _ in range(20)]
for t in threads: t.start()

Account creation race

# Crear misma cuenta dos veces simultáneamente
# ¿Se crean dos cuentas? ¿El saldo se duplica?

Workflow bypass

Saltarse pasos

Flujo normal:    Cart → Shipping → Payment → Confirm
Flujo bypass:    Cart → /confirm (saltar shipping y payment)

State machine violations

- Devolver producto sin haberlo comprado
- Aplicar descuento post-pago
- Cancelar orden ya enviada

Mass Assignment

POST /profile/update
{"email": "test@test.com", "is_admin": true, "balance": 99999}

Currency manipulation

{"currency": "USD", "amount": 100}
→ {"currency": "JPY", "amount": 100}   # Mismo número, moneda diferente
→ {"currency": "VND", "amount": 100}   # 100 VND ≈ $0.004

Categorías adicionales

CategoríaEjemplo
Gift cardCanjear misma gift card múltiples veces
ReferralAuto-referirse, crear cuentas falsas
SubscriptionDegradar plan, cancelar y mantener acceso
WithdrawalRetirar más del balance, retiros negativos
LoanPedir préstamo y no pagar
AuctionPujar sobre tu propia puja, retirar puja final

Severidad estimada

VulnerabilidadSeveridadRango bounty
Comprar item por $0P1 Critical$1k–$10k+
Pagar fracción del precioP1–P2 High$500–$5k
Cupón infinitoP2 High$300–$2k
Manipulación de monedaP2 High$500–$3k
Descuento amplificadoP2–P3 Med$150–$1k

Reports públicos


Relacionado

  • Autenticacion Web — mass assignment en profile/roles
  • Cache Poisoning y Web Cache Deception — cache de precios
  • IDOR — business logic IDOR en órdenes
  • Race Conditions — race en cupones, pagos, transfers
  • SSRF — business logic SSRF en import/export
  • WebSocket Security — rate limit bypass via WS
  • Claude-BugHunter (skill hunt-business-logic, offensive-business-logic)