Ultimate Set Dollar Rug Pull

Reported loss Not disclosed
Ethereum
Rugpull

What happened

Ultimate Set Dollar (ULD, contract 0x0473033c…22de3b) lets any account holding the minter role call mint with no cap, and any minter can add further minters with addMinter. De.Fi's REKT database lists the token's minter as an upgradable proxy contract used as a MasterChef-style contract at 0x61ee8806…ad933d, and says an unverified contract at 0x4d01e888…cd7d76 called rebase() on it 12 times, which minted ULD directly to that contract, which then sold it. The deployer added initial liquidity (200 ULD and 200 USDC to the ULD-USDC Uniswap V2 pool) at Tx 0x7695…5e81 on 2020-12-31.

A transaction from the deployer calling advance() on the proxy, Tx 1 0xa02b…dd87, minted 132 ULD from the null address. On 2021-01-02 a wallet called sell() on the unverified contract and swapped 900 ULD through Uniswap V2, Tx 2 0xd138…4b63. No total loss figure is stated.

How it happened

  1. The token inherits MinterRole, whose mint is guarded only by onlyMinter: function mint(address account, uint256 amount) public onlyMinter returns (bool) { _mint(account, amount); return true; }. There is no cap on the amount.
  2. addMinter(address account) public onlyMinter lets any existing minter grant the role to another address. Which addresses hold the role is contract state, not shown in the source.
  3. De.Fi's REKT database lists the minter as an upgradable proxy used as a MasterChef-style contract at 0x61ee8806…ad933d.
  4. The deployer seeded the ULD-USDC pool with 200 ULD and 200 USDC in tx 0x76950cb7…635e81 (2020-12-31 19:45:41 UTC, per Etherscan).
  5. In tx 0xa02b66f1…a3dd87 (2020-12-31 19:08:09 UTC, per Etherscan) the deployer called advance() on the proxy and 132 ULD were minted from the null address: 100 to the deployer, 12.8 and 19.2 to two other addresses.
  6. De.Fi's REKT database lists the unverified contract 0x4d01e888…cd7d76 as calling rebase() 12 times, minting ULD directly to itself, and then selling.
  7. On 2021-01-02 at 21:51:57 UTC, per Etherscan, a wallet called sell() on that contract in tx 0xd1388359…cb4b63, routing 900 ULD through the Uniswap V2 ULD-USDC pool for about 0.2167 WETH.

Protocol details

Classification Stablecoin
Protocol Type Exit Scam/Rugpull
Affected asset / contract ULD
Protocol links Website @ULDfinance

Build your security review skills

Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.