The PerpetualVault contract has a critical issue in its fee refund mechanism, where failed refunds are simply ignored without any proper error handling or recovery mechanism. The withdrawEth function, which only applies to the current owner, does not provide adequate protection or recovery options for user funds trapped due to failed refunds.
In the _payExecutionFee function the function stores the full message value as the execution fee without taking into account the actual amount used and there is no mechanism to track partial fee usage.
In the _mint function the empty try-catch block silently ignores the failure with no event emitted for failed refunds and no tracking of the failed refund amount which means that if a refund fails, the funds remain stuck in the `GMXProxy` contract.
The withdrawEth function in GMXProxy can only be accessed by the owner, regular users who experience a failed refund have no way to reclaim their funds and the owner does not know which funds are failed refunds and which are valid fees.
There is no way to distinguish between ETH from failed refunds, ETH from unspent execution fees, and ETH from other operations. When an owner withdraws all ETH, there is no way to verify ownership of the funds.
Users lose unclaimed execution fees
Users cannot verify refund status
User deposits funds with execution fee: vault.deposit{value: 1 ETH}(1000)
Operation completes using only partial fee (e.g., 0.5 ETH)
Refund attempt fails silently due to:
Contract out of gas
Receiver contract reverts
Other network issues
Failed refund (0.5 ETH) remains trapped in GmxProxy
User has no mechanism to recover funds
Owner can withdraw all funds including failed refunds, but:
Cannot identify which funds belong to which users
No way to verify legitimate claims
Users lose their refunds permanently
Manual review
Implement user-accessible refund claiming
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.