User-agent auth accepts integrity-unavailable state while sealed #61
Reference in New Issue
Block a user
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?
Info
Severity: HIGH
Attack vector: offline
Impact
Allows a tampered user-agent record to authenticate while the vault is sealed, enabling unauthorized access to sealed-state functionality and denial-of-service opportunities.
Description
When the keyholder is sealed or not bootstrapped, entity verification returns
AttestationStatus::Unavailable. The user-agent authentication path discards that status and treats it as success instead of rejecting the tampered record. As a result, a database write attacker can insert or modify a user-agent record and still authenticate while the vault is sealed.Example flow
useragent_clientrow in the SQLite database.Unavailableis treated asOk(()).Mitigation
Treat
AttestationStatus::Unavailableas an authentication failure for security-sensitive paths, or defer authentication until integrity can be verified.Currently it's intended behaviour, because vault could be sealed and verification couldn't be performed