In a multi-signature wallet, only currently authorized signers (holding the SIGNING_ROLE) should be able to approve and facilitate the execution of transactions.
The contract uses a snapshot-based counter confirmations in the Transaction struct. When a signer is revoked via revokeSigningRole, the contract fails to decrement this counter or invalidate the signature for pending transactions. This allows a transaction to be executed using a "zombie" signature from a person who is no longer authorized.
Likelihood:
This occurs whenever a signer is removed (e.g., due to a key leak or dismissal) while there are active, unexecuted transaction proposals they have already signed.
The vulnerability is present for the entire duration of the timelock period.
Impact:
Authorization Bypass: Transactions can be executed with only 2 valid signatures if 1 "zombie" signature remains from a revoked user.
Theft of Funds: A compromised signer can sign a malicious transaction right before being revoked, and that signature will remain valid to drain the wallet.
Governance Violation: The 3-of-N security model is undermined as the actual number of currently-authorized approvals may be lower than required.
Run:
Output:
Recalculate valid confirmations at execution time using only current signers:
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.