Skip to content

Latest commit

 

History

History
45 lines (34 loc) · 1.76 KB

011.md

File metadata and controls

45 lines (34 loc) · 1.76 KB

Proud Rusty Mantis

Medium

Insufficient sequencer validation will cause issues

Vulnerability Detail

The developers have made it a priority to handle any sequencer issues in the code by implementing a modifier used for that:

modifier checkSequencerActive() {
        if (sequencerUptimeFeed != address(0)) {
            (, /*uint80 roundID*/ int256 answer, uint256 startedAt /*uint256 updatedAt*/ /*uint80 answeredInRound*/, , ) = AggregatorV2V3Interface(sequencerUptimeFeed).latestRoundData();

            // Answer == 0: Sequencer is up
            // Answer == 1: Sequencer is down
            bool isSequencerUp = answer == 0;
            if (!isSequencerUp) {
                revert SequencerDown();
            }

            // Make sure the grace period has passed after the
            // sequencer is back up.
            uint256 timeSinceUp = block.timestamp - startedAt;
            if (timeSinceUp <= GRACE_PERIOD_TIME) {
                revert GracePeriodNotOver();
            }
        }
        _;
    }

The issue is that it is not sufficiently validated. According to the chainlink docs, the startedAt variable on Arbitrum (a chain the protocol will be deployed on) can be 0 and that shows that the price feed is still not ready for use:

The startedAt variable returns 0 only on Arbitrum when the Sequencer Uptime contract is not yet initialized.

This will make the check always pass and provide incorrect data across the protocol causing all kinds of issues.

Attack Path

No response

Impact

Incorrect data will be provided across the protocol. The protocol has made it a huge priority to handle sequencer issues, thus this is a valid issue.

Mitigation

Handle a startedAt value of 0