Summary
Lack of current address check before setting a new address.
Vulnerability Details
function setOwner(address _newOwner) external onlyOwner {
if (_newOwner == address(0)) revert InvalidZeroAddress();
owner = _newOwner;
}
function setRewardAdmin(address _rewardAdmin) external onlyOwner {
if (_rewardAdmin == address(0)) revert InvalidZeroAddress();
rewardAdmin = _rewardAdmin;
}
function addAuthorizedSablierSender(address _address) external onlyOwner {
authorizedSablierSenders[_address] = true;
}
https://github.com/Cyfrin/2024-08-fjord/blob/0312fa9dca29fa7ed9fc432fdcd05545b736575d/src/FjordStaking.sol#L347C5-L359C6
In the provided functions setOwner
, setRewardAdmin
, and addAuthorizedSablierSender
, there is no check to determine if the new address being set is the same as the current address.
Impact
If a function is called with the same address that is already set, it will still execute the state change operation, consuming gas unnecessarily.
Tools Used
Manual review
Recommendations
Implement a check in each function to compare the new address with the current address before proceeding with the state change. For example:
function setOwner(address _newOwner) external onlyOwner {
if (_newOwner == address(0)) revert InvalidZeroAddress();
if (_newOwner == owner) revert NoChangeInAddress();
owner = _newOwner;
}
function setRewardAdmin(address _rewardAdmin) external onlyOwner {
if (_rewardAdmin == address(0)) revert InvalidZeroAddress();
if (_rewardAdmin == rewardAdmin) revert NoChangeInAddress();
rewardAdmin = _rewardAdmin;
}
function addAuthorizedSablierSender(address _address) external onlyOwner {
if (authorizedSablierSenders[_address]) revert AlreadyAuthorized();
authorizedSablierSenders[_address] = true;
}