# Unizen aggregator proxy: unverified call drains approved tokens

Unizen aggregator proxy made an unverified external call, letting an attacker pass a crafted payload that pulled ~2M USD of user-approved DMTR tokens via transferFrom.

- Payout: Real-world hack
- Severity: critical
- Program: UnizenIO
- Analysis by: DeFiHackLabs
- Disclosed: 2024-03-09
- Write-up quality: 6/10
- Original: https://github.com/SunWeb3Sec/DeFiHackLabs/blob/main/src/test/2024-03/UnizenIO_exp.sol
- Library page: https://bugbountylibrary.com/r/dhl%3A20240309-unizenio
- Tags: domain:web3 impact:funds-loss kind:incident platform:defihacklabs sev:critical tech:evm tech:solidity technique:source-review vuln:access-control vuln:business-logic

**Target:** Unizen Trade Aggregator Proxy (Ethereum mainnet)
**Root cause:** The aggregator proxy executed an unverified external call with attacker-controlled calldata, allowing arbitrary token transferFrom against users' existing approvals to the proxy.
**Steps:**
1. Fork mainnet at block 19,393,769.
2. Call `aggregator_proxy.call{value:1}(hex"1ef29a02...")` with crafted calldata encoding victim `0x7feAeE...`, token DMTR `0x51cB...`, and an embedded `transferFrom(victim, aggregator_proxy, 0x23128cfbd15ed72f6)` call.
3. Proxy forwards the inner call, executing transferFrom against the victim's approval.
4. Attacker receives/redirects the drained DMTR (~2M USD).
**How found:** Analysis (SlowMist/Phalcon/Ancilia) identified the aggregator proxy as an unverified contract that forwards arbitrary calldata; the attacker likely spotted that user approvals to the proxy could be abused via a crafted inner call.
**Exploitation:** Attacker sent a single crafted calldata blob to the Unizen aggregator proxy; the proxy's unverified external call executed an embedded ERC20 transferFrom pulling the victim's DMTR (previously approved to the proxy) to the attacker-controlled path.
**Insight:** Aggregator/router proxies that forward arbitrary calldata are dangerous when users hold standing token approvals to them: check whether the proxy validates the target/selector of the inner call, and whether a crafted payload can invoke transferFrom on any token the victim approved.
