Part 2

Zaros
PerpetualsDEXFoundrySolidity
70,000 USDC
View results
Submission Details
Severity: high
Invalid

Balance Lookup in getMarginBalanceUsd() Leads to Potential Miscalculations

Summary

A potential bug exists in getMarginBalanceUsd() where balance values are used without explicitly retrieving them from EnumerableMap. This could lead to incorrect balance calculations, affecting margin requirements and risk management.

Vulnerability Details

The issue here is that the getMarginBalanceUsd() function uses balance without explicitly retrieving it from marginCollateralBalanceX18. The Root cause is that, to retrieve stored values from EnumerableMap is using .at(i), but the function does not ensure this step.

  • Exploit Scenario:

    1. Alice has multiple collaterals stored in marginCollateralBalanceX18.

    2. Bob places an order that triggers margin requirement checks.

    3. Due to the incorrect retrieval of balance, Bob’s order may pass when it should have failed.

    4. Alternatively, Alice could be incorrectly liquidated due to an incorrect margin calculation.

Impact

Users may be liquidated even if they meet margin requirements due to incorrect calculations

Tools Used

manual

Recommendations

Ensure correct balance retrieval in getMarginBalanceUsd()

(address collateralType, uint256 balanceX18) = self.marginCollateralBalanceX18.at(i);
UD60x18 adjustedBalanceUsdX18 = marginCollateralConfiguration.getPrice()
.mul(ud60x18(balanceX18))
.mul(ud60x18(marginCollateralConfiguration.loanToValue));
Updates

Lead Judging Commences

inallhonesty Lead Judge 4 months ago
Submission Judgement Published
Invalidated
Reason: Out of scope

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.