🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónCondiciones de carrera en saldos y cupos
5 tareas · 45 min · Principiante
Un control puede estar bien escrito y aun así fallar cuando dos peticiones llegan casi al mismo tiempo. Finanzas de Despensa Mecato ve saldos de billetera que suman más de lo recargado, y logística tuvo una franja con más pedidos que repartidores. Te entregan el servicio de la billetera, el de franjas y los registros con milisegundos de esos días.
Objetivo de la sala
Un control puede estar bien escrito y aun así fallar cuando dos peticiones llegan casi al mismo tiempo. Finanzas de Despensa Mecato ve saldos de billetera que suman más de lo recargado, y logística tuvo una franja con más pedidos que repartidores. Te entregan el servicio de la billetera, el de franjas y los registros con milisegundos de esos días.Casi todos los controles de saldo y de cupo siguen el mismo patrón: leer un valor, compararlo con un límite y, si cabe, escribir el nuevo valor. Entre la lectura y la escritura pasa tiempo, a veces unos milisegundos y a veces casi un segundo si en medio hay una llamada a otro servicio. Si en ese intervalo llega otra petición sobre el mismo saldo, las dos leen el mismo valor, las dos pasan la comprobación y las dos escriben.
MITRE llama a esto condición de carrera, CWE-362: ejecución concurrente sobre un recurso compartido sin la sincronización adecuada. Su caso más conocido tiene entrada propia, CWE-367, cuando lo que se comprobó ya no es cierto en el momento de usarlo. En la lógica de negocio aparece en saldos, cupos, inventario, cupones de un solo uso y cualquier límite que se cuenta.
Responde para continuar
Dos cobros de 40000 llegan a la vez contra una billetera con 50000. ¿Por qué pueden pasar los dos?
Ver pista de ayuda
Ordena en el tiempo las lecturas y las escrituras de las dos peticiones.
Abre el laboratorio y lee BilleteraService.php en la carpeta mecato-carreras. Hay dos defectos que se suman: la lectura y la escritura están separadas por la llamada al antifraude, y el valor que se escribe se calcula con el saldo leído al principio, no con el que haya en ese momento. Luego lee registro-billetera.txt. Una carrera deja una huella reconocible: varias operaciones del mismo cliente, separadas por milisegundos, que leyeron exactamente el mismo saldo.
Responde para continuar
¿Qué cliente tuvo tres cobros que leyeron el mismo saldo? Escribe su código.
Ver pista de ayuda
Busca la misma hora con milisegundos casi iguales y el mismo saldo leído.
Como cada cobro escribe el saldo leído menos su monto, el último en escribir pisa a los demás: la billetera queda como si solo hubiera habido un cobro. Para medirlo, compara por cliente lo que se cobró con lo que bajó de verdad el saldo (el primer saldo leído del periodo menos el último saldo escrito). La diferencia es dinero que se gastó con la billetera sin salir de ella.
Responde para continuar
¿Cuántos pesos se cobraron con la billetera en el registro sin descontarse del saldo?
Ver pista de ayuda
Un cliente con cobros en momentos distintos no aporta diferencia; el rechazado no cuenta.
El mismo patrón aparece en FranjaService.php: contar los pedidos de la franja, comparar con el cupo y asignar. Lee registro-franjas.txt, donde cada asignación dice qué conteo leyó, y franjas-2026-11-08.txt, con el cierre del día.
Responde para continuar
¿Qué franja del sábado terminó con más pedidos que su cupo? Escribe su código.
Ver pista de ayuda
Mira las asignaciones que leyeron el mismo conteo en el mismo instante.
Un arreglo que solo hace más pequeña la ventana (responder más rápido, quitar la llamada al antifraude) no la cierra: la carrera sigue ahí con menos probabilidad. Lo que la cierra es que la comprobación y la escritura sean una sola operación que la base de datos ejecuta sin que otra la interrumpa, o que la fila quede bloqueada mientras dura la transacción.
Responde para continuar
¿Qué cambio en el cobro con billetera cierra la condición de carrera?
Ver pista de ayuda
Busca la opción en la que nadie puede colarse entre comprobar y escribir.
Whoami-Labs Pro
Whoami-Labs Pro utiliza cookies
Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad
Preferencias
Configuraciones de cookies
Elige qué categorías permitir. Las esenciales siempre están activas. Consulta la Política de Privacidad.
Esenciales
Siempre activas · sesión, CSRF, tema y esta preferencia
Necesarias para iniciar sesión, proteger formularios (CSRF) y recordar tu elección de cookies y tema. Sin ellas la plataforma no funciona de forma segura.
Analíticos
Hoy no activos en la plataforma; listos para cuando se conecten
Nos ayudan a entender uso de cursos y páginas. Si los activas, se usarán cuando conectemos analítica; hasta entonces no se carga ningún tracker.
Marketing
Hoy no activos; campañas futuras solo con tu permiso
Comunicaciones o campañas. No activos hoy en la plataforma; quedarán listos si los conectamos y solo si los permites.