# EST Token: incorrect burn mechanism enables 150 WBNB theft

EST Token's flawed burn mechanism in BNBDeposit allowed an attacker to desync internal accounting and skim value via repeated Uniswap pair skims, netting 150.2 WBNB.

- Payout: Real-world hack
- Severity: high
- Program: EST Token
- Credited: DeFiHackLabs
- Disclosed: 2026-03-27
- Write-up quality: 7/10
- Original: https://github.com/SunWeb3Sec/DeFiHackLabs/blob/main/src/test/2026-03/EST_exp.sol
- Library page: https://bugbountylibrary.com/r/dhl%3A20260327-est
- Tags: domain:web3 impact:funds-loss kind:incident platform:defihacklabs sev:high tech:evm tech:solidity vuln:business-logic vuln:oracle-manipulation

**Target:** BEP-20 token contract and associated BNBDeposit staking contract on BSC
**Root cause:** The BNBDeposit contract's burn/accounting logic incorrectly handles token transfers, allowing an attacker to desynchronize its internal balance tracking by sending tokens directly and then repeatedly calling skim() on the Uniswap pair to inflate the deposit contract's balance.
**Steps:**
1. Flash loan 20,000 WBNB from Moolah.
2. Withdraw WBNB to BNB and repeatedly deposit maxDeposit() into BNBDeposit to build a large position.
3. Swap 400 WBNB for EST via PancakeRouter.
4. Transfer 1 EST directly to BNBDeposit to desync its internal state.
5. Swap remaining WBNB for EST.
6. Loop 100 times: transfer amount = pair EST balance * 10/95 to the Uniswap pair, then call pair.skim(BNBDeposit) to send excess tokens to the deposit contract.
7. Swap all EST back to WBNB and repay flash loan, keeping profit.
**How found:** Likely identified through code review of the BNBDeposit contract's burn/accounting logic and its interaction with Uniswap pair skim() function, noticing that direct token transfers could desync internal balances.
**Exploitation:** Attacker used a flash loan to acquire WBNB, deposited into BNBDeposit to establish a large balance, then manipulated the Uniswap pair's token balance via direct transfers and skim() calls to the deposit contract, inflating its EST balance. Finally swapped inflated EST for WBNB, extracting 150.2 WBNB profit.
**Insight:** When a staking contract uses a Uniswap pair for accounting, check if skim() can be abused to inflate balances by sending tokens directly to the pair and skimming to the contract, especially if the contract's burn logic doesn't account for such transfers.
