Funds will be stuck in the contract as there are no recovery methods to take out shares of holders which owns the token but was disapproved at a later stage.
Proof of Concept
Main concept of LiquidInfrastructureERC20 is to distribute the revenue accured from NFTs to it’s holders.
Owner can use disapproveHolder to remove already approved holder from allowlist. It can be called anytime which is a normal behaviour.
function disapproveHolder(address holder) public onlyOwner {
require(isApprovedHolder(holder), "holder not approved");
HolderAllowlist[holder] = false;
}
During distribution, it is validated that only the approved holder can receive the tokens.
Funds will be stuck in the contract as there are no recovery methods to take out shares of holders which owns the token but was disapproved at a later stage.
Proof of Concept
Main concept of LiquidInfrastructureERC20 is to distribute the revenue accured from NFTs to it's holders.
Owner can use disapproveHolder to remove already approved holder from allowlist. It can be called anytime which is a normal behaviour.
function disapproveHolder(address holder) public onlyOwner {
require(isApprovedHolder(holder), "holder not approved");
HolderAllowlist[holder] = false;
}
During distribution, it is validated that only the approved holder can receive the tokens.
Judge has assessed an item in Issue #132 as 2 risk. The relevant finding follows:
Lines of code
https://github.com/code-423n4/2024-02-althea-liquid-infrastructure/blob/main/liquid-infrastructure/contracts/LiquidInfrastructureERC20.sol#L216
Vulnerability details
Impact
Funds will be stuck in the contract as there are no recovery methods to take out shares of
holders
which owns the token but was disapproved at a later stage.Proof of Concept
Main concept of
LiquidInfrastructureERC20
is to distribute the revenue accured from NFTs to it’s holders.Owner can use
disapproveHolder
to remove already approved holder from allowlist. It can be called anytime which is a normal behaviour.During distribution, it is validated that only the approved holder can receive the tokens.
Now consider the following scenario:
LiquidInfrastructureERC20
tokens.disapproveHolder
which is a normal behaviour.Tools Used
VS Code
Recommended Mitigation Steps
I would recommend to add a function with
onlyOwner
access to withdraw the share of accounts who are unapproved but still owns the token.Assessed type
Other
Lines of code
https://github.com/code-423n4/2024-02-althea-liquid-infrastructure/blob/main/liquid-infrastructure/contracts/LiquidInfrastructureERC20.sol#L216
Vulnerability details
Impact
Funds will be stuck in the contract as there are no recovery methods to take out shares of
holders
which owns the token but was disapproved at a later stage.Proof of Concept
Main concept of
LiquidInfrastructureERC20
is to distribute the revenue accured from NFTs to it's holders.Owner can use
disapproveHolder
to remove already approved holder from allowlist. It can be called anytime which is a normal behaviour.During distribution, it is validated that only the approved holder can receive the tokens.
Now consider the following scenario:
LiquidInfrastructureERC20
tokens.disapproveHolder
which is a normal behaviour.Tools Used
VS Code
Recommended Mitigation Steps
I would recommend to add a function with
onlyOwner
access to withdraw the share of accounts who are unapproved but still owns the token.Assessed type
Other