A server holds caller-supplied parameters in a cache while it asks an external authorizer whether the action is permitted. The cache is keyed on a slot identifier (a transaction id, a request handle, a session, a ticket). The authorizer's answer is also keyed on the slot identifier. When the answer arrives, the server reads the cache by slot id and acts on whatever value is there.
The race window is between the auth request and the auth answer. During that window the cache is writable by the same caller who created the slot. If the caller writes a new parameter set into the slot before the auth answer arrives, the auth result still binds to the slot, but the value the auth result now applies to is the attacker's. The user who answered yes was answering yes to one thing; the action the system runs is on a different thing.
Three properties together produce the bug. First, parameters live in a mutable server-side cache rather than being captured into the auth request itself. Second, the auth answer is bound to slot identity rather than to a snapshot or hash of the parameters. Third, the caller who can request auth is the same actor who can rewrite the slot before the answer is consumed. Remove any one and the pattern collapses: a stateless auth call that takes the parameters as part of the call has nothing to swap; a content-addressable auth grant cannot be applied to different content; a slot only the authorizer can write cannot be raced.
The pattern shows up wherever a server treats authorization as a permission to act on a slot rather than a permission to act on a value. PackageKit's pre-1.3.5 transaction cache was the canonical exhibit, but the shape is widely repeated: D-Bus services with cached method parameters, OAuth flows with mutable scope or claim payloads between consent and token exchange, REST APIs that accept a PATCH on a request-handle while the request is "pending review", any signed-approval system where the claim signs a request-id rather than the request body. Every fix lands in the same place: capture the value into the auth request at the moment the question is asked, lock the slot until the answer is bound, or sign the grant over the content rather than the slot.