The mint function currently does not verify whether the caller is the legitimate owner of the underlying real estate asset.
This means that an attacker can front-run the minting of an NFT as soon as the price is set. The result allows an unauthorized user to minting themselves NFTs that represent real world assets they do not own.
The real world owner of the NFT does not have possession of it, instead the attacker does.
The crux of the issue lies in the minting function’s failure to confirm that the caller is indeed the rightful owner of the real-world asset corresponding to _tokenId. The logic only checks two things:
Price Existence – Whether a non-zero price exists for the asset.
Sufficient Payment – Whether the caller is providing enough funds to match (or exceed) that price.
No step in the function confirms or even references who the legitimate owner of the underlying asset is. As a result, anyone with enough funds can mint the NFT, even if they have no real-world claim to the asset.
Paste the describe block into LendingPool.test.js and run with:
Unauthorized Asset Representation: If an attacker or arbitrary user meets the price requirement, they can mint the NFT and thus appear on-chain as the “owner” of that real-world asset—despite having no legitimate rights to it.
Legitimate Owner Locked Out: Once the NFT is minted by someone else, the true asset owner cannot mint or hold the NFT that corresponds to their own property. This breaks the intended link between on-chain token ownership and real-world property rights.
Misrepresentation and Fraud: Discrepancies between real-world and on-chain records would allow the attacker to sell or leverage the NFT without ever having legal ownership in the physical world. Specifically by borrowing against it on RAAC.
Inconsistent Data: The entire premise of tokenizing real-world assets relies on a trustworthy alignment between off-chain and on-chain ownership. Omitting ownership checks undermines the foundation of this system.
Manual review, Hardhat
Incorporate an ownership verification mechanism—either via a mapping or an external registry—to ensure that only the legitimate owner of the asset can initiate the minting process. This check should be performed at the beginning of mint() to prevent unauthorized minting attempts.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.