HIGH

Race Condition / TOCTOU

Ventana de tiempo entre verificación y acción permite que peticiones concurrentes dupliquen cupones y realicen transferencias con saldo insuficiente

Ejemplos de explotación:

Ver estado — saldos y cupones

Muestra los saldos actuales de los usuarios y qué cupones han sido canjeados

/api/lab/race-condition?action=status
Resetear estado del lab

Restaura saldos (user1=100, user2=50) y marca todos los cupones como no usados

/api/lab/race-condition?action=reset
Canjear cupón SAVE50 (vulnerable — ventana 50ms)

Hay 50ms entre la verificación de used=false y el SET. Enviar 5 peticiones en paralelo aplica el cupón múltiples veces

/api/lab/race-condition?action=redeem&coupon=SAVE50&user=user1
Canjear cupón FREE10 — segunda carrera

Mismo patrón TOCTOU con el cupón FREE10 — raza de 50ms explotable

/api/lab/race-condition?action=redeem&coupon=FREE10&user=user1
Canjear cupón VIP100 — mayor impacto

100€ de descuento por uso. Raza concurrente multiplica el crédito obtenido

/api/lab/race-condition?action=redeem&coupon=VIP100&user=user1
✅ Cupón seguro — verificación atómica

Con ?safe=true el SET es atómico (UPDATE WHERE used=false). Solo el primer ganador aplica el cupón

/api/lab/race-condition?action=redeem&coupon=SAVE50&user=user1&safe=true
Transferencia concurrente — saldo negativo

10 peticiones paralelas leen balance=100 antes de que alguna lo actualice → 10×10€ deducidos de un saldo de 100

/api/lab/race-condition?action=transfer&user=user1&to=user2&amount=10
Transferencia segura — deducción atómica

Con ?safe=true la deducción es atómica — las peticiones concurrentes fallan si el saldo es insuficiente

/api/lab/race-condition?action=transfer&user=user1&to=user2&amount=10&safe=true
Comando de explotación (curl en paralelo)

Ejecutar: for i in $(seq 1 10); do curl -s '?action=redeem&coupon=VIP100' & done; wait

/api/lab/race-condition?action=status

Vulnerabilidad Alta

Race Condition o TOCTOU (Time-Of-Check-Time-Of-Use): hay una ventana de tiempo entre verificar la condición (cupón no usado, saldo suficiente) y ejecutar la acción (marcar como usado, deducir). Si múltiples peticiones concurrentes pasan la verificación antes de que alguna actualice el estado, todas ejecutan la acción. Impacto en e-commerce: doble gasto de cupones, transferencias que llevan el saldo a negativo, voto múltiple, reservas duplicadas. Solución: operaciones atómicas en base de datos (UPDATE WHERE condition) o locks optimistas. OWASP A04:2021 — CVSS 8.1.

Esta aplicación es vulnerable por diseño - Solo para propósitos educativos

© 2025 Aitana Security Lab