The lack of sequencer uptime verification was an issue that was reported in the previous Cyfrin audit.
Zaros has implemented the requirements to partially mitigate the issue however, it is not enforced meaning the issue can still occur.
Thus, we believe the current issue to not be considered a known issue as it deviates slightly from the previous.
The sequencer is involved in different sections of the protocol where Chainlink oracles are used, notably in the MarginCollateralConfiguration::getPrice() function that is used to retrieve the USD price of a collateral which plays a vital role in a PnL based protocol.
First, this function DOES verify that the priceFeed is set BUT DOESN'T verify the sequencerUptimeFeed is.
If we take a look at the ChainlinkUtil.getPrice() function, we notice it performs a verification regarding the sequencerUptimeFeed but still allows the transaction to proceed in case it has not been set.
https://github.com/Cyfrin/2024-07-zaros/blob/main/src/external/chainlink/ChainlinkUtil.sol#L41-L57
The sequencer address is set through the GlobalConfigurationBranch::configureSequencerUptimeFeedByChainId() function meaning the system can be deployed successfully without the sequencer uptime feed being set.
All the prices retrieved from the Chainlink oracle can be stale in case the Arbitrum sequencer is down which could cause multiple issues in Zaros such as unexpected liquidations and risk free trades.
Manual review
In src/external/chainlink/ChainlinkUtil.sol make sure to revert the transaction in case the sequencer uptime feed is not set
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.