Summary
The addTokenMaxDeviation function enables the owner to set a maximum price deviation. Unauthorized changes to this setting may lead to overly permissive deviation levels, making the oracle less reliable.
Vulnerability Details
function addTokenMaxDeviation(address token, uint256 maxDeviation) external onlyOwner {
if (token == address(0)) revert Errors.ZeroAddressNotAllowed();
if (feeds[token] == address(0)) revert Errors.NoTokenPriceFeedAvailable();
if (maxDeviation < 0) revert Errors.TokenPriceFeedMaxDeviationMustBeGreaterOrEqualToZero();
maxDeviations[token] = maxDeviation;
}
Impact
As attackers can set overly permissive deviation levels, making the oracle less reliable. This could result in incorrect or manipulated price data being reported, which can lead to financial losses for users and applications relying on accurate price information.
Recommended Mitigation Steps
Vulnerable
function addTokenMaxDeviation(address token, uint256 maxDeviation) external onlyOwner {
if (token == address(0)) revert Errors.ZeroAddressNotAllowed();
if (feeds[token] == address(0)) revert Errors.NoTokenPriceFeedAvailable();
if (maxDeviation < 0) revert Errors.TokenPriceFeedMaxDeviationMustBeGreaterOrEqualToZero();
maxDeviations[token] = maxDeviation;
}
Recommended
modifier onlyOwnerOrAuthorized() {
require(msg.sender == owner() || msg.sender == authorizedAddress, "Not the owner or an authorized address");
_;
}
address public authorizedAddress;
function setAuthorizedAddress(address _authorizedAddress) external onlyOwner {
authorizedAddress = _authorizedAddress;
}
function addTokenMaxDeviation(address token, uint256 maxDeviation) external onlyOwnerOrAuthorized {
require(token != address(0), "Token address cannot be zero");
require(feeds[token] != address(0), "No token price feed available");
require(maxDeviation >= 0, "Token price feed max deviation must be greater or equal to zero");
maxDeviations[token] = maxDeviation;
}