# Earn free DAI interest (inflation) through instant CDP+DSR in one tx

MakerDAO pot/jug drip rates unsynchronized let attackers open CDP, deposit DAI in pot, drip, exit, repay in one tx to earn riskless DSR interest.

- Payout: hidden
- Severity: high
- Program: BlockDev Sp. Z o.o
- Found by: lucash-dev
- Disclosed: 2019-08-12
- Write-up quality: 8/10
- Original: https://hackerone.com/reports/665798
- Library page: https://bugbountylibrary.com/r/h1%3A665798
- Tags: area:web3 domain:web3 impact:funds-loss impact:integrity kind:bounty platform:hackerone sev:high tech:evm tech:solidity technique:chained vuln:accounting-error vuln:business-logic

**Target:** MCD pot and jug contracts (vat.frob, pot.join/drip/exit)
**Root cause:** Stability fee (jug) and DSR (pot) accrue only on drip calls and are not synchronized, so DSR interest can be captured within a single transaction without holding DAI over time.
**Steps:**
1. Convert ETH/token to gem balance via `join` contract.
2. Create CDP urn via `vat.frob` to obtain max DAI from gem balance.
3. Deposit DAI into `pot` via `join` method.
4. Call `pot.drip` to update accumulated DSR rate.
5. Withdraw DAI from `pot` via `exit`, receiving deposit plus interest.
6. Repay CDP via `vat.frob` to recover gem balance.
7. Convert gem balance back to ETH/token.
**How found:** Observed that jug and pot accrue rates only on discrete drip calls and are not synchronized, hypothesizing that a deposit-then-drip-then-exit within one tx captures interest on DAI never held over time.
**Exploitation:** Attacker (or crowdsourced AntiVat contract) loops the CDP+DSR sequence each block; when pot.drip hasn't been called yet in that block, the deposit earns DSR interest paid in newly minted DAI, then repays the CDP, netting riskless profit at only gas cost.
**Escalation:** Crowdsourcing deposits from many ETH holders (or miner collusion via high fees) scales the attack to billions in collateral, inflating DAI supply and transferring value from legitimate DAI holders.
**Insight:** When two rate-accruing contracts (debt fee vs savings yield) update independently via drip, check whether a deposit can be made and withdrawn around a single drip call in one tx to capture yield without time exposure.

