SUIDEX is committed to security-first DeFi. We welcome the security research community to help us build the safest trading experience on Sui. Rewards up to $10,000 USDC will be distributed based on severity and impact of findings.
Target | Type | Severity | Reward |
---|---|---|---|
https://gitlab.com/test-sm/suidex_contract/-/tree/6b46c2da485e33e212b0320d311b73b46b542d9f Copy | Smart Contract | Critical | Bounty |
fixed_point_math.move
• Direct theft of any user funds (at-rest or in-motion) across any liquidity pair or supported Coin<T>
type
• Permanent freezing of user funds in pools, lockers, or farming contracts
• Insolvency conditions where the protocol cannot fulfill user withdrawals
• Theft or loss of claimable Victory rewards
• Manipulation of the fee structure to redirect developer or LP rewards
• Smart contract unable to operate due to lack of funds or broken state logic
• Circumvention of access control modifiers (e.g., only_owner
, only_admin
, only_authority
)
• Temporary freezing or locking of funds in liquidity and farm
• Failure of reward distribution logic in Farms, VictoryLocker, or Router modules
• Replay or reentrancy issues across trade, claim, and withdrawal flows
• Price manipulation exploits impacting value returned from swaps, zaps, or LP removals
• Gas griefing (e.g., unnecessary state growth, vec bloat, or overflow risks in per-user data)
• Pool inflation or abuse of add_liquidity
, or claim_and_lock
functions
• Incorrect share calculations in LP tokens, staked positions, or reward weights • LP or staking position dilution under certain liquidity migration edge cases • Misuse of clock, timestamp, or outdated reference values in emissions or locking schedules • Math or logic errors in APR boost, reward decay, or locking mechanics
• Unbounded gas usage (especially in claim_all and compound) • Missing checks that could result in unintended locking, burning, or reward denial • Logic bypass via invalid types, zero address abuse, or unchecked external calls • Architectural flaws, misnamed fields, or unsafe default behaviors
These are explicitly excluded from reward eligibility under this audit competition: • Incorrect data supplied by third-party oracles (price or TWAP manipulation via upstream feeds) • Flash loan exploits that require unrealistic market conditions • Basic economic governance attacks (e.g., 51% vote control outside protocol logic) • Lack of protocol liquidity or low TVL-related UX failure • Sybil attacks • Centralization risk
The following activities are prohibited by this contest event:
We use Discord as official communication channel: https://discord.gg/XMCGNkGmBD Join the channel, and create #support ticket to be added for conversation.
We are happy to thank everyone who submits valid reports which help us improve the security. However, only those that meet the following eligibility requirements may receive a monetary reward:
All submitted findings must follow the structure below to ensure clarity and consistency in the triage and evaluation process:
All submitted findings must follow the structure below to ensure clarity and consistency in the triage and evaluation process:
A. Complete Attack Test Case
#[test]
fun test_vulnerability_poc() {
// Setup test environment
let mut scenario = test_scenario::begin(@attacker);
let ctx = test_scenario::ctx(&mut scenario);
// 1. Initialize contracts
let (factory, pair, farm, etc.) = setup_test_environment(&mut scenario);
// 2. Setup vulnerable state
// Add initial liquidity, create pools, etc.
// 3. Execute attack
let before_balance = get_attacker_balance();
execute_exploit(&mut pair, attack_params);
let after_balance = get_attacker_balance();
// 4. Verify exploitation
assert!(after_balance > before_balance + expected_profit);
assert!(protocol_is_damaged());
test_scenario::end(scenario);
}
#[test]
fun test_vulnerability_fix() {
// Same setup as POC
let mut scenario = test_scenario::begin(@attacker);
// Apply the proposed fix
// Then run same attack - should fail
let result = execute_exploit(&mut fixed_pair, attack_params);
// Verify attack fails with fixed code
assert!(result.is_err()); // Attack should be prevented
test_scenario::end(scenario);
}
B. Step-by-Step Attack Instructions
# 1. Setup test environment
sui move test --filter vulnerability_poc
# 2. Analyze logs before fix
echo "Pre-fix attack results:"
sui move test --filter vulnerability_poc -v 2>&1 | grep "Balance\|Profit\|Exploit"
# 3. Apply fix and re-test
# [Include exact code changes needed]
# 4. Verify fix effectiveness
sui move test --filter vulnerability_fix -v
# 5. Log analysis commands
echo "Analyzing transaction logs:"
sui move test -v 2>&1 | grep -E "(ERROR|SUCCESS|BALANCE_CHANGE)"
C. Mathematical Proof (if applicable)
Initial State:
- Pool reserves: R0 = 1000, R1 = 1000
- K = R0 * R1 = 1,000,000
Attack Execution:
- Input: X tokens
- Expected output (honest): Y tokens
- Actual output (exploit): Y + ε tokens
Proof of Profit:
- Attacker profit: ε = [mathematical formula]
- Protocol loss: [formula showing fund drainage]
- Why attack succeeds: [mathematical explanation]