Skip to content

PendingAdmin's accept_admin — confirm there's no timeout on a pending admin-transfer proposal (an old, forgotten proposal could be accepted years later by a now-compromised or reassigned address) #413

Description

@Christopherdominic

The two-step admin transfer (propose+accept_admin, referenced by DataKey::PendingAdmin) is a good pattern for avoiding typo-lockout, but it's worth confirming whether a pending proposal ever expires. If an admin proposes a transfer to some address, that transfer is never accepted (the intended recipient never gets around to it, or circumstances change and the transfer is no longer wanted, but nobody explicitly cancels it — is there even a cancel_admin_transfer entrypoint?), and years later the original proposing admin's own key becomes compromised or the address it was meant for changes hands/gets compromised in the interim, an attacker who gains control of that stale pending-admin address could call accept_admin and take over the contract at a time completely disconnected from when the transfer was actually intended.

Task: Confirm whether a pending admin proposal has any expiry, and whether a cancel_admin_transfer-style entrypoint exists for the current admin to explicitly retract a proposal they no longer want pending. If neither exists, add both — this is the same class of "unbounded-lifetime pending state" risk the upgrade timelock and payout-address-change delay both explicitly account for elsewhere in this same contract, so admin transfer shouldn't be the one exception.

Metadata

Metadata

Assignees

Labels

GrantFox OSSIssue tracked in GrantFox OSSMaybe RewardedIssue may be eligible for a GrantFox rewardThird CampaignCampaign: Third Campaigndifficulty: very hardRequires deep expertise and substantial effortsecuritySecurity hardening or vulnerability work

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions