# RADT-DAO: pair reserve manipulation via privileged wrap.withdraw

Attacker flash-loaned USDT, bought RADT, then used a privileged wrap.withdraw to dump RADT into the pair and sync, draining value via manipulated reserves.

- Payout: Real-world hack
- Severity: high
- Program: RADT-DAO
- Analysis by: DeFiHackLabs
- Disclosed: 2022-09-23
- Write-up quality: 6/10
- Original: https://github.com/SunWeb3Sec/DeFiHackLabs/blob/main/src/test/2022-09/RADT_exp.sol
- Library page: https://bugbountylibrary.com/r/dhl%3A20220923-radt
- Tags: area:web3 domain:web3 impact:funds-loss kind:incident platform:defihacklabs sev:high tech:evm tech:solidity vuln:access-control vuln:business-logic vuln:flash-loan

**Target:** BSC Uniswap V2 pair and wrap contract
**Root cause:** The wrap contract allowed an arbitrary caller to withdraw RADT from any address (including a large holder) to the pair, letting the attacker inflate pair reserves and call sync before selling into the manipulated price.
**Steps:**
1. Flash loan 200,000 USDT from DODO via `flashLoan(0, 200_000 * 1e18, address(this), new bytes(1))`.
2. Buy RADT with 1000 USDT through the router (`swapExactTokensForTokensSupportingFeeOnTransferTokens`).
3. Send 1 USDT to the RADT/USDT pair to enable sync.
4. Compute `amount = RADT.balanceOf(pair) * 100 / 9` and call `wrap.withdraw(address(0x68Dbf1c787e3f4C85bF3a0fd1D18418eFb1fb0BE), address(pair), amount)` to move RADT from the victim holder into the pair.
5. Call `pair.sync()` to update reserves with the inflated RADT balance.
6. Sell all RADT back to USDT via the router at the manipulated price.
7. Repay the 200,000 USDT flash loan to DODO.
**Exploitation:** Flash loan provides capital; attacker buys a small amount of RADT, then abuses wrap.withdraw to transfer a large RADT amount from a victim address directly into the pair, calls sync to lower the RADT price, and sells the acquired RADT for USDT profit, repaying the loan.
**Insight:** Look for token wrapper/withdraw functions that lack access control and can move tokens from arbitrary addresses; combined with a Uniswap V2 pair, an attacker can donate tokens to the pair and call sync to manipulate reserves for profit.

