Scope
src/MultiSigTimelock.sol: TransactionProposed, _proposeTransaction
Normal behavior: Events should include calldata so off-chain reviewers can reconstruct intent.
Issue: TransactionProposed emits only to and value. Attackers can publish a “harmless” proposal summary off-chain while the on-chain calldata performs approve(spender, type(uint256).max) or upgradeTo(attacker), and observers cannot verify from logs alone.
Likelihood:
Reason 1 // Reviewers commonly rely on event streams, not direct storage reads
Reason 2 // Social-engineering around multisig approvals is common
Impact:
Impact 1 // Signers approve malicious calldata under false pretenses
Impact 2 // Incident response hampered; historical calldata unavailable from logs
Explanation: Propose data = abi.encodeWithSignature("approve(address,uint256)", attacker, type(uint256).max). Event consumers see only to/value, assume benign transfer, and confirmations proceed.
Explanation: Emit data (or a hash) in the proposal event and have UIs validate it against user-signed digests.
Status: Valid (Observability Gap)
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.