1. ReserveLogic.sol

https://github.com/aave/aave-v3-core/blob/master/contracts/protocol/libraries/logic/ReserveLogic.sol

function cumulateToLiquidityIndex(
  DataTypes.ReserveData storage reserve,
  uint256 totalLiquidity,
  uint256 amount
) internal returns (uint256) {
  // ((amount / totalLiquidity) + 1) * liquidityIndex -> 이 부분이 원래 활성화 되어 있었음
  uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(
    reserve.liquidityIndex
  );
  reserve.liquidityIndex = result.toUint128();
  return result;
}

((amount / totalLiquidity) + 1) * liquidityIndex 부분이 취약점임

왜 위험한가?


2. ScaledBalanceTokenBase.sol

https://github.com/aave/aave-v3-core/blob/master/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol

mint

function _mintScaled(
  address caller,
  address onBehalfOf,
  uint256 amount,
  uint256 index
) internal returns (bool) {
  uint256 amountScaled = amount.rayDiv(index);
  require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);

  ...
  _mint(onBehalfOf, amountScaled.toUint128());
  ...
}

결과: 터무니없이 적은 토큰을 입금하여 많은 토큰을 받을 수 있음 (0은 제외)