#38344 [SC-Low] Old validated messages can not pass proof check when new validators are set
Submitted on Dec 31st 2024 at 13:24:54 UTC by @security for Audit Comp | Lombard
Report ID: #38344
Report Type: Smart Contract
Report severity: Low
Target: https://github.com/lombard-finance/evm-smart-contracts/blob/main/contracts/consortium/Consortium.sol
Impacts:
Contract fails to deliver promised returns, but doesn't lose value
Protocol insolvency
Description
Brief/Intro
During the proof verification process, the signatures provided are checked against the current validator set. However, the message may have been validated using a previous validator set, as validator rotations occur frequently for security reasons. Verification should instead be performed against the validator set active during the epoch when the message was validated, not the current epoch.
Vulnerability Details
Imagine a deposit is initiated for bridging to the destination chain, where the message is validated using the current validator set. The signatures of this set are included in the proof for withdrawal on the destination chain.
If the validator set is updated before the message is delivered to the destination chain, proof verification will fail. This happens because the proof contains signatures from the earlier validator set (e.g., epoch 500), whereas the current validator set belongs to a new epoch (e.g., epoch 501). This mismatch causes the proof verification to revert with the error NotEnoughSignatures
.
Reference
The exact mechanism for off-chain validator rotations is beyond the scope of this discussion, so the details of how validator sets are updated remain unclear.
Impact Details
Frequent validator rotations render messages validated by earlier validator sets unverifiable. This leads to:
Griefing scenarios where an attacker disrupts the protocol or user activity without financial gain (e.g., causing losses exceeding $1,000).
Contract fails to deliver promised returns, but doesn't lose value
Protocol insolvency
References
Proof of Concept
PoC
The absence of the epoch number in the proof prevents the protocol from identifying the validator set that validated the message during proof verification.
Adding the epoch number to the proof enables accurate verification by ensuring alignment between the validator set used for validation and the one used for proof verification. This prevents failures resulting from validator rotations and improves protocol reliability.
Was this helpful?