When a signer is revoked using revokeSigningRole, their previous confirmations on pending transactions are not removed. The check in executeTransaction only verifies txn.confirmations >= REQUIRED_CONFIRMATIONS (a simple counter) and does NOT verify if the addresses that provided those confirmations are still valid signers.
This means a compromised signer can:
Approve a malicious transaction.
Be detected and revoked by the Owner.
The malicious transaction still retains 1 valid confirmation count.
The remaining valid signers can then (intentionally or accidentally) complete the quorum with fewer actual valid signatures than intended.
For example, if REQUIRED = 3, and Malicious_A signs (count=1), then is revoked. New signer D is added. If B and C sign, count=3. The tx executes. Effectively, B and C executed a transaction with only 2 valid concurrent signatures, relying on the "ghost vote" of revoked A.
Combined with the lack of a cancelTransaction function (See I-1), this makes it impossible for the Owner to stop a pending malicious transaction that has already gathered confirmations, even if they replace the entire signer set. The past votes haunt the system.
Likelihood: Medium (Requires revocation and pending tx).
Impact: High (Weakens the security model, allows revoked keys to influence future executions, unstoppable transactions).
Signer A confirms tx. confirmations = 1.
Owner revokes A.
Owner adds D.
B and C confirm. confirmations = 3.
executeTransaction succeeds.
Result: Transaction executed with only 2 currently valid signers (B and C).
Recommendation: Create a version number for the signer set, or simply accept that executeTransaction must re-validate signers. Since iterating 5 signers is cheap, executeTransaction should loop through s_signers and count how many have s_signatures[txnId][signer] == true.
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.