-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Outdated oracle price #254
Labels
3 (High Risk)
Assets can be stolen/lost/compromised directly
bug
Something isn't working
duplicate-34
insufficient quality report
This report is not of sufficient quality
unsatisfactory
does not satisfy C4 submission criteria; not eligible for awards
Comments
c4-submissions
added
3 (High Risk)
Assets can be stolen/lost/compromised directly
bug
Something isn't working
labels
Nov 13, 2023
raymondfam marked the issue as sufficient quality report |
c4-pre-sort
added
the
sufficient quality report
This report is of sufficient quality
label
Nov 16, 2023
raymondfam marked the issue as duplicate of #32 |
raymondfam marked the issue as not a duplicate |
raymondfam marked the issue as insufficient quality report |
c4-pre-sort
added
insufficient quality report
This report is not of sufficient quality
and removed
sufficient quality report
This report is of sufficient quality
labels
Nov 17, 2023
raymondfam marked the issue as duplicate of #34 |
c4-judge
added
the
unsatisfactory
does not satisfy C4 submission criteria; not eligible for awards
label
Dec 1, 2023
fatherGoose1 marked the issue as unsatisfactory: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
3 (High Risk)
Assets can be stolen/lost/compromised directly
bug
Something isn't working
duplicate-34
insufficient quality report
This report is not of sufficient quality
unsatisfactory
does not satisfy C4 submission criteria; not eligible for awards
Lines of code
https://github.com/code-423n4/2023-11-kelp/blob/main/src/oracles/ChainlinkPriceOracle.sol#L37-L39
Vulnerability details
Impact
Oracle's price might be non actual, and might lead to wrong asset prices. And wrong asset prices will lead to wrong amount of rsETH to mint.
Proof of Concept
Let's consider this function:
function getAssetPrice(address asset) external view onlySupportedAsset(asset) returns (uint256) { return AggregatorInterface(assetPriceFeed[asset]).latestAnswer(); }
This function extracts price from ChainLink.
latestAnswer
is deprecated.Current implementation doesn't check this case. And it's possible to get outdated price.
So, solution here is use
latestRoundData
. But additionally check responsestartedAt
value. If it's too old (for example more than 5 minutes), then revert execution.Tools Used
Manual review
Recommended Mitigation Steps
Additionally, when returns price, checks that price is actual.
Assessed type
Oracle
The text was updated successfully, but these errors were encountered: