New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Incorrect Assumption of Stablecoin Market Stability #462
Comments
The warden has shown how, due to an incorrect assumption, the system offers infinite leverage. This can be trivially exploited by arbitraging with any already available exchange. Depositors will incur a loss equal to the size of the arbitrage as the contract is always taking the losing side. I believe this should be High because of it's consistently losing nature |
GalloDaSballo changed the severity to 3 (High Risk) |
GalloDaSballo marked the issue as primary issue |
We are aware of this issue, we will keep the vault with one token for now. |
TriHaz marked the issue as sponsor acknowledged |
GalloDaSballo marked the issue as selected for report |
Lines of code
https://github.com/code-423n4/2022-12-tigris/blob/main/contracts/StableVault.sol#L39-L51
https://github.com/code-423n4/2022-12-tigris/blob/main/contracts/StableVault.sol#L60-L72
Vulnerability details
Impact
The
StableVault
contract attempts to group all types of stablecoins under a single token which can be minted for any of the stablecoins supported by the system as well as burned for any of them.This is at minimum a medium-severity vulnerability as the balance sheet of the
StableVault
will consist of multiple assets which do not have a one-to-one exchange ratio between them as can be observed by trading pools such as Curve as well as the Chainlink oracle reported prices themselves.Given that the contract exposes a 0% slippage 1-to-1 exchange between assets that in reality have varying prices, the balance sheet of the contract can be arbitraged (especially by flash-loans) to swap an undesirable asset (i.e. USDC which at the time of submission was valued at
0.99994853
USD) for a more desirable asset (i.e. USDT which at the time of submission was valued at1.00000000
USD) acquiring an arbitrage in the price by selling the traded asset.Proof of Concept
To illustrate the issue, simply view the exchange output you would get for swapping your USDC to USDT in a stablecoin pool (i.e. CurveFi) and then proceed to invoke
deposit
with your USDC asset and retrieve your incorrectly calculatedUSDT
equivalent viawithdraw
.The arbitrage can be observed by assessing the difference in the trade outputs and can be capitalized by selling our newly acquired
USDT
forUSDC
on the stablecoin pair we assessed earlier, ultimately ending up with a greater amount ofUSDC
than we started with. This type of attack can be extrapolated by utilizing a flash-loan rather than our personal funds.Tools Used
Manual review of the codebase, Chainlink oracle resources, Curve Finance pools.
Recommended Mitigation Steps
We advise the
StableVault
to utilize Chainlink oracles for evaluating the inflow of assets instead, ensuring that all inflows and outflows of stablecoins are fairly evaluated based on their "neutral" USD price rather than their subjective on-chain price or equality assumption.The text was updated successfully, but these errors were encountered: