# When Convex pool is shut down while collateral type is CurveLPStakedOnConvex, users unable to deposit that asset and protocol lose the ability to accept the asset as collateral further 

If a Convex pool backing a CurveLPStakedOnConvex collateral is shut down, Vault.depositERC20 always reverts, permanently bricking new deposits of that asset as collateral.

- Payout: Contest reward
- Severity: medium
- Program: Amphora Protocol
- Credited: 0xComfyCat
- Disclosed: 2024-04-22
- Write-up quality: 6/10
- Original: https://github.com/code-423n4/2023-07-amphora-findings/issues/90
- Library page: https://bugbountylibrary.com/r/c4%3A2023-07-amphora%3AM-03
- Tags: domain:web3 impact:dos kind:contest platform:code4rena sev:medium tech:evm tech:solidity technique:source-review vuln:business-logic vuln:dos

**Target:** VaultController / Vault depositERC20 with CurveLPStakedOnConvex collateral
**Root cause:** depositERC20 unconditionally calls Convex Booster.deposit for CurveLPStakedOnConvex collateral, and there is no admin path to downgrade the collateral type to Single or reset poolId when the pool/booster is shut down.
**Steps:**
1. Deal USDT_LP to bob and mint a vault via `_mintVault(bob)`.
2. Bob approves and calls `bobVault.depositERC20(USDT_LP_ADDRESS, 1 ether)` — succeeds while pool is live.
3. As Booster poolManager, call `IBoosterAdmin(BOOSTER).shutdownPool(1)`.
4. Bob approves again and calls `bobVault.depositERC20(USDT_LP_ADDRESS, 1 ether)`; it reverts with `'pool is closed'` from Convex Booster.deposit.
**How found:** Code reading of VaultController.registerErc20/Vault.depositERC20 showed the unconditional Booster.deposit call for CurveLPStakedOnConvex with no update path; confirmed via Foundry e2e test using Booster.shutdownPool.
**Exploitation:** Not an attacker-driven exploit: requires Convex to shut down the pool (or the Booster itself). Effect is denial of new collateral deposits for that asset; existing depositors risk liquidation since collateral is bricked for top-ups.
**Insight:** For any collateral adapter that calls an external staking contract on deposit, check whether the adapter has an admin escape hatch to downgrade to plain-token mode when the external pool/booster is paused or shut down; also check that isTokenStaked flags are reset on full withdrawal or liquidations will revert.
