The RAACNFT.sol contract does not check approval status before allowing transfers. This allows attackers to transfer NFTs without owner permission if they can call the contract directly.
Risk: Attackers can steal RAACNFTs, bypass collateralization requirements, and manipulate governance.
The transferFrom Function Lacks Approval Checks
What’s wrong?
No require(isApprovedOrOwner(msg.sender, tokenId)) check.
Any caller can force a transfer without being the owner or having approval.
This violates ERC-721 security principles.
2. Attack Scenario: Stealing RAACNFTs
Attacker calls transferFrom() from a contract they control.
The function doesn’t check ownership, so the NFT is transferred to the attacker.
If the NFT was being used as collateral in LendingPool.sol, the borrower is liquidated unfairly.
The attacker sells the stolen NFT on OpenSea or other marketplaces.
NFT Theft – Attackers can steal RAACNFTs from unsuspecting users.
Bypassing Lending Requirements – Users can move collateralized NFTs and avoid liquidation.
Manipulating Governance – If NFTs grant voting power, attackers can steal votes and control governance.
Manual Review – Identified missing approval checks.
Slither – Detected missing ERC721 security enforcement.
1. Enforce Approval Checks
2. Implement Reentrancy Guards on Transfers
3. Use OpenZeppelin’s Secure ERC721 Implementation
PoC Exploit Script
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.