Nuevos labs cada semana — Accede a todos desde 7,99€/mes
Ver labs →Labs de Race Condition
Race Condition (TOCTOU)
¿Qué es Race Condition?
Las Race Conditions ocurren cuando la aplicación no maneja correctamente operaciones concurrentes. Permiten duplicar transacciones, bypassear límites, aplicar cupones múltiples veces o explotar la ventana temporal entre verificación y uso (TOCTOU).
¿Por qué practicar Race Condition?
Las race conditions son difíciles de detectar con scanners automáticos, lo que significa menos competencia. Los bounties suelen ser altos porque afectan directamente a la lógica de negocio (pagos duplicados, cupones infinitos, bypass de rate limiting, leveraging de free trials).
¿Qué aprenderás con los labs de Race Condition?
Aprenderás a identificar operaciones susceptibles (decremento de saldo, claim de cupones, votos), usar Turbo Intruder y la single-packet attack de Burp 2022.6+, calcular ventanas de TOCTOU vía warming cache requests, y a reportar con evidencia visual del estado inconsistente.
Tipos de Race Condition que cubrimos
- TOCTOU clásico
Time-Of-Check vs Time-Of-Use: el chequeo (saldo > 0) y el uso (saldo--) no son atómicos. Dos requests paralelas decrementan dos veces.
- Limit overrun
Cupones de un solo uso, votos por usuario, claim de bonus. Mandando N requests al mismo tiempo, todas pasan el check antes de la primera escribir.
- Single-packet attack
Técnica de James Kettle (PortSwigger): meter 20-30 requests en un solo paquete TCP/HTTP2 para que lleguen al server con desfase < 1ms.
¿Cómo encontrar y explotar Race Condition?
Playbook práctico — del recon a la prueba de concepto.
- 1
Identificar una operación con estado limitado
Busca acciones que deberían ocurrir una sola vez o tienen un límite: canjear cupón, retirar saldo, aplicar bonus, votar, redimir gift card.
POST /api/coupon/redeem {"code":"WELCOME10"} (debería ser 1 uso) - 2
Capturar y duplicar la petición
Manda la misma petición muchas veces en paralelo para colisionar entre el check y la escritura. En Burp, agrupa en un grupo paralelo.
Burp → Send group in parallel (single-packet attack) - 3
Lanzar el single-packet attack
Con Turbo Intruder o Burp 2022.6+, mete 20-30 peticiones en un solo paquete HTTP/2 para que lleguen con <1ms de desfase y ganen la carrera.
engine=Engine.BURP2, concurrentConnections=1; 30x engine.queue(request) - 4
Verificar el estado inconsistente
Comprueba el efecto: cupón aplicado N veces, saldo negativo, varias retiradas. Captura la evidencia del estado roto.
Saldo antes: 100 · 5 retiradas de 100 procesadas · Saldo: -400 - 5
Reportar con impacto económico
Cuantifica: cuántas veces se duplicó, el valor monetario y la ventana. Eso eleva la severidad y el bounty.
30/30 redenciones aceptadas del cupón de un solo uso → fraude reproducible
Aprende la teoría
Academy: Race Conditions
Cargando labs...
Ver en catálogo completo →Preguntas frecuentes
¿Qué es una Race Condition?
Es un fallo que ocurre cuando dos o más peticiones concurrentes manipulan el mismo recurso y la app no garantiza atomicidad. La ventana entre la comprobación (check) y el uso (use) permite que varias peticiones pasen el control antes de que ninguna escriba el nuevo estado.
¿Cómo se explota una Race Condition?
Se envían múltiples peticiones idénticas en paralelo para que colisionen en esa ventana. Con la single-packet attack (Burp/Turbo Intruder) se logra que decenas lleguen con menos de 1ms de diferencia, duplicando canjes de cupones, retiradas de saldo o votos.
¿Cómo encontrar Race Conditions en bug bounty?
Busca operaciones que deberían ser de un solo uso o con límite (cupones, gift cards, retiradas, free trials, votos) y reenvíalas en grupo paralelo. Si el efecto se multiplica, hay race. Los scanners no las detectan, así que hay poca competencia.
¿Cómo prevenir una Race Condition?
Usa operaciones atómicas y transacciones a nivel de base de datos, bloqueos pesimistas/optimistas (SELECT ... FOR UPDATE, versionado), constraints de unicidad e idempotency keys en las peticiones que cambian estado.
¿Qué es la single-packet attack?
Es una técnica de James Kettle (PortSwigger) que encapsula 20-30 peticiones en un único paquete TCP usando HTTP/2 para neutralizar el jitter de red, logrando que lleguen al servidor casi simultáneamente y maximizando la probabilidad de ganar la carrera.
Otras categorías relacionadas
Empieza con labs de Race Condition
Practica Race Condition (TOCTOU) con labs basados en reportes reales. En español. Desde 7,99€/mes.
Empieza con el primer lab de Race Condition