#47351 [SC-Low] Funds get stuck in the bridge if attempted to be deposited into a restricted address
Submitted on Jun 12th 2025 at 22:29:48 UTC by @Kalogerone for IOP | Paradex
Report ID: #47351
Report Type: Smart Contract
Report severity: Low
Target: https://github.com/tradeparadex/audit-competition-may-2025/tree/main/paraclear
Impacts:
Permanent freezing of funds
Description
Brief/Intro
When depositing from the bridge to an operator, sub-operator or auxiliary account, the transaction will revert and funds will remain stuck in the L1 bridge.
Vulnerability Details
During bridge deposits, the registry gets called to check for restrictions:
fn _deposit_from_bridge(
ref self: ComponentState<TContractState>,
recipient: ContractAddress,
token_address: ContractAddress,
amount_u256: u256,
) {
let token_dispatcher = ERC20ABIDispatcher { contract_address: token_address };
let decimals = token_dispatcher.decimals();
// Sender is 0 (unknown) for bridge deposits
self._detect_transfer_restriction(Zero::zero(), recipient, token_address, amount_u256);
However, according to registry, transfers from others
going towards operators, sub-operators or auxiliary accounts is restricted and the transaction will revert:
// Restricted:
// 8. others -> operator
// 9. others -> auxiliary
// 10. others -> sub-operator
Impact Details
Any tokens deposited through the bridge to such accounts will not succeed and tokens will stay locked in L1 bridge.
References
https://github.com/tradeparadex/audit-competition-may-2025/blob/main/paraclear/src/paraclear/paraclear.cairo#L1248
Proof of Concept
Proof of Concept
User deposits to L1 bridge with destination an operator, sub-operator or auxiliary account
L2 bridge fails to complete the deposit
Funds are stuck in L1 bridge
Was this helpful?