DeFiFoundry
50,000 USDC
View results
Submission Details
Severity: low
Invalid

Arbitrary State Manipulation via setVaultState

Summary

While the setVaultState function is not directly called in the provided code, its mere presence in the contract introduces a critical vulnerability. The function allows the owner to unilaterally override core vault state variables, creating a silent backdoor for fund theft or protocol manipulation.


Key Clarifications

  1. Unused ≠ Safe:
    Even if not currently called, the function exists in the contract bytecode and is callable by the owner at any time. This violates the principle of least privilege.

  2. No On-Chain Invocation Required for Risk:
    The function's existence alone means a malicious/compromised owner can activate it in the future without requiring code changes, as it is already deployed.


Revised Exploit Scenario

  1. Stealth Attack:

    • Owner waits until the vault holds significant user funds.

    • Calls setVaultState to:

      • Set curPositionKey = 0x0 (fake closed position)

      • Set _gmxLock = false (bypass withdrawal locks)

    • Withdraws all collateral while the vault falsely reports active positions.

  2. Freeze Attack:

    • Owner sets _gmxLock = true permanently, blocking all user withdrawals.


Impact Validation

Direct Loss of Funds:

  • ✅ Confirmed: The function allows the owner to fabricate vault states to bypass withdrawal checks.

  • ✅ Provable: Executable in one transaction with no dependencies.


Recommendations

  1. Remove setVaultState:

    // DELETE THIS FUNCTION
    function setVaultState(...) external onlyOwner { ... }
  2. Time-Locked Emergency Recovery:
    If state recovery is needed, implement a 7-day timelock for emergency state changes (example => OpenZeppelin's TimelockController).


Why This Is Still Critical

  • Silent Backdoor: The function violates the protocol's trust model by allowing unilateral state overrides.

  • No Code Changes Needed for Exploit: The owner can trigger it at any time post-deployment.

Updates

Lead Judging Commences

n0kto Lead Judge 5 months ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity
Assigned finding tags:

Informational or Gas

Please read the CodeHawks documentation to know which submissions are valid. If you disagree, provide a coded PoC and explain the real likelihood and the detailed impact on the mainnet without any supposition (if, it could, etc) to prove your point.

Admin is trusted / Malicious keepers

Please read the CodeHawks documentation to know which submissions are valid. If you disagree, provide a coded PoC and explain the real likelihood and the detailed impact on the mainnet without any supposition (if, it could, etc) to prove your point. Keepers are added by the admin, there is no "malicious keeper" and if there is a problem in those keepers, that's out of scope. ReadMe and known issues states: " * System relies heavily on keeper for executing trades * Single keeper point of failure if not properly distributed * Malicious keeper could potentially front-run or delay transactions * Assume that Keeper will always have enough gas to execute transactions. There is a pay execution fee function, but the assumption should be that there's more than enough gas to cover transaction failures, retries, etc * There are two spot swap functionalies: (1) using GMX swap and (2) using Paraswap. We can assume that any swap failure will be retried until success. " " * Heavy dependency on GMX protocol functioning correctly * Owner can update GMX-related addresses * Changes in GMX protocol could impact system operations * We can assume that the GMX keeper won't misbehave, delay, or go offline. " "Issues related to GMX Keepers being DOS'd or losing functionality would be considered invalid."

Appeal created

maze Submitter
5 months ago
0xl33 Auditor
5 months ago
n0kto Lead Judge
5 months ago
n0kto Lead Judge 5 months ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity
Assigned finding tags:

Informational or Gas

Please read the CodeHawks documentation to know which submissions are valid. If you disagree, provide a coded PoC and explain the real likelihood and the detailed impact on the mainnet without any supposition (if, it could, etc) to prove your point.

Admin is trusted / Malicious keepers

Please read the CodeHawks documentation to know which submissions are valid. If you disagree, provide a coded PoC and explain the real likelihood and the detailed impact on the mainnet without any supposition (if, it could, etc) to prove your point. Keepers are added by the admin, there is no "malicious keeper" and if there is a problem in those keepers, that's out of scope. ReadMe and known issues states: " * System relies heavily on keeper for executing trades * Single keeper point of failure if not properly distributed * Malicious keeper could potentially front-run or delay transactions * Assume that Keeper will always have enough gas to execute transactions. There is a pay execution fee function, but the assumption should be that there's more than enough gas to cover transaction failures, retries, etc * There are two spot swap functionalies: (1) using GMX swap and (2) using Paraswap. We can assume that any swap failure will be retried until success. " " * Heavy dependency on GMX protocol functioning correctly * Owner can update GMX-related addresses * Changes in GMX protocol could impact system operations * We can assume that the GMX keeper won't misbehave, delay, or go offline. " "Issues related to GMX Keepers being DOS'd or losing functionality would be considered invalid."

Support

FAQs

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