The protocol allows users to create Liquidity pools for token pairs e.g USDC/SOL by initializing a PDA account using the token mint addresses and a static prefix as seeds. An attacker can frontrun and create an account at the same PDA using the publicly known token mint addresses, causing the protocol’s pool creation instruction to fail due to an existing account, causing a collision.
Likelihood:
Token mint addresses are publicly available, allowing anyone to compute the PDA using the seeds [b"pool", token_mint_a.key(), token_mint_b.key()].
Attacker can create an account at the PDA using system_instruction::create_account before the protocol attempts to initialize the pool.
Impact:
Prevents the protocol from creating liquidity pools for token pairs, disrupting core functionality and user experience.
Attacker creates a PDA ahead of the protocol, using the create_account instruction so when the protocol attempts to initialize a pool for the same token pair it will not be successful.
Add a unique id to the PDA seeds to make them unpredictable to avoid duplicates.
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.