# Two address tokens can be withdrawn by the admin even if they are vested

VTVLVesting's withdrawOtherToken only checks address inequality, so admin can drain vested sUSD via its second proxy address, breaking claims.

- Payout: Contest reward
- Severity: medium
- Program: VTVL
- Credited: CertoraInc
- Disclosed: 2022-11-01
- Write-up quality: 6/10
- Original: https://github.com/code-423n4/2022-09-vtvl-findings/issues/429
- Library page: https://bugbountylibrary.com/r/c4%3A2022-09-vtvl%3AM-08
- Tags: domain:web3 impact:funds-loss kind:contest platform:code4rena sev:medium tech:evm tech:solidity technique:source-review vuln:access-control vuln:business-logic

**Target:** VTVLVesting.sol withdrawOtherToken
**Root cause:** withdrawOtherToken only verifies _otherTokenAddress != tokenAddress, which fails for tokens with two addresses (e.g. Synthetix ProxyERC20 proxy and implementation), allowing withdrawal of the vesting token itself.
**Steps:**
1. Deploy VTVLVesting with sUSD proxy address `0x57Ab1ec28D129707052df4dF418D58a2D46d5f51`.
2. Create a linear vesting claim for Alice of 1000 sUSD; contract balance = 1000e18, numTokensReservedForVesting = 1000e18.
3. Admin calls `withdrawOtherToken` for 1000e18 sUSD passing the token's second address; address check passes.
4. Contract balance becomes 0 while numTokensReservedForVesting stays 1000e18.
5. Alice's withdraw reverts on safeTransfer due to insufficient balance.
**How found:** Researcher recognized that some ERC20s (Synthetix ProxyERC20) expose two addresses for the same token, making the single address-inequality check insufficient to protect the vesting token.
**Exploitation:** Admin (trusted but the invariant should hold) supplies the alternate address of a dual-address token to withdrawOtherToken, draining the vesting token balance and leaving reserved accounting intact so vesters cannot claim.
**Insight:** When a contract guards 'don't touch the vesting token' by comparing addresses, consider tokens with multiple addresses (proxy/implementation, Synthetix ProxyERC20) that defeat the equality check; prefer balance-delta assertions.
