Skip to content
This repository has been archived by the owner on Nov 12, 2023. It is now read-only.

0x52 - chainlinkAdaptor#getMarkPrice doesn't check if the sequencer is up #439

Closed
sherlock-admin opened this issue May 10, 2023 · 0 comments
Labels
Non-Reward This issue will not receive a payout

Comments

@sherlock-admin
Copy link
Contributor

sherlock-admin commented May 10, 2023

0x52

medium

chainlinkAdaptor#getMarkPrice doesn't check if the sequencer is up

Summary

If the Arbitrum sequencer were to go offline the chainlink oracle may return an invalid/stale price. It should always be checked before consuming any data from chainlink.

Vulnerability Detail

https://github.com/sherlock-audit/2023-04-jojo/blob/main/smart-contract-EVM/contracts/adaptor/chainlinkAdaptor.sol#L43-L55

function getMarkPrice() external view returns (uint256 price) {
    int256 rawPrice;
    uint256 updatedAt;
    (, rawPrice, , updatedAt, ) = IChainlink(chainlink).latestRoundData();
    (, int256 USDCPrice,, uint256 USDCUpdatedAt,) = IChainlink(USDCSource).latestRoundData();
    require(
        block.timestamp - updatedAt <= heartbeatInterval,
        "ORACLE_HEARTBEAT_FAILED"
    );
    require(block.timestamp - USDCUpdatedAt <= heartbeatInterval, "USDC_ORACLE_HEARTBEAT_FAILED");
    uint256 tokenPrice = (SafeCast.toUint256(rawPrice) * 1e8) / SafeCast.toUint256(USDCPrice);
    return tokenPrice * 1e18 / decimalsCorrection;
}

As seen above, the Chainlink oracle never checks if the Arbitrum sequencer is up, allowing to to consume stale/invalid price data.

Impact

Invalid/stale data if Arbitrum sequencer isn't online

Code Snippet

https://github.com/sherlock-audit/2023-04-jojo/blob/main/smart-contract-EVM/contracts/adaptor/chainlinkAdaptor.sol#L43-L55

Tool used

Manual Review

Recommendation

Check sequencer uptime before consuming any price data

Duplicate of #101

@github-actions github-actions bot added Medium A valid Medium severity issue Duplicate A valid issue that is a duplicate of an issue with `Has Duplicates` label labels May 17, 2023
@sherlock-admin sherlock-admin added the Reward A payout will be made for this issue label May 30, 2023
@sherlock-admin sherlock-admin added Non-Reward This issue will not receive a payout and removed Medium A valid Medium severity issue Duplicate A valid issue that is a duplicate of an issue with `Has Duplicates` label Reward A payout will be made for this issue labels Jun 19, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Non-Reward This issue will not receive a payout
Projects
None yet
Development

No branches or pull requests

1 participant