security: EntitlementService usage recording has race condition under concurrency #42
Labels
No labels
P1
P2
P3
PHP
agent-ready
bug
clotho
discovery
docs
epic
refactor
review
security
testing
athena
athena-gemini
audit
clotho
clotho-gemini
codex
darbs-claude
security
wiki
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: core/php-tenant#42
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Services/EntitlementService.phpusage recording does not use database-level locking. Concurrent requests can read the same current usage value and both increment it, resulting in under-counting.Example scenario:
Similarly,
provisionBoost()and package provisioning do not prevent duplicate active records within a transaction.Impact
Acceptance Criteria
DB::transaction()withlockForUpdate()around usage reads/writes inrecordUsage()andrecordNamespaceUsage()DB::raw('usage_count + 1')) rather than read-then-writewhereDateguard to prevent duplicate package provisioningDiscovered during automated scan (issue #3)
Charon referenced this issue2026-02-20 23:57:34 +00:00