Skip to content

Unprotected $VAULT.getPoolTokens() call from read-only reentrancy

Description

The $VAULT.getPoolTokens() call on a Balancer pool is not protected from the read-only reentrancy, which can lead to potential security vulnerabilities.

Examples

Insecure Code

solidity
function getPoolTokens() public {
  uint256[] memory tokens = $VAULT.getPoolTokens();
  ... 
}

Secure Code

solidity
function getPoolTokens() public {
  VaultReentrancyLib.ensureNotInVaultContext();
  uint256[] memory tokens = $VAULT.getPoolTokens();
  ... 
}

Remediation

Add a reentrancy check using VaultReentrancyLib.ensureNotInVaultContext() before calling $VAULT.getPoolTokens()

Rule Details

FieldValue
IDCODE-0466
CategoryInjection
SeverityHIGH
CWECWE-841
ConfidenceHIGH
ImpactHIGH
LikelihoodMEDIUM
ExploitabilityMODERATE
Tagsreentrancy, Balancer pool
OWASPN/A

References