Existe uma condição de corrida (race condition) nos caminhos de checkout de ativos. As funções `ApiAssetsController::checkout()` e `AssetsAssetCheckoutController::store()` chamam `Asset::availableForCheckout()` fora do caminho de mutação e, posteriormente, invocam `Asset::checkOut()` sem implementar um bloqueio de linha (row lock) ou re-verificar a disponibilidade. Consequentemente, duas solicitações de checkout simultâneas para o mesmo ativo disponível podem ser processadas como bem-sucedidas. Isso resulta em linhas de histórico de checkout duplicadas, um `checkout counter` duplicado e dois eventos `CheckoutableCheckedOut` para um ativo de atribuição única, corrompendo a trilha de auditoria e os relatórios de utilização/reconciliação. O valor final de `assigned to` permanece singular, mantendo a atribuição visível intacta. A exploração requer uma sessão autenticada com a permissão `assets.checkout` ou privilégios de superusuário, combinada com um tempo de concorrência preciso.