# Malicious Bidder Can Disable Surplus & Recharge Auctions

Bidder sets payout puzzle hash to a list instead of 32-byte atom, making outbid and settle paths revert and permanently bricking surplus/recharge auctions.

- Payout: Contest reward
- Severity: critical
- Program: Circuit Puzzles
- Credited: yakuhito
- Disclosed: 2025-08-21
- Write-up quality: 7/10
- Original: https://cdn.cantina.xyz/reports/cantina_competition_circuit_puzzles.pdf#3.1.3
- Library page: https://bugbountylibrary.com/r/cantina%3Acircuit_puzzles%3A3.1.3
- Tags: domain:web3 impact:dos impact:integrity kind:contest platform:cantina sev:critical tech:solidity technique:source-review vuln:business-logic vuln:dos

**Target:** Chia CAT auction bid/settle puzzles (recharge & surplus auctions)
**Root cause:** target_puzzle_hash from LAST_BID is used unsanitized in CREATE_COIN and curry_hashes; a list value fails tree hashing/currying, so both outbid and settle spend paths revert.
**Steps:**
1. Submit initial bid as low as 1 mojo with target_puzzle_hash set to a list instead of a 32-byte atom
2. Any higher bid calls puzzle with last_target_puzzle_hash = malicious list, producing an unsatisfiable ASSERT_PUZZLE_ANNOUNCEMENT (CAT inner puzzle cannot CREATE_COIN with list puzzle hash)
3. After bid TTL, settle puzzle sends target_puzzle_hash list to CRT TAIL, which fails curry_hashes
4. Auction is permanently paused; repeat per auction
**How found:** Code review of recharge/surplus auction bid and settle puzzles; noticed target_puzzle_hash from LAST_BID is consumed without type/length validation and traced both spend paths to hashing failures.
**Exploitation:** Attacker places a single minimal (1 mojo) bid with a malformed list-valued target_puzzle_hash, permanently blocking both outbid and settle paths so the auction can never complete or restart.
**Insight:** In Chia puzzles, any field later fed to curry_hashes or CREATE_COIN must be validated as a 32-byte atom; attacker-controlled puzzle hashes stored in prior coin state are a DoS vector because malformed types break hashing on every downstream spend path.
