Welcome to the Move Vulnerability Database (MVD) v2.0!

A comprehensive collection of vulnerability patterns in the Move ecosystem.

What's Inside


This resource consolidates 500+ security vulnerabilities extracted from 150+ public Move audit reports across multiple firms and auditors. The database categorizes vulnerabilities into common patterns—from Input Validation and Business Logic flaws to Access Control and State Management issues—providing a central reference for developers, auditors, and security researchers to understand, recognize, and learn from real-world mistakes in Move codebases.

Vulnerability PatternsFindings
Business Logic137
Calculation Errors87
Input Validation59
Access Control41
State Management37
Denial of Service27
Oracle Issues19
Data Inconsistency17
Missing Functions17
Centralization Risk16
Gas-related Issues11
Runtime/Development Issues10
Constant Definition7
Looping Issues6
Front-running5
Cross-Implementation2
Missing Version Check2
Inflation Attacks1
Total501

Data sourced from public Move audit reports by the following auditors/firms:

Refer to the Appendix for the full list of reports and protocols.

⚠️ Disclaimer

All findings and summaries in this database are sourced from publicly available audit reports.

I do not own or claim ownership of any reports, documents, or content referenced here — all rights belong to their respective auditors, firms, and project teams.

This repository is an independent, educational, and non-commercial project created to help the community study and understand common vulnerability patterns in the Move ecosystem.

While I aim for accuracy, there may be typos, errors, broken links, or misattributed information.

If you spot any mistakes or missing details, please open an issue or reach out so I can correct them.

💬 Support & Contributions

If you'd like to learn more about the project or support future development, see the About section.

About the Move Vulnerability Database

The Move Vulnerability Database (MVD), maintained by Maverick Security Research, was created to support the growing field of Move security. The MVD aims to:

  • Help developers identify and understand common coding mistakes.
  • Provide security researchers, auditors, and bug hunters with patterns and examples to locate vulnerabilities in Move codebases.

The database consolidates findings from public audits, creating a central resource for the Move ecosystem to learn from real-world vulnerabilities.

💬 Support & Contributions

If you’ve found this database useful, consider supporting its continued development. Contributions help fund:

  • Ongoing curation of Move ecosystem vulnerability data
  • Updates to audit mappings
  • Expansion into cross-chain vulnerability pattern analysis

Donation Addresses:

  • Sui: 0xda0a78ad38da929d16676c7d64fe195cc4becd2985b68bdda7ab991187085614
  • Ethereum: 0x5F672E842C15C7A9be40B93c9Eb4F78caE389cd1

Your support directly helps maintain and improve open-source security knowledge for the Web3 community.

Thank you,

— MoveMaverick

Vulnerability Patterns Overview

The table below presents the total number of findings for each vulnerability pattern across all analyzed contracts.

Vulnerability PatternsFindings
Business Logic137
Calculation Errors87
Input Validation59
Access Control41
State Management37
Denial of Service27
Oracle Issues19
Data Inconsistency17
Missing Functions17
Centralization Risk16
Gas-related Issues11
Runtime/Development Issues10
Constant Definition7
Looping Issues6
Front-running5
Cross-Implementation2
Missing Version Check2
Inflation Attacks1
Total501

As we can see, business logic vulnerabilities account for more than 25% of the database findings. Calculation errors were the second most common issue, followed by input validation.

Next, let's examine the vulnerability patterns in detail, broken down by severity.

Vulnerability PatternsRWECHMTotal
Business Logic175070137
Calculation Errors10255287
Input Validation14232259
Access Control12181141
State Management7131737
Denial of Service122427
Oracle Issues1341119
Data Inconsistency29617
Missing Functions131317
Centralization Risk8816
Gas-related Issues1111
Runtime/Development Issues1010
Constant Definition2147
Looping Issues1236
Front-running325
Cross-Implementation22
Missing Version Check22
Inflation Attacks11
Total170163267501

Based on Criticals and Highs: Business Logic, Input Validation, Calculation Errors, Access Control, and State Management are the top 5 vulnerability classes.

Based on Mediums: Business Logic, Calculation Errors, and Denial of Service are the top 3 most commonly found vulnerability patterns.

💡 Note

The Move Vulnerability Database provides a comprehensive overview of vulnerabilities observed across audited Move protocols and serves as a guide to understanding risk concentration. Readers are encouraged to use the data to draw their own conclusions, identify trends, and consider protocol context, design, and specific use cases when assessing potential vulnerabilities.

Access Control — Overview

Missing or flawed authorization checks allow unauthorized users to perform restricted actions.

Access ControlFindings
Critical12
High18
Medium11
Total41

Critical Findings


Lack of Access Control

Severity: Critical

Ecosystem: Sui

Protocol: Aftermath Market Making

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Jan 2025

Description:

Critical access control flaw where a sensitive function is improperly exposed. Since it is not restricted to package-level visibility, an attacker can directly modify trade data and balances, potentially disrupting core protocol operations.


Preventing Minting via Front-Running Payload

Severity: Critical

Ecosystem: Sui

Protocol: Lombard Finance

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description:

The minting function is publicly accessible, allowing an attacker to front-run other users’ transactions. This enables malicious actors to manipulate minting order and potentially capture unfair rewards.


Access Control in common_config.move

Severity: Critical

Ecosystem: Unknown

Protocol: Project Z

Auditor: MoveJay

Report: https://github.com/Jayfromthe13th/Project-Z-Security-Audit-Report/blob/Wallet/audit.md

Report Date: 2024

Description:

The resource_signer function in common_config.move is crucial for generating, saving, and retrieving resource accounts, which are used for token storage in other modules. This function's unrestricted access poses a significant security risk.


Missing AC Check

Severity: Critical

Ecosystem: Binance Smart Chain

Protocol: AquaSwap

Auditor: MoveJay

Report: https://github.com/Jayfromthe13th/AuquaSwap-Audit-/blob/Wallet/Audit%20report.md

Report Date: 2024

Description:

The revoke_trade function does not make any assertion that the signer is the owner of the trade before being able to cancel the trade and transfer assets to the caller.


create_pool Function Is Lack Of Permission Checking

Severity: Critical

Ecosystem: Sui

Protocol: Dola

Auditor: MoveBit

Report: https://movebit.xyz/reports/Dola-Protocol-Final-Audit-Report.pdf

Report Date: Feb 2024

Description:

The lack of permission checks on the create_pool function allows anyone to call the function to create a pool, which is inconsistent with the design of the protocol. At the same time, convert_pool_to_dola converts the pool's CoinType to dola_address, which can allow users to create the same pool at will, which can result in a fake deposit or withdraw message being delivered by the bridge.


Missing Permission Validation

Severity: Critical

Ecosystem: Sui

Protocol: Navi

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Navi-Smart-Contract-Audit-Report.pdf

Report Date: July 2023

Description:

The withdraw function lacks access control, allowing anyone to withdraw any amount from any address.


Function Visibility Error

Severity: Critical

Ecosystem: Sui

Protocol: Navi

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Navi-Smart-Contract-Audit-Report.pdf

Report Date: July 2023

Description:

The increase_supply_function and borrow_reserve_mul functions are public, allowing unauthorized users to modify storage data and manipulate return values, potentially breaking contract functionality.


Missing Test Comments

Severity: Critical

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

Test code is not properly restricted with #[test_only], allowing anyone to run these functions and gain admin privileges.


Missing MeterCapability Check

Severity: Critical

Ecosystem: Aptos

Protocol: Argo

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

The MeterCap type is not unique in the add_meter_cap_usage and sub_meter_cap_usage functions. Anybody is able to create a GlobalMeter and claim the corresponding MeterCap. Note that MeterCap’s id would overlap with an existing id on the namespace, allowing a malicious user to essentially forge a MeterCap.


Broken Liquidation Access Control

Severity: Critical

Ecosystem: Aptos

Protocol: Argo

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

Access control between argo_liquidate and argo_engine is enforced through the use of a LiquidateFeature capability. Unfortunately, this capability access control requirement is not enforced on liquidate_repay.


Critical Access Control Check

Severity: Critical

Ecosystem: Aptos

Protocol: Eternal Finance

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Jan 2023

Description:

In common_config.move, the resource_signer function is utilized to obtain the signer from the signer capability that is stored in the resource based on the provided seed. This function is employed by other modules to generate, save, and retrieve resource accounts. Since the created resource account is used to store tokens in other modules, it is crucial that only the protocol modules can access this function.


set_interest_updated Will Set Arbitrary Timestamp

Severity: Critical

Ecosystem: Sui

Protocol: Superposition

Auditor: MoveBit

Report: https://movebit.xyz/reports/Superposition-Final-Audit-Report.pdf

Report Date: Mar 2024

Description:

set_interest_updated is a public function that can be called by anyone to set the broker.interest_updated_at to any timestamp they want.

High Findings


Permissionless Order Fulfillment Before Penalty Period

Severity: High

Ecosystem: Sui

Protocol: Mayan Sui

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date:

Description:

The order fulfillment function lacks proper access control. The ownership check assert!(msg_driver == ctx.sender(), EInvalidDriver) is enforced only during the penalty period, allowing unauthorized users to fulfill orders outside this window.


Missing Owner Check

Severity: High

Ecosystem: Sui

Protocol: Aftermath Orderbook

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date:

Description:

Within account, create_stop_order_ticket generates a StopOrderTicket and transfers it to a specified recipient. During the creation process, it designates the user_address field of the ticket to tx_context::sender(ctx), reflecting the address of the initiating caller. Consequently, it transfers the ticket to a recipient without validating if the caller (tx_context::sender(ctx)) is the legitimate owner of the account_id within encrypted_details.


suifren_update_last_epoch_mixed allows users to bypass checks during the mix

Severity: High

Ecosystem: Sui

Protocol: Mysten Labs Sui

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date:

Description:

Since the function is public, users may set an arbitrary value for last_epoch_mixed and bypass the checks in capy_labs::mix.


Lack of UpgradeCap id checking

Severity: High

Ecosystem: Sui

Protocol: Dola

Auditor: MoveBit

Report: https://movebit.xyz/reports/Dola-Protocol-Final-Audit-Report.pdf

Report Date: Feb 2024

Description:

The activate_governance function does not do a check on the source and type of the upgrade_cap, resulting in the user being able to pass in any module's UpgradeCap object to activate the governance.


create_proposal Has No Permission control

Severity: High

Ecosystem: Sui

Protocol: Dola

Auditor: MoveBit

Report: https://movebit.xyz/reports/Dola-Protocol-Final-Audit-Report.pdf

Report Date: Feb 2024

Description:

Any user being able to create a proposal and vote for their own proposal, and being able to get GovernanceCap after a successful call to vote_proposal, resulting in a malicious user being able to gain access to the protocol.


Variable Return Value in Public Function

Severity: High

Ecosystem: Sui

Protocol: Cetus Farming

Auditor: MoveBit

Report: https://movebit.xyz/reports/Cetus-Farming-Smart-Contract-Final-Audit-Report.pdf

Report Date: Jan 2024

Description:

The function borrow_mut_pool_share returns a mutable reference to a value, which refers to the key pool in manager.pool_shares. Consequently, the value corresponding to this key- pool_share , can be modified by anyone, leading to errors in the contract when calculating accumulate_pool_reward . And the function borrow_mut_clmm_position has the same issue.


Missing Permission Verification

Severity: High

Ecosystem: Sui

Protocol: Talofa Corporation

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Talofa-Corporation-Smart-Contract-Audit-Report.pdf

Report Date: May 2023

Description:

These functions do not check caller permissions, and the Gear owner can change the parameter configuration of Gear and Skill.


threshold can’t be modified

Severity: High

Ecosystem: Sui

Protocol: Legend of Arcadia

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Legend-of-Arcadia-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description:

The value of threshold is set to 1 every time it is initialized, and there is no interface to modify the value of threshold, resulting in one person can control the entire MultiSignature, and anyone has the highest authority.


Incorrect Function Visibility

Severity: High

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

The add_investor and close functions are public, allowing anyone to modify the whitelist or close the campaign.


Incorrect Function Visibility

Severity: High

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

update_last_distribution_timestamp is public, allowing stakers to manipulate the timestamp and cause staker to not send penalties to receiver.


Security Level Constraint Can Be Circumvented

Severity: High

Ecosystem: Sui

Protocol: BucketV2

Auditor: Quantstamp

Report: https://certificate.quantstamp.com/full/bucket-protocol-v-2/abd312d6-1a5e-45c5-963b-a6856daf6621/index.html

Report Date: Aug 2025

Description:

The update_position() function throws an error depending on the user's operation and the vault's security level. It is intended that if the user wants to deposit collateral, the user is allowed if the security level is 0 or 2; if the user wants to withdraw collateral, repay a debt, or borrow, the security level must be 0. However, it is possible to withdraw collateral, repay a debt, or borrow even if the security level is 2: the user simply needs to include a deposit amount with their call of update_position(). This way, the security level access control is circumvented.


The Distinction is Lacking When Setting Admin And treasury_address

Severity: High

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

Lacking differentiation between role types can result in a situation where the recipient of treasury_address calling the function claim_admin_previliges() can make themselves the admin, and vice versa. This role confusion might lead to significant losses in the contract.


Lack of Access Control

Severity: High

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

The cancel_admin_previliges and cancel_treasury_previliges functions lack any form of access control. This implies that anyone can directly cancel any pending privileges.


Permission Conflict

Severity: High

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

The presence of multiple simultaneous pending admin and treasury privileges can result in permission conflicts. For instance, if two pending admin privileges coexist, both have the ability to invoke the claim_admin_previliges function to acquire permissions. This scenario can lead to the loss of permissions for another admin, causing a conflict in permissions.


The Admin is Unable to Update the Liquidity Fee and Treasury Fee

Severity: High

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

The swap_v2.set_dex_liquidity_fee() function is marked as public(friend), indicating that it is accessible to modules declared as "friends" of the current module.

However, in the protocol, only baptswap_v2::router_v2 is declared as a friend.

The issue arises because the router_v2 contract does not invoke the set_dex_liquidity_fee() method, preventing the protocol from updating the liquidity fee. The function ser_dex_treasury_fee() set_individual_token_team_fee() and set_individual_token_liquidity_fee() also face a similar issue.


Single-step Ownership Transfer Can be Dangerous

Severity: High

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

Single-step ownership transfer means that if a wrong address was passed when transferring ownership or admin rights it can mean that role is lost forever. If the admin permissions are given to the wrong address within this function, it will cause irreparable damage to the contract.


Set Functions Lack of Access Control

Severity: High

Ecosystem: Aptos

Protocol: Superposition

Auditor: MoveBit

Report: https://movebit.xyz/reports/Superposition-Final-Audit-Report.pdf

Report Date: Mar 2024

Description:

The set_tenant_pause and set_tenant_liquidation_fee_address functions have no access controls, allowing anyone to set arbitrary numbers, take the profits of interest rates, etc.


Anyone can reset initial price of pool

Severity: High

Ecosystem: Aptos

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Aptos-Audit-Report.pdf

Report Date: Jan 2023

Description:

reset_init_price is a public function.


Medium Findings


Rewarder Emissions On Pool Assets Drain LP Liquidity

Severity: Medium

Ecosystem: Supra Network

Protocol: DexLyn Smart Contract

Auditor: HackenProof Contest SRs

Report: https://hackenproof.com/reports/DEXLYNCA-102

Report Date: Oct 2025

Description:

A malicious rewarder authority can therefore emit rewards denominated in the pool asset and claim them, directly draining LP capital while accounting invariants mask the shortfall.


Lack of Whitelist Control in Flash Loans

Severity: Medium

Ecosystem: Sui

Protocol: Scallop

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Scallop-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description:

borrow_flash_loan function missing whitelist control, any borrower can initiate flash loan.


Missing Permission Verification in fund function

Severity: Medium

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

Anyone can call the fund function and fund campaign.


Wrong event access permission

Severity: Medium

Ecosystem: Sui

Protocol: Sui AMM Swap

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Sui-AMM-swap-Contracts-Audit-Report.pdf

Report Date: Nov 2022

Description:

Emit functions are public and can be called by anyone, could pretend to successfully call add_liquidity/remove_liquidity/swap and may cause logic errors in the other code.


Direct Invocation Risk in unstake_tokens() and claim_rewards() Functions in stake Module

Severity: Medium

Severity: High

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

It's advisable for this function to also use a friend function to control its invocation.


Initialize Function Lacks Privilege Control

Severity: Medium

Ecosystem: Aptos

Protocol: MoveGPT

Auditor: MoveBit

Report: https://movebit.xyz/reports/MoveGPT-Final-Audit-Report.pdf

Report Date: Apr 2024

Description:

The initialize function can be called by any user and passed any parameter.


Bad validation condition for function caller

Severity: Medium

Ecosystem: Aptos

Protocol: Aries Market

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Aries-Smart-Contract-Audit-Report.pdf

Report Date: June 2023

Description:

controller::add_reserve currently asserts the caller must be the @aries address, preventing calls from other addresses set in controller::init. Replace with assert_is_admin(signer::address_of(account)) for proper admin verification.


Function visibility issue

Severity: Medium

Ecosystem: Aptos

Protocol: Transit Finance

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Transit-Finance-Audit-Report.pdf

Report Date: Nov 2022

Description:

emit_event_swap in aggregator module, is public and anyone can call it.


Deploy contract without multi-sig

Severity: Medium

Ecosystem: Aptos

Protocol: Transit Finance

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Transit-Finance-Audit-Report.pdf

Report Date: Nov 2022

Description:

Doesn't use a multi-sig contract for deployment.


Deploy contract without multi-sig

Severity: Medium

Ecosystem: Aptos

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Aptos-Audit-Report.pdf

Report Date: Jan 2023

Description:

Doesn't use a multi-sig contract for deployment.


Lack of AC in Metadata Setters

Severity: Medium

Ecosystem: Sui

Protocol: Recrd

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Apr 2024

Description:

This allows anyone to invoke these setter functions to modify the metadata fields, resulting in unauthorized changes.

Business Logic - Overview

Errors in core logic or assumptions that let users exploit intended protocol behavior.

Business LogicFindings
Critical17
High50
Medium70
Total137

Critical Findings


Missing Activation Epoch Check in Join

Severity: Critical

Ecosystem: Sui

Protocol: Walrus

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description: StakedWal in the withdrawal state only checks the withdraw_epoch, while the activation epoch check is missing. This oversight causes reward calculation issues and potential exploitation of the reward distribution mechanism.


New Users Can Get Rewarded Immediately

Severity: Critical

Ecosystem: Sui

Protocol: Dola

Auditor: MoveBit

Report: https://movebit.xyz/reports/Dola-Protocol-Final-Audit-Report.pdf

Report Date: Feb 2024

Description: The update_user_reward function calculates the delta_index between the user's last_update_reward_index and the reward_index in the pool. For new users, index_rewards_paid defaults to 0, allowing them to claim rewards from the entire reward_index range immediately, causing protocol reward losses.


Stealing of liquidity rewards in stability_pool

Severity: Critical

Ecosystem: Aptos

Protocol: Thala Labs Aptos Dollar

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Thala%20Labs%20Move%20Dollar%20-%20Zellic%20Audit%20Report.pdf

Report Date: Oct 2022

Description:

There is nothing to enforce that depositors of APD who are compensated from profitable liquidatable events actually deposited APD prior to the profitable liquidation event and hence exposure to loss. The protocol now requires providers to hold funds for 24 hours or incur a linear fee.


Riskless liquidation rewards in stability_pool

Severity: Critical

Ecosystem: Aptos

Protocol: Thala Labs Aptos Dollar

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Thala%20Labs%20Move%20Dollar%20-%20Zellic%20Audit%20Report.pdf

Report Date: Oct 2022

Description:

Because there is no timelock, attacker can liquidate themselves when it optimizes profit of the stability pool.


Redemption mechanism allows uncollateralized vaults to escape liquidation penalization

Severity: Critical

Ecosystem: Aptos

Protocol: Thala Labs Aptos Dollar

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Thala%20Labs%20Move%20Dollar%20-%20Zellic%20Audit%20Report.pdf

Report Date: Oct 2022

Description:

Within vault::redeem_collateral, in the event that collateral_usd < debt_usd and collateral_usd < remained_debt_coin prior to the call to repay_interal, and a remained_debt_coin > 0 after the call to repay_internal, the full collateral of the vault will be removed and an amount of debt equal to the collateral amount will be paid. However, the vault will hold a debt equal to debt_usd - collateral_usd.


Adversarial Order Eviction

Severity: Critical

Ecosystem: Aptos

Protocol: Econia

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Econia%20-%20Zellic%20Audit%20Report.pdf

Report Date: Jan 2023

Description:

An attacker can cause legitimate orders to be evicted from the structure, effectively cancelling them. The protocol does not take a fee when a user places a trade, and orders can be cancelled within the same transaction.


The Constant Product Rule is Compromised, Enabling Pool Draining

Severity: Critical

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

If a hacker exploits this mechanism using flash loans to repeatedly swap X for Y, the continuous reduction in k breaks the x * y = k formula. When the quantity of token Y in the pool becomes extremely low, indicating a significantly high value for token Y, a hacker can exploit this situation. With a minimal amount of token Y, the hacker can efficiently exchange for a substantial portion of token X from the pool.


update Function Will Reset The Broker

Severity: Critical

Ecosystem: Aptos

Protocol: Superposition

Auditor: MoveBit

Report: https://movebit.xyz/reports/Superposition-Final-Audit-Report.pdf

Report Date: Mar 2024

Description:

In the broker.move , update function may be used to update some parameters of a broker. But currently, the update function will reset everything to 0, which destroys the broker. If any user deposits to this broker, then they will lose all their fund.


Improper Enqueue Implementation in Queue

Severity: Critical

Ecosystem: Aptos

Protocol: Laminar Markets

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

In the queue::enqueue function, there is an issue when inserting a new node. Attempting this after removing nodes will cause a new node to be created, but referenced incorrectly.


Tail Not Updating on Node Removal

Severity: Critical

Ecosystem: Aptos

Protocol: Laminar Markets

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

In the queue::remove function, the tail node is never updated. This means that whenever a lone root node or a tail node is removed, any subsequent procedures involving the tail node will be incorrect because the tail is not getting updated by this function.


Improper Splay Tree Node Removal

Severity: Critical

Ecosystem: Aptos

Protocol: Laminar Markets

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

In the splay_tree::remove_node function, there is an issue while removing the root node of the tree, having a right child to the min node of right sub-tree. This scenario leads to the de-referencing of the right child. This is because the left of its parent is set to sentinel without considering the right child of the min node in the right sub-tree This causes the child to lose its reference. Users could lose funds if their orders become inaccessible.


Improper Accumulator Updates

Severity: Critical

Ecosystem: Aptos

Protocol: Thala Labs

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2023

Description:

stake and unstake update parameters for thl coin rewards, which are also affected by the stake_amount. As a result, altering the stake amount may cause incorrect calculations of extra rewards.This vulnerability may be exploited by a malicious user who takes out a flash loan to significantly increase their stake_amount, enabling them to collect rewards for the newly added stake. stakeandunstakeshouldfirst update the accumulatorfor extra rewards usingclaim_extra_reward before modifying the stake amount. This can be achieved by creating a vector to store the names of all extra reward coins and using them in the claim function.


Improper Accumulator Updates

Severity: Critical

Ecosystem: Aptos

Protocol: Thala

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description:

stake and unstake update parameters for thl coin rewards, which are also affected by the stake_amount. As a result, altering the stake amount may cause incorrect calculations of extra rewards. A malicious user may exploit this vulnerability and take out a flash loan to increase their stake_amount, enabling them to collect rewards for the newly added stake.


Logic Flaw in Time Check

Severity: Critical

Ecosystem: Aptos

Protocol: Aptos Labs Securitize

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

is_block_flowback_end_time_ok is checking the condition incorrectly. If block_flowback_end_time is zero, the first condition ( block_flowback_end_time != 0 ) evaluates to false, and the function will never abort, as the second condition ( timestamp < block_flowback_end_time ) will also evaluate to false because timestamp::now_seconds will always be greater than or equal to zero.


Incorrect Issuance Value Recording

Severity: Critical

Ecosystem: Aptos

Protocol: Aptos Labs Securitize

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

compliance_service::create_issuance_information explicitly sets value to zero rather than utilizing the _value parameter, which implies that all recorded issuances will have a value of zero instead of the actual issuance amount. Because every issuance is recorded with a value of zero, the issuance information stored in issuances_values will not accurately represent the actual amounts.


Incorrect Lock Removal Logic

Severity: Critical

Ecosystem: Aptos

Protocol: Aptos Labs Securitize

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

remove_lock_record_for_investor in lock_manager is intended to swap the lock record at lock_index with the last lock in the investor’s lock list, then reduce the count of locks by one. However, the implementation incorrectly overwrites the lock at lock_index with itself, which implies that the last lock is removed instead of the one at lock_index .


Bypassing Funds Repayment via Double Upscaling

Severity: Critical

Ecosystem: Aptos

Protocol: Thala Swap + Math V2

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Jan 2025

Description:

The vulnerability arises from double upscaling during the repayment process in pay_flashloan when handling meta-stable pools. Specifically, pay_flashloan upscales balance_after_flashloan twice. When handling meta-stable pools the funds are multiplied by their value derived from an oracle. As a result the post-repayment invariant computation utilizes an incorrectly scaled value.


High Findings


Loss of Funds Due to Invalid Gas Recipient

Severity: High

Ecosystem: Sui

Protocol: Mayan Sui

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description: The addr_dest parameter is not a real address and cannot receive funds, leading to loss of funds.


Repeated Invocation Resulting in Excessive Claims

Severity: High

Ecosystem: Sui

Protocol: Mysten Republic Security Token

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Apr 2025

Description: Users can invoke the claim function multiple times for the same entitlement, allowing them to drain more tokens than intended from the protocol.


Flawed Version Validation Check

Severity: High

Ecosystem: Sui

Protocol: Hop Aggregator

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description: The version validation check incorrectly compares config.version against itself, making the validation ineffective and potentially allowing incompatible versions to be used.


Missing Invariant Checks

Severity: High

Ecosystem: Sui

Protocol: Aftermath

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description: The protocol does not verify that new_invariant is equal to or greater than old_invariant, which could lead to protocol state inconsistencies and potential value extraction.


Minting of Suifrens with Insufficient Mixing Limit

Severity: High

Ecosystem: Sui

Protocol: MystenLabs Sui

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description: Due to a typo during mixing, the function uses the wrong mixing limit, potentially allowing users to mint Suifrens beyond the intended constraints.


Incorrect Domain Name Field Retrieval

Severity: High

Ecosystem: Sui

Protocol: MystenLabs Sui

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description: The helper function for retrieving domain_names fields returns incorrect values under two circumstances: (1) when the domain is a normal domain, it returns an empty string for default_domain_name, and (2) when the domain is a subdomain of addr.reverse, it returns the default domain name without validation.


Cooldown Bypass

Severity: High

Ecosystem: Sui

Protocol: Elixir

Auditor: Pashov

Report: https://github.com/pashov/audits/blob/master/team/pdf/Elixir-security-review_2025-08-17.pdf

Report Date: Aug 2025

Description: An incorrect timestamp comparison allows users to bypass the cooldown period. The assertion assert!(current_time >= cooldown.cooldown_end || management.cooldown_duration == 0, EInvalidCooldown) uses the wrong comparison operator, allowing actions before the cooldown has expired.


Incorrect Function Logic in sub_total_staked_unsafe

Severity: High

Ecosystem: Sui

Protocol: Volo

Auditor: MoveBit

Report: https://movebit.xyz/reports/Volo-Smart-Contract-Audit-Report.pdf

Report Date: Sep 2023

Description: When both branch judgments in the sub_total_staked_unsafe function fall to else cases, last_total_staked is subtracted twice. This affects the value of get_ratio calculation, causing the ratio to become larger and subsequently impacting reward calculations.


Incorrect Sort Function Implementation

Severity: High

Ecosystem: Sui

Protocol: Volo

Auditor: MoveBit

Report: https://movebit.xyz/reports/Volo-Smart-Contract-Audit-Report.pdf

Report Date: Sep 2023

Description: The sorting logic of the sort_validators function is flawed, resulting in validators not being sorted according to vldr_prior size as intended.


Logic Flaw in minted_buck_amount

Severity: High

Ecosystem: Sui

Protocol: Bucket

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Bucket-Protocol-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description: There is a critical logic flaw in the calculation of minted_buck_amount that could lead to incorrect token minting amounts.


Wrong Use of new_participants_by_weight

Severity: High

Ecosystem: Sui

Protocol: Legend of Arcadia

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Legend-of-Arcadia-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description: The participants_by_weight vec_map incorrectly obtains keys from new_participants_by_weight instead of from participants_by_weight, leading to incorrect participant weight calculations.


Authentication Logic Error

Severity: High

Ecosystem: Sui

Protocol: Typus Finance

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Typus-Finance-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: The get_auction_max_size function lacks proper verification, and the remove_authorized_user logic is backwards—it checks if the user does not exist rather than if they exist, causing authentication failures.


Validating Errors When Adding to Whitelist

Severity: High

Ecosystem: Sui

Protocol: KriyaDEX

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/KriyaDEX-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: The assert statement is backwards when adding addresses to the whitelist in set_whitelist_address_config(), preventing new addresses from being added to the whitelist.


Receive Return Values in Incorrect Order

Severity: High

Ecosystem: Sui

Protocol: KriyaDEX

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/KriyaDEX-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: In the get_reserves function, return values are received in the wrong order, causing incorrect calculation of amounts during swapping and liquidity addition operations.


Inconsistent Token Ratios

Severity: High

Ecosystem: Sui

Protocol: MovEX

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/MovEx-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: When adding liquidity, the number of liquidity tokens should be calculated based on the ratio of added tokens to the pool. Currently, excess money is sent to the pool instead of being returned to the user.


LSP Value Should Be Greater Than 0

Severity: High

Ecosystem: Sui

Protocol: MovEX

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/MovEx-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: When adding liquidity, the number of liquidity tokens returned should be greater than 0, otherwise users cannot retrieve their tokens. A validation check needs to be added.


No Limit to Swap

Severity: High

Ecosystem: Sui

Protocol: MovEX

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/MovEx-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: Due to blockchain delays, the price when a swap is submitted may differ from what the user receives. A minimum min_out parameter should be implemented with a condition that the output must be greater than or equal to min_out.


Incorrect Protocol Fee Handling

Severity: High

Ecosystem: Sui

Protocol: MovEX

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/MovEx-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: If protocol fees are not withdrawn, they will be incorrectly withdrawn by users who add liquidity, leading to unfair fee distribution.


Random Design Flaws

Severity: High

Ecosystem: Sui

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Sui-Contract-Audit-Report.pdf

Report Date: Mar 2023

Description: In random.move, when the seed parameter of functions seed and seed_rand is 0, all random numbers generated will be 0. This is used in skip_list, and if misused with a 0 seed, it will lead to an endless loop in the skip_list implementation.


Data Integrity and System Reliability Issue (Missing Data Check)

Severity: High

Ecosystem: Sui

Protocol: Studio Mirai

Auditor: MoveJay

Report: https://github.com/Jayfromthe13th/Studio-Miria-audit

Report Date: Feb 2025

Description: The protocol lacks validation to ensure that object IDs match during critical operations, potentially leading to data integrity issues and system reliability problems.


User can bypass MAX_EXPIRATION when extend expiration

Severity: High

Ecosystem: Initia

Protocol: Initia Move

Auditor: Code4Arena Contest Security Researchers

Report: https://code4rena.com/reports/2025-01-initia-move

Report Date: Apr 2025

Description:

In the extend_expiration function, the validation for the duration is incorrect, allowing the user to bypass MAX_EXPIRATION.


Extending a domain’s expiration even after the grace period impacts domain buyers

Severity: High

Ecosystem: Initia

Protocol: Initia Move

Auditor: Code4Arena Contest Security Researchers

Report: https://code4rena.com/reports/2025-01-initia-move

Report Date: Apr 2025

Description:

The name_service.move module allows users to register domain names. If anyone wants to register an already purchased domain, they can only do so once the expiration_date + grace_period for that domain has passed. The name_service.move module allows anyone to call extend_expiration for any domain, which is a feature (according to sponsors).

The main issue is that the extend_expiration() function allows users to extend the expiration of a domain even after the grace period has ended, which is unintended behavior.

As a result, users, multi-sig owners of the actual domain name, or attackers can frontrun and attempt to call extend_expiration() after the grace period has ended, even if other users are trying to buy the same domain name using register_domain().

This breaks a key invariant of the protocol, leading to genuine users being negatively impacted and experiencing a poor user experience.


Incorrect Slippage Check

Severity: High

Ecosystem: Aptos

Protocol: Hyperion Smart Contracts

Auditor: ExVul

Report: https://github.com/ExVul-Sec/AuditReport/blob/main/Smartcontract/Hyperion%20Smart%20Contrat%20Audit%20Report-Exvul.pdf

Report Date: Apr 2025

Description:

Slippage protection logic has a backwards condition.


Liquidation logic allows the liquidator to liquidate more than it should

Severity: High

Ecosystem: Aptos

Protocol: AAVE v3.1-3.3

Auditor: Spearbit

Report: https://github.com/aave/aptos-aave-v3/blob/main/audits/Spearbit%20Aave%20Aptos%20Core%20V3.1-V3.3%20Report.pdf

Report Date: June 2025

Description:

The Move codebase has incorrectly implemented a feature and will recalculate the debt when the userReserveDebtInBaseCurrency is lower than the totalDefaultLiquidatableDebtInBaseCurrency.


actual_collateral_to_liquidate is burned instead of actual_debt_to_liquidate

Severity: High

Ecosystem: Aptos

Protocol: AAVE v3.1-3.3

Auditor: Certora

Report: https://github.com/aave/aptos-aave-v3/blob/main/audits/Certora%20Aave%20Aptos%20Core%20V3.1-V3.3%20Report.pdf

Report Date: Apr 2025

Description:

The liquidation_call() function contains an issue in the burn_debt_tokens() function call. It incorrectly passes actual_collateral_to_liquidate as the debt amount to burn, instead of actual_debt_to_liquidate.

This mismatch would lead to incorrect debt burning during liquidations, causing debt tokens to be either overly or insufficiently burned or a denial of service on the liquidation . The amount of debt being burned should correspond to the actual debt being liquidated, not the collateral amount.


Public access to register_collateral can lock out CoinTypes from APD

Severity: High

Ecosystem: Aptos

Protocol: Thala Labs Aptos Dollar

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Thala%20Labs%20Move%20Dollar%20-%20Zellic%20Audit%20Report.pdf

Report Date: Oct 2022

Description:

Is public function, needs to be public(friend).


Incorrect implementation of reverse iterator

Severity: High

Ecosystem: Aptos

Protocol: Laminar Markets

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Laminar%20-%20Zellic%20Audit%20Report.pdf

Report Date: Oct 2022

Description:

The wrong node is checked.


Duplicate call in coin register

Severity: High

Ecosystem: Aptos

Protocol: Laminar Markets

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Laminar%20-%20Zellic%20Audit%20Report.pdf

Report Date: Oct 2022

Description:

The register_staking_account calls coin::register twice.


Order checker functions use full order size rather than remaining order size

Severity: High

Ecosystem: Aptos

Protocol: Laminar Markets

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Laminar%20-%20Zellic%20Audit%20Report.pdf

Report Date: Oct 2022

Description:

In book::can_bid_be_matched and book::can_ask_be_matched instead of adding remaining size of orders, it adds up full sizes of these orders. Change let bid_size = (order::get_size(bid) as u128); to let bid_size = (order::get_remaining_size(bid) as u128);


Incorrect Assertion in deposit_manager

Severity: High

Ecosystem: Aptos

Protocol: Echelon

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Echelon%20-%20Zellic%20Audit%20Report%20(January).pdf

Report Date: Jan 2025

Description:

There is an assertion that always fails. While the msg length is always greater than 65 bytes, taking the module of the length by 32 will always result in a value less than 32, making it impossible to equal 65.


There is No Slippage Protection During The Distribution of DEX Fees

Severity: High

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

During this exchange process, there is an absence of slippage protection.


Initializing fee_to As ZERO_ACCOUNT May Result In Transferring Fees to The Zero Address

Severity: High

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

In the init_module function, initializing fee_to as ZERO_ACCOUNT means that if the set_fee_to function is called to set a new address for fee reception, swap fees will be transferred to the zero address.


Token Extraction Mismatch in Fee Distribution Logic

Severity: High

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

The function swap_v2.distribute_dex_fees() is used to ensure proper distribution of DEX fees, regardless of the input token. In the case where type_info::type_of() != type_info::type_of(), the line coin_x_out = coin::extract(&mut metadata.balance_x, amount_in) extracts the token amount from metadata.balance_x using the user-input amount_in. However, it seems that the intended behavior might be to use amount_to_liquidity + amount_to_treasury instead of amount_in.


refund_entry Function Can Be Called Multiple Times

Severity: High

Ecosystem: Aptos

Protocol: MoveGPT

Auditor: MoveBit

Report: https://movebit.xyz/reports/MoveGPT-Final-Audit-Report.pdf

Report Date: Apr 2024

Description:

The refund_entry function did not update the user's status after the user was refunded resulting in the user being able to call refund_entry multiple times and reduce the value of total_bought at will. Also the withdraw_round function operator can be called multiple times.


Function Does't Return

Severity: High

Ecosystem: Aptos

Protocol: vibrantX

Auditor: MoveBit

Report: https://movebit.xyz/reports/vibrantX-Final-Audit-Report.pdf

Report Date: Jan 2024

Description:

When the token is not sorted before, the function will be recalled, and the execution of the previous function is not terminated, which will cause the code to be executed twice.


Config update error

Severity: High

Ecosystem: Aptos

Protocol: PatronusFi

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/PatronusFi-Contract-Audit-Report.pdf

Report Date: Mar 2023

Description:

The update function should judge the new_cfg, if new_cfg exceeds limitations of assert, it would be set for the first time, and could not be set later.


Logical Error

Severity: High

Severity: High

Ecosystem: Aptos

Protocol: PatronusFi

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/PatronusFi-Contract-Audit-Report.pdf

Report Date: Mar 2023

Description:

In vault.move, when borrow_cap.temporary is true, vault.paused will be verified as true then set to false, in the next if statement, vault.paused will already be paused and the contract will always panic.


Freeze Bridge with Invalid Sender

Severity: High

Ecosystem: Aptos

Protocol: LayerZero

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Sep 2022

Description:

Only the bridge UA is intended to send messages to the bridge contract. However, this behavior is not enforced at the relayer level. any UA can send messages to any other endpoint.


Amend Order Missing Refund

Severity: High

Ecosystem: Aptos

Protocol: Laminar Markets

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

In the book::amend_bid_order function, when a user tries to decrease the size of an order having the same price, the size of the order gets reduced silently without a refund. Users should be refunded when the size is reduced.


Deducting Vault Interest When Repaying Debt

Severity: High

Ecosystem: Aptos

Protocol: Thala Labs

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2023

Description:

In the protocol module, repay_internal is used to repay amounts borrowed from the vault. However, when repaying the borrowed amount, the interest should also be cleared in addition to the debt.Although the protocol uses fees::absorb_fee to calculate and absorb the repaid interest amount, this amount is not subtracted from the vault.interest. Consequently, a user is unable to clear the interest in their vault, even though it is absorbed from the repayment amount.


Improper Accumulator Updates In V2 Mode

Severity: High

Ecosystem: Aptos

Protocol: Thala

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description:

The stake and unstake functions update the stake amount of the user. These functions also calculate the amount of rewards accrued until that time and store it, and then update the accumulator on the user pool. In the recent changes introducing v2 mode for farming, when v2 mode is enabled, the thl rewards for a user are not accrued in stake and unstake; this results in improper rewards for users.


Deducting Vault Interest When Repaying Debt

Severity: High

Ecosystem: Aptos

Protocol: Thala

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description:

In the protocol module, repay_internalis used to repay amounts borrowedfrom the vault. In addition to the debt, clearing the interest should be done when repaying the borrowed amount. Although the protocol uses fees::absorb_fee to calculate and absorb the repaid interest amount, the protocol does not subtract this amount from vault.interest. Consequently, a user is unable to clear the interest in their vault, even though the protocol absorbs it from the repayment amount.


Removal Of Active Bin

Severity: High

Ecosystem: Aptos

Protocol: Pontem clmm

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Aug 2023

Description:

The vulnerability arises when a liquidity provider becomes the sole provider for a particular price range, i.e., the active bin. This situation may temporarily disrupt the swapping logic of the CLMM. In pool, swap_inner handles the swapping of assets between users, and when it attempts to access the data associated with the active bin utilizing its ID, it assumes that active_bin_id exists in the pool.bins table. However, if a liquidity provider is the only one providing liquidity for this particular active bin, it is possible that they decide to remove their liquidity from that bin. When a liquidity provider removes their liquidity from a bin, it triggers the burn logic, which removes the liquidity providers. This results in the bin being entirely removed from the pool.bins table, effectively erasing the active bin.


Bin Price Manipulation

Severity: High

Ecosystem: Aptos

Protocol: Pontem clmm

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Aug 2023

Description:

In this CLMM, there are multiple bins, each having its price range where users may add liquidity. This vulnerability allows a malicious user to manipulate the price of shares in a specific bin within the CLMM. This manipulation may be exploited to artificially inflate the price of shares in that bin to extremely high values, creating unfavorable conditions for other participants and potentially blocking or monopolizing that bin. The user may profit by burning the last share in the manipulated bin.


ThalaSwapV2

Severity: High

Ecosystem: Aptos

Protocol: ThalaSwapV2

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Aug 2024

Description:

The vulnerability concerns the lack of slippage checks within the entry functions in pool. Slippage parameters protect the protocol from accepting values that are drastically different from the current market conditions due to market volatility or large trades in the pool. This can result in inaccurate transactions within the pool, potentially affecting users unfairly.


Flaw in Full Transfer Checks

Severity: High

Ecosystem: Aptos

Protocol: Aptos Securitize

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

In compliance_service::pre_deposit_check_regulated , the get_force_full_transfer condition checks if full transfers are enforced when the transfer originates from the US. If this condition is true, the function immediately aborts the transfer with the error code EONLY_FULL_TRANSFER. If get_force_full_transfer is enabled and the transfer originates from the US, any transfer to the platform wallet is rejected, regardless of whether the transfer satisfies the required full transfer conditions. As a result, valid transactions may be blocked.


Incorrect Reward Initialization

Severity: High

Ecosystem: Aptos

Protocol: Aptos Securitize

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

The issue in the lending core farming module occurs when a user is accruing a specific reward for the first time. When a user first starts accruing a reward, their last_acc_rewards_per_share is set to pool_acc_reward_per_share . This is problematic, as users who had staked before the reward was introduced will not receive any rewards for the period between their staking and their first accrue_user_pool_reward call.


Missing Solvency Check

Severity: High

Ecosystem: Aptos

Protocol: Echleon

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Apr 2025

Description:

isolated_lending::withdraw_internal lacks a check for bad debt, allowing users to withdraw supplied assets even if their position is underwater. This creates a vulnerability where users may extract value even though they are insolvent. If the borrowed value exceeds collateral, supply shares should not be withdrawable, as they may be needed to cover the shortfall.


kAPT Double Minting

Severity: High

Ecosystem: Aptos

Protocol: Kofi Finance Contacts

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2025

Description:

rewards_manager::update_rewards calculation does not account for minting fees. When stake is added to a delegation pool, an add_stake fee is deducted if the validator being delegated to is producing rewards for that epoch. This fee is temporarily subtracted from the delegator’s active stake and is refunded in the next epoch. The protocol tracks this fee separately and allows the admin to collect it asynchronously. Despite this, the staked APTs are still marked as rewards by the update_rewards function, causing it to mint kAPT on their behalf. Later, when the admin collects these fees, kAPT is re-minted for the same amount, resulting in double-minting and an immediate depegging of kAPT .

Absence of Verification for Reward Start Timestamp

Severity: High

Ecosystem: Sui

Protocol: Cetus DLMM

Auditor: OtterSec

Report: https://drive.google.com/drive/u/0/folders/1d9nv3nJidsbQ0vDT8D1kEuR3rJzK2ULg

Report Date: Nov 2025

Description:

In Cetus DLMM, rewards are expected to start on or after the REWARD_PERIOD_START_AT timestamp, which anchors all reward periods. Currently, pool::add_reward does not enforce this, allowing a reward to be scheduled with a start time before this timestamp. When such a reward exists, reward_settle, which is called on every pool operation, will encounter invalid time intervals, breaking settlement calculations as reward_settle logic expects rewards to start on or after REWARD_PERIOD_START_AT. This results in a denial-of-service affecting multiple operations.

Medium Findings


Fee Manipulation via Improper LP Coin Split

Severity: Medium

Ecosystem: Sui

Protocol: Aftermath Market Making

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Jan 2025

Description:

New coin value can be set to 0, causing issues. When the UserLpCoin with a non-zero LP balance but zero provided_value_usd is introduced, although this UserLpCoin has no contribution to the provided_value_usd , it is still entitled to a withdrawal of funds based on its LP balance. This withdrawal bypasses the fee calculation mechanism, since the fees are determined by the profits derived from balance_to_withdraw and provided_value_usd .


Blocklist Validation Order Mismatch

Severity: Medium

Ecosystem: Sui

Protocol: Sui Bridge

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Apr 2024

Description:

Because it scans through vector, if stored out of order, then it may not find. In committee::execute_blocklist, the member_idx variable is not reset to zero at the beginning of each iteration of the outer while loop. Thus, if a blocklist contains Ethereum addresses in a different order than the order of committee members stored in self.members, the function may fail to find the corresponding committee member even though the member is present in the list.


Incorrect Function Call

Severity: Medium

Ecosystem: Sui

Protocol: Sui Axelar Gateway V2

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2024

Description:

Within estimate function, get_estimate is called rather than obtaining true balances.


Unsafe Role Removal

Severity: Medium

Ecosystem: Sui

Protocol: Cetus

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2024

Description:

Uses subtraction to remove roles, additional roles may be added or subtracted by removing an unset role.


Reward Accumulation During Inactive Time Period

Severity: Medium

Ecosystem: Sui

Protocol: Bluefin Spot

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Nov 2024

Description:

Rewards are account for during between previous reward time and new start time and also during inactive time.


Lack of Configurable Delay Setting in Timelock

Severity: Medium

Ecosystem: Sui

Protocol: Lombard Finance

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Dec 2024

Description:

Has feature to set delay, but within code uses hard-coded variable of MS_24_HOURS.


Arbitrary Delete Of Orders

Severity: Medium

Ecosystem: Sui

Protocol: Maven

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Apr 2023

Description:

In maven.move, any user can call execute_object_operation with the incorrect ASSET generic and pop the order from execution without properly executing it, as the precheck fails and returns false. This allows anyone to stop others from executing the object operations.


Minimum Stake Bypass in delegation_service

Severity: Medium

Ecosystem: Aptos

Protocol: Tortuga

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

he Tortuga protocol operates on top of the delegation_service module which operates the pools and computes rewards for the validators and delegators. While most users will delegate indirectly through Tortuga (stake_router), validators can also receive direct delegations through the delegation_service API. Users who want to delegate directly can invoke delegation_service::delegate and provide an amount. Internally, this function ensures that the amount provided meets a minimum delegation amount (which is configurable by the pool owner). While this check ensures that the instantaneous delegation amount is above the required minimum, this limit is not imposed upon withdrawals. Therefore, a user can simply delegate some amount of stake higher than min_delegation_amount and then immediately withdraw a large portion to effectively bypass this limit.


Validators can Manipulate Commission Rates

Severity: Medium

Ecosystem: Aptos

Protocol: Tortuga

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

Registered validators can receive stake from the protocol or directly from individual delegators. Either way, a commission, set by the validator, must be paid. The protocol_commission must be smaller than current_commission, and both have to be smaller or equal to ManagedStakePool max_commission, which is set by the protocol in delegation_service::initialize. The issue is that validators have the ability to drastically increase the commission percentage at any given time. This allows a malicious validator to set a very small commission and later on increase it by a large margin. Given that the stakes are locked via lockup periods (30 days), the validator can profit from a large commission for a long period of time


Liquidate Minimum Debt Vaults

Severity: Medium

Ecosystem: Aptos

Protocol: Argo

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

Argo enforces a minimum debt threshold when repaying vaults. Unfortunately, liquidate_repay also enforces that the collateral ratio of the vault isn’t repaid fully. This means that vaults that are close to the minimum debt threshold cannot be liquidated.


Issue While Starting New Epoch In Farming

Severity: Medium

Ecosystem: Aptos

Protocol: Thala

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description:

If an epoch ends earlier than epoch_end_seconds, the code sets farming.epoch_end_seconds to epoch_now. If the current epoch’s starting time is in the future and ending this epoch is attempted, farming.epoch_end_seconds is set to farming.epoch_start_seconds, which is the future time even though the epoch has ended immediately. Now, starting another epoch is impossible until we reach farming.epoch_start_seconds.


Minimum Stake Bypass

Severity: Medium

Ecosystem: Aptos

Protocol: Tortuga

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: June 2023

Description:

A user may delegate some amount of stake higher than min_delegation_amount, then immediately withdraw a large portion to effectively bypass this limit.


Validators Manipulating Commission Rates

Severity: Medium

Ecosystem: Aptos

Protocol: Tortuga

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: June 2023

Description:

This allows a malicious validator to set a very small commission and increase it by a large margin later on. Since 30-day lockup periods lock the stakes, the validator may profit from a large commission for a long time.


Reward Distribution Inconsistency

Severity: Medium

Ecosystem: Aptos

Protocol: Aries Markets

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2024

Description:

When updating the reward configuration with a new reward_per_day, the reward_per_share value, which represents the reward per share, should be adjusted to reflect the new configuration. However, the update_reward_config function fails to calculate the previous unclaimed rewards and update the farm.timestamp based on the old reward_per_day prior to updating the reward_per_share before applying the new configuration.


Potential Deposit Lockup

Severity: Medium

Ecosystem: Aptos

Protocol: Aries Markets

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2024

Description:

There is a potential vulnerability in the logic of deposit_coin_to_reserve. It prioritizes repaying existing loans with the repay_coin before utilizing it for minting liquidity provider tokens. The issue arises because some coins may not be allowed as collateral within the Aries Markets protocol. If the repay_coin is one such coin, it gets utilized for repayment first. But since the minted liquidity provider tokens represent the remaining deposit_coin (of the same type as repay_coin), adding them as collateral fails. Thus, even if repay_coin amount is enough to cover the entire loan, the call will fail, because it may not be utilized as collateral, rendering the user without standing debt and potential liquidation penalties.There is a potential vulnerability in the logic of deposit_coin_to_reserve. It prioritizes repaying existing loans with the repay_coin before utilizing it for minting liquidity provider tokens. The issue arises because some coins may not be allowed as collateral within the Aries Markets protocol. If the repay_coin is one such coin, it gets utilized for repayment first. But since the minted liquidity provider tokens represent the remaining deposit_coin (of the same type as repay_coin), adding them as collateral fails. Thus, even if repay_coin amount is enough to cover the entire loan, the call will fail, because it may not be utilized as collateral, rendering the user without standing debt and potential liquidation penalties.


Inconsistency in Swap Route Validation

Severity: Medium

Ecosystem: Aptos

Protocol: Echelon

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Apr 2025

Description:

lending_leverage::loop_supply_x_borrow_y_fa , there is a pool_route and an associated asset_out_route . These define how the borrowed asset Y is swapped back to the supplied asset X via a multi-hop route. loop_supply_x_borrow_y_fa contains incorrect assertions that check the start of the swap route against the input token and the end against an un-utilized out_metadata parameter. This logic is reversed and unnecessary. The route should instead start with the borrowed token ( Y ) and end with the input token ( X ), since the goal is to loop borrowed assets back into the original collateral.


Lack of two-step ownership transfer

Severity: Medium

Ecosystem: Sui

Protocol: Matrixdock

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Matrixdock%20XAUm%20-%20Zellic%20Audit%20Report.pdf

Report Date: July 2025

Description:

The protocol lacks a two-step ownership transfer and validation of the new owner’s address; should include an address validity check.


Blacklist Logic Inconsistencies

Severity: Medium

Ecosystem: Sui

Protocol: Elixir

Auditor: Pashov

Report: https://github.com/pashov/audits/blob/master/team/pdf/Elixir-security-review_2025-08-17.pdf

Report Date: Aug 2025

Description:

The implementation of full/soft restrictions in sdeusd.move shows some inconsistencies that may allow bypasses of it.


Orphaned Rewards Captured by First Staker

Severity: Medium

Ecosystem: Sui

Protocol: Elixir

Auditor: Pashov

Report: https://github.com/pashov/audits/blob/master/team/pdf/Elixir-security-review_2025-08-17.pdf

Report Date: Aug 2025

Description:

Rewards can be distributed when no active stakers exist.


Incorrect Role Revocation Logic May Grant Unauthorized Roles

Severity: Medium

Ecosystem: Supra

Protocol: DexLyn Smart Contract

Auditor: HackenProof Contest SRs

Report: https://hackenproof.com/reports/DEXLYNCA-28

Report Date: Sep 2025

Description:

Revoking a role that doesn’t exist may grant permissions to another role.


Wrong Event Value

Severity: Medium

Ecosystem: Sui

Protocol: Dola

Auditor: MoveBit

Report: https://movebit.xyz/reports/Dola-Protocol-Final-Audit-Report.pdf

Report Date: Feb 2024

Description:

In the emit_reserve_stats function, the supply_index field incorrectly uses the return value of the get_borrow_index function, which is the same as the borrow_index , as the value of the event, which may cause confusion in analyzing the data off the chain. Also the UpdateUserRewardEvent event in the claim_reward function, old_reward_index and new_reward_index also use user_reward.last_update_reward_index as a value.


Valid Prizes Can Be Collected As Expired

Severity: Medium

Ecosystem: Sui

Protocol: Random-Vault

Auditor: MoveBit

Report: https://movebit.xyz/reports/Random-Vault-Final-Audit-Report.pdf

Report Date: Feb 2024

Description:

In the collect_expired_prize function, anyone can collect the prize that is over the round.end_time. This means, that if the time difference is large enough, the valid prize may be collected.


Incomplete Handling of Fully Repaid Loans in the Loan List

Severity: Medium

Ecosystem: Sui

Protocol: Scallop

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Scallop-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description:

Fully repaid loans remain in the loan list with zero amount, causing redundant computations and indicating missing loan list maintenance.


bottle_table might be out of order

Severity: Medium

Ecosystem: Sui

Protocol: Bucket Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Bucket-Protocol-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description:

In handle_redeem, if buck_input_amount is fully repaid for a part of Bottle, Bottle debt is 0. If it pushes to end of list, linked_table will be out of order.


Logical Loophole

Severity: Medium

Ecosystem: Sui

Protocol: Turbos Finance-TurboStar

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/TurboStar-Smart-Contract-Audit-Report.pdf

Report Date: May 2023

Description:

Sale_balance can be transferred to reduce raise goal, fund function to give more people an opportunity to participate in IDO.


proposal_request can be extracted at any time

Severity: Medium

Ecosystem: Sui

Protocol: Legend of Arcadia

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Legend-of-Arcadia-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description:

Missing check if proposal is approved or rejected, any user of MultiSignature can take away the request object in the proposal.


burn function Design flaw

Severity: Medium

Ecosystem: Sui

Protocol: Legend of Arcadia

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Legend-of-Arcadia-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description:

Missing check for amount = none, which may burn all coins. Change burn_request to first use coin::split to separate the coins in params according to amount.


approved_weight and reject_weight are not compared

Severity: Medium

Ecosystem: Sui

Protocol: Legend of Arcadia

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Legend-of-Arcadia-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description:

approved_weight and reject_weight are not compared, acknowledged as is optional.


Lack of Minimum Liquidity

Severity: Medium

Ecosystem: Sui

Protocol: KriyaDEX

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/KriyaDEX-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

In the add_liquidity function, there is no min the first time adding liquidity. Add min liquidity and lock it in the pool.


Missing K Value Verification

Severity: Medium

Ecosystem: Sui

Protocol: KriyaDEX

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/KriyaDEX-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

Missing check, after swap, the value of k should be greater than or equal to the previous value of k.


Lack of K-Value Check

Severity: Medium

Ecosystem: Sui

Protocol: MovEX

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/MovEx-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

Missing check, after swap, the value of k should be greater than or equal to the previous value of k.


Lack of Minimum Liquidity Requirement

Severity: Medium

Ecosystem: Sui

Protocol: MovEX

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/MovEx-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

In the add_liquidity function, there is no min the first time adding liquidity. Add min liquidity and lock it in the pool.


Incorrect Protocol Fee Handling

Severity: Medium

Ecosystem: Sui

Protocol: MovEX

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/MovEx-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

If fee is not withdrawn, fee will be withdrawn by person who adds liquidity. This may also cause asset losses for some users who provide liquidity.


Missing K Check

Severity: Medium

Ecosystem: Sui

Protocol: Sui AMM Swap

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Sui-AMM-swap-Contracts-Audit-Report.pdf

Report Date: Nov 2022

Description:

Missing check, after swap, the value of k should be greater than or equal to the previous value of k.


No minting of minimum liquidity

Severity: Medium

Ecosystem: Sui

Protocol: Sui AMM Swap

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Sui-AMM-swap-Contracts-Audit-Report.pdf

Report Date: Nov 2022

Description:

In the function add_liquidity(), if it is the first injection of liquidity, the number of lp tokens obtained will be subtracted from the minimum liquidity value (MINIMAL_LIQUIDITY). The function of MINIMAL_LIQUIDITY is to limit the lower limit of lp supply, thereby reducing the unit price of lp token and increasing the attack cost of lp price manipulation.

This value is directly subtracted in the code, so the value of lp_supply does not increase, and this part should be mint and stored in an address instead of being directly subtracted.


Missing Key Validation in ReserveConfig

Severity: Medium

Ecosystem: Sui

Protocol: Aries Market

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Aries-Smart-Contract-Audit-Report.pdf

Report Date: June 2023

Description:

No check if liquidation_threshold > loan_to_value. If threshold is lower, asset can be liquidated immediately when borrowing amount is close to borrowing capacity, resulting in loss to user.


Unreasonable Repayment of Logic for Flash Loans

Severity: Medium

Ecosystem: Sui

Protocol: Aries Market

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Aries-Smart-Contract-Audit-Report.pdf

Report Date: June 2023

Description:

In the end_flash_loan() function within controller.move, when repayment is made for a flash loan, if the amount in coin_src exceeds the outstanding payment amount of the flash loan, the excess amount is used to repay other debts or make deposits. This is not a reasonable logic for flash loans.


Missing Reward Collection Check in burn_position Leads to Permanent Reward Loss

Severity: Medium

Ecosystem: Sui

Protocol: Magma DEX

Auditor: Three Sigma

Report: https://cdn.sanity.io/files/qoqld077/staging/9566473c444a6cfd99c7a6556fa4857950b41de3.pdf

Report Date: July 2025

Description:

The almm_pair::burn_position function allows users to completely destroy their liquidity positions without ensuring that accumulated rewards from the RewarderGlobalVault have been collected first. This function is designed to withdraw all liquidity from all bins in a position and destroy the position object, but it lacks a critical validation step to check if the position has unclaimed rewards from the rewarder system.


factory::revoke_protocol_fee_cap function is implemented incorrectly

Severity: Medium

Ecosystem: Sui

Protocol: Magma DEX

Auditor: Three Sigma

Report: https://cdn.sanity.io/files/qoqld077/staging/9566473c444a6cfd99c7a6556fa4857950b41de3.pdf

Report Date: July 2025

Description:

When revoking protocol_fee_cap, instead of removing the cap from allowed_protocol_fee_cap vector, we remove the cap from the allowed_admin, which will result in preventing of removing protocol_fee_cap as the Id is not added into allowed_admin.


Last Holder Can’t Exit, Zero‑Supply Unstake Reverts

Severity: Medium

Ecosystem: Initia

Protocol: Cabal Liquid Staking

Auditor: Code4Arena Contest Security Researchers

Report: https://code4rena.com/reports/2025-04-cabal-liquid-staking-token

Report Date: May 2025

Description:

When a user burns the entire remaining supply of a Cabal LST ( sxINIT or Cabal LPT) via initiate_unstake, the follow‑up processing step always aborts with a divide‑by‑zero and the user can never exit.


get_cost_amount allows unlimited free domain registrations

Severity: Medium

Ecosystem: Initia

Protocol: Initia Move

Auditor: Code4Arena Contest Security Researchers

Report: https://code4rena.com/reports/2025-01-initia-move

Report Date: Apr 2025

Description:

The get_cost_amount function unintentionally sets the price for domain names of length greater than or equal to 7 to zero. FREE_LENGTH is defined as 7. When the length of the domain name is greater than or equal to 7, the else branch is executed, setting the price_per_year to 0. While this behavior may be intentional to make longer domain names free, it opens the system to abuse.


The proposal expiration logic is incorrect

Severity: Medium

Ecosystem: Initia

Protocol: Initia Move

Auditor: Code4Arena Contest Security Researchers

Report: https://code4rena.com/reports/2025-01-initia-move

Report Date: Apr 2025

Description:

The is_proposal_expired function uses incorrect comparison logic that causes proposals to be marked as expired when they should still be active, and vice versa. This is as a result of the reversed comparison operator in the expiration check. The impact of this bug is high because valid proposals are incorrectly marked as expired which prevents legitimate voting. Also the voting period enforcement is effectively reversed. This effectively creates a DoS because any multisig wallet created would be unable to execute proposals.


Missing Token Order and Identity Validation in LP Token

Severity: Medium

Ecosystem: Aptos

Protocol: Hyperion Smart Contracts

Auditor: ExVul

Report: https://github.com/ExVul-Sec/AuditReport/blob/main/Smartcontract/Hyperion%20Smart%20Contrat%20Audit%20Report-Exvul.pdf

Report Date: Apr 2025

Description:

Two validation issues exist in the lp.move contract's LP token creation functions:

  1. Token Pair Order Issue in get_pool_seeds Function

The get_pool_seeds function generates seeds directly from token_a and token_b without sorting. This can create different LP tokens for the same pair in different orders, potentially splitting liquidity pools.

  1. Lack of Token Identity Check in LP Creation

The create_share_token function doesn't verify if token_a and token_b are the same, allowing creation of invalid single-token LP tokens.


Missing Tick Range Validation in Vault Creation

Severity: Medium

Ecosystem: Aptos

Protocol: Hyperion Smart Contracts

Auditor: ExVul

Report: https://github.com/ExVul-Sec/AuditReport/blob/main/Smartcontract/Hyperion%20Smart%20Contrat%20Audit%20Report-Exvul.pdf

Report Date: Apr 2025

Description:

The create_vault function allows users to specify tick_lower and tick_upper without any validation. This leads to two critical problems:

Invalid Tick Order:

There is no check ensuring that tick_lower < tick_upper. This violates the core design of Uniswap V3-style tick ranges, potentially resulting in vaults that cannot function properly due to misconfigured tick boundaries.

Lack of Tick Bound Checks:

Neither tick_lower nor tick_upper are validated against the protocol's global minimum/maximum tick bounds. This may allow the creation of positions outside the valid price range supported by the underlying pool, which could cause failures in liquidity provisioning or swaps.


set_next_variable_borrow_index() used instead of set_next_scaled_variable_debt()

Severity: Medium

Ecosystem: Aptos

Protocol: AAVE v3.1-3.3 Core

Auditor: Certora

Report: https://github.com/aave/aptos-aave-v3/blob/main/audits/Certora%20Aave%20Aptos%20Core%20V3.1-V3.3%20Report.pdf

Report Date: Apr 2025

Description:

In the function liquidation_logic::burn_debt_tokens() a call to set_next_variable_borrow_index() has been wrongly introduced in the place of set_next_scaled_variable_debt(). This approach fails to update the relevant variable next_scaled_variable_debt and falsely updates next_variable_borrow_index, leading to the total_variable_debt and consequently, the current_liquidity_rate and current_variable_borrow_rate being updated to much lower values than they should.


Health factor check is too low

Severity: Medium

Ecosystem: Aptos

Protocol: AAVE v3.0.2

Auditor: Certora

Report: https://github.com/aave/aptos-aave-v3/blob/main/audits/Certora%20Aave%20Aptos%20Core%20V3.0.2%20Report.pdf

Report Date: Apr 2025

Description:

validate_liquidation_call first checks if health_factor is less than 0.95e18, then again if health_factor is less than 1e18. The second check is redundant.


Retroactive windfall for first time users

Severity: Medium

Ecosystem: Aptos

Protocol: AAVE V3

Auditor: Cantina Contest SRs

Report: https://cantina.xyz/code/ad445d42-9d39-4bcf-becb-0c6c8689b767/findings/192

Report Date: Jun 2025

Description:

In update_user_data, the code does:

if (!simple_map::contains_key(&reward_data.users_data, &user)) { simple_map::add(&mut reward_data.users_data, user, UserData { index: 0, accrued: 0 });}let (rewards_accrued, _) = calculate_rewards( user_balance, new_asset_index, (user_data.index as u256), asset_unit);

Because UserData.index is always initialized to 0, the very first call computes

rewards_accrued = user_balance * (new_asset_index – 0) / asset_unit

granting the newcomer the full cumulative rewards per token ever emitted. In Aave’s Solidity _updateUserAssetInternal, a fresh user’s stored index is immediately set to newAssetIndex and rewards are only calculated if their prior stake is nonzero, so first‐time participants never receive back-pay .

First-time users instantly drain the entire historical reward pool, diluting legitimate stakers and depleting treasury funds.


Partially filled APD redemptions always charge the full redemption fees

Severity: Medium

Ecosystem: Aptos

Protocol: Thala Labs Aptos Dollar

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Thala%20Labs%20Move%20Dollar%20-%20Zellic%20Audit%20Report.pdf

Report Date: Oct 2022

Description:

Because the variable redemption_fee_coin is not adjusted to account for partial redemptions, users who call vault::redeem_collateral are always charged full redemption fee.


Unable to unregister collateral CoinTypes

Severity: Medium

Ecosystem: Aptos

Protocol: Thala Labs Aptos Dollar

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Thala%20Labs%20Move%20Dollar%20-%20Zellic%20Audit%20Report.pdf

Report Date: Oct 2022

Description:

Collateral CoinTypes cannot be unregistered, and there’s no disincentive for borrowing against assets outside Thala’s risk framework. A freezing mechanism was added but requires further review.


Potentially incorrect implementation of multiple queue operations

Severity: Medium

Ecosystem: Aptos

Protocol: Laminar Markets

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

Coding mistakes in flow:queue. In the case index_to_remove is neither there is an assert, assert should also be there if index_to_remove is tail. queue::remove cannot handle length of 1 and in queue::in_next there is an assertion followed by an if and a second assert that will never fail.


Update the Reserves within the swap() Function

Severity: Medium

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

In the swap_exact_x_to_y_direct() function, the protocol swaps token X to token Y and subsequently calls update_reserves() to update the constant product. However, a best practice, as exemplified in the PancakeSwap code, is to call the update() function within the swap() function to handle the updates. This ensures that the reserves are consistently and efficiently updated during the swapping process.


Some View Function Logic Errors

Severity: Medium

Ecosystem: Aptos

Protocol: MoveGPT

Auditor: MoveBit

Report: https://movebit.xyz/reports/MoveGPT-Final-Audit-Report.pdf

Report Date: Apr 2024

Description:

The view function to get information about private_round is still retrieved from the ido_round field.


claim Function Can Be Called Multiple Times

Severity: Medium

Ecosystem: Aptos

Protocol: MoveGPT

Auditor: MoveBit

Report: https://movebit.xyz/reports/MoveGPT-Final-Audit-Report.pdf

Report Date: Apr 2024

Description:

Claim related functions can be called multiple times by the user.


Logic Error in Claim Function

Severity: Medium

Ecosystem: Aptos

Protocol: MoveGPT

Auditor: MoveBit

Report: https://movebit.xyz/reports/MoveGPT-Final-Audit-Report.pdf

Report Date: Apr 2024

Description:

The assertion function current_time > vesting_config.start causes the claim function to never reach the if branch of the vesting_config.start > current_time condition.


Insufficient Validation for amounts_out

Severity: Medium

Ecosystem: Aptos

Protocol: Cellena

Auditor: MoveBit

Report: https://movebit.xyz/reports/Cellana-Smart-Contract-Final-Audit-Report.pdf

Report Date: Feb 2024

Description:

In the swap_route_entry function, the assertion at L130 only validates the last value in the amounts_out array, which is insufficient to verify that all values in the array are correct.


Incorrect Condition Statement

Severity: Medium

Ecosystem: Aptos

Protocol: Cellena

Auditor: MoveBit

Report: https://movebit.xyz/reports/Cellana-Smart-Contract-Final-Audit-Report.pdf

Report Date: Feb 2024

Description:

In the optimal_liquidity_amounts function, the conditional statement if (amount_2 <= amount_2_desired) is always true. According to the context logic, the parameter amount_2 should be changed to amount_2_optimal.


Logic Design of The swap_route_entry Function

Severity: Medium

Ecosystem: Aptos

Protocol: Cellena

Auditor: MoveBit

Report: https://movebit.xyz/reports/Cellana-Smart-Contract-Final-Audit-Report.pdf

Report Date: Feb 2024

Description:

The swap_route_entry function first swaps the first token from the from_token array with the first token from the to_token array. Then, it swaps the resulting token with the second token from the to_token array, and so on. Finally, it transfers the token from the last swap to the recipient. The correct design should be to swap each token in the from_token array with the corresponding token in the to_token array.


Limit Orders Cannot Be Executed

Severity: Medium

Ecosystem: Aptos

Protocol: Merkle Trade Smart Contract

Auditor: MoveBit

Report: https://movebit.xyz/reports/Merkle-Trade-Smart-Contract-Audit-Report.pdf

Report Date: July 2023

Description:

The function execute_order() is used to execute an order. Inside the function, it checks if more than 30 seconds have passed since the order was created. If the condition is met, it cancels the order by calling cancel_order_internal(). However, if the order is a limit order, it means that the order has a specific price set by the trader at which they are willing to buy or sell the asset, if this timeout has elapsed, the order is considered expired.


view_broker Should Not Return False Bool Directly

Severity: Medium

Ecosystem: Aptos

Protocol: Superposition

Auditor: MoveBit

Report: https://movebit.xyz/reports/Superposition-Final-Audit-Report.pdf

Report Date: Mar 2024

Description:

In broker.move, the view_broker is a function that reads the current state of the broker. However, instead of reading the bool values from the broker, several values directly return false. This will send wrong values for not only this view function but also other functions that call it, for example: borrow_with_ticket, lend_with_ticket, etc.


Fixed Slippage

Severity: Medium

Ecosystem: Aptos

Protocol: vibrantX

Auditor: MoveBit

Report: https://movebit.xyz/reports/vibrantX-Final-Audit-Report.pdf

Report Date: Jan 2024

Description:

Slippage protects users from losing tokens in some paris, but the fixed slippage settings can also lead to failed trades with high price volatility.


Wrong condition in assert

Severity: Medium

Ecosystem: Aptos

Protocol: Mokshya/Wapal Aptos NFT Mint

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Mokshya-Wapal-Aptos-NFT-Mint-Smart-Contract-Audit.pdf

Report Date: Mar 2023

Description:

In the update_candy function, the royalty_points_denominator judges the wrong condition here, which will never be able to update candy_data.royal_points_denominator.


Unverified public_sale_mint_time must be greater than presale_mint_time

Severity: Medium

Ecosystem: Aptos

Protocol: Mokshya/Wapal Aptos NFT Mint

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Mokshya-Wapal-Aptos-NFT-Mint-Smart-Contract-Audit.pdf

Report Date: Mar 2023

Description:

In candymachine::mint_from_merkle, public_sale_mint_time must be greater than presale_mint_time, but it is not verified when creating or modifying CandyMachine.


Business logic structure is too complex

Severity: Medium

Ecosystem: Aptos

Protocol: Transit Finance

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Transit-Finance-Audit-Report.pdf

Report Date: Nov 2022

Description:

batch_swap_five has 27 type parameters and 15 function parameters. Incovenient for code maintenance, user command line execution, and function call, gas consumption will also be higher.


Code readability needs to be improved in the get_intermediate_out_from_dex functions

Severity: Medium

Ecosystem: Aptos

Protocol: Transit Finance

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Transit-Finance-Audit-Report.pdf

Report Date: Nov 2022

Description:

Dex swap logic of six different branches can be split into six functions to improve readbility.


Common code should be encapsulated as a function to be called

Severity: Medium

Ecosystem: Aptos

Protocol: Transit Finance

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Transit-Finance-Audit-Report.pdf

Report Date: Nov 2022

Description:

batch_swap_three and batch_swap_five have roughly the same code except for the number of type parameters.


Excessive reliance on external dex contract calls and no way to control or suspend external dex

Severity: Medium

Ecosystem: Aptos

Protocol: Transit Finance

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Transit-Finance-Audit-Report.pdf

Report Date: Nov 2022

Description:

No security measures in external contract calls to get_intermediate_out_from_dex exist.


Wrong event type emitted

Severity: Medium

Ecosystem: Aptos

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Aptos-Audit-Report.pdf

Report Date: Jan 2023

Description:

In create_pool, it emits CreatePoolEvent.coin_type_b with CoinTypeA.


The pool Coin Order Handle

Severity: Medium

Ecosystem: Aptos

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Aptos-Audit-Report.pdf

Report Date: Jan 2023

Description:

In create_pool, you can create a pool with CoinA, CoinB and CoinB, CoinA. This will cause confusion. Force user to create pool with coins in order, by adding an assert.


Liquidate Minimum Debt Vaults

Severity: Medium

Ecosystem: OL Network

Protocol: StakeSphere

Auditor: MoveJay

Report: https://github.com/Jayfromthe13th/StakeSphere-stealth-/blob/Wallet/Audit.md

Report Date: Apr 2024

Description:

StakeSphere enforces a minimum debt threshold when repaying vaults. That being said, liquidate_repay also enforces that the collateral ratio of the vault isn’t repaid fully. This means that vaults that are close to the minimum debt threshold cannot be liquidated.


No Check for Account Registration

Severity: Medium

Ecosystem: Binance Smart Chain

Protocol: AquaSwap

Auditor: MoveJay

Report: https://github.com/Jayfromthe13th/AuquaSwap-Audit-/blob/Wallet/Audit%20report.md

Report Date: 2024

Description:

The execute_limit_order function fails to verify if the recipient account is registered to receive the quote coin, potentially blocking order execution.

Calculation Errors - Overview

Arithmetic mistakes like rounding, overflow, or precision loss impacting balances or rewards.

Calculation ErrorsFindings
Critical10
High25
Medium52
Total87

Critical Findings


Share Price Manipulation

Severity: Critical

Ecosystem: Sui

Protocol: Bluefin Spot

Auditor: OtterSec

Report: https://www.notion.so/a296e98838aa4fdb8f3b192663400772

Report Date: Nov 2024

Description: The bluefin_vault contract is vulnerable to rounding manipulation attacks due to improper handling of token-to-share conversion rates, allowing exploitation of precision errors in share valuation. Additionally, inconsistent conditions in the shares calculation logic may cause deposits to yield zero shares when vault balances are mismatched, leading to potential fund loss.


Interest Rate Calculation Error

Severity: Critical

Ecosystem: Sui

Protocol: Navi

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Navi-Smart-Contract-Audit-Report.pdf

Report Date: Jul 2023

Description: The SECOND_PER_YEAR constant is sometimes incorrectly calculated with milliseconds, resulting in a value 1000 times larger than intended, causing significant interest rate miscalculations.


Numerical Precision Error

Severity: Critical

Ecosystem: Sui

Protocol: Navi

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Navi-Smart-Contract-Audit-Report.pdf

Report Date: July 2023

Description: In the repay function, the excess amount after repayment is returned through pool::withdraw, but excess_amount is not converted to decimal precision, causing incorrect amounts to be returned to users.


Flawed Validations Lead To Inaccuracies

Severity: Critical

Ecosystem: Sui

Protocol: Navi

Auditor: OtterSec

Report: https://www.notion.so/a296e98838aa4fdb8f3b192663400772

Report Date: June 2023

Description: In validator.move, validation functions for lending operations use scaled balances (supply and borrow) in conjunction with unscaled amounts, leading to calculation inconsistencies and inaccuracies across multiple functions.


Improper Conversion

Severity: Critical

Ecosystem: Sui

Protocol: Bucket

Auditor: OtterSec

Report: https://www.notion.so/a296e98838aa4fdb8f3b192663400772

Report Date: June 2023

Description: When repay_amount is greater than or equal to Bottle debt, the returned collateral is calculated as 1.1 times the debt amount. However, the debt amount is not adjusted based on the collateral token's decimals during conversion, resulting in improper collateral values (return_sui_amount).


Calculation Formula Error when Adding Liquidity

Severity: Critical

Ecosystem: Sui

Protocol: KriyaDEX

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/KriyaDEX-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: In the get_amount_for_add_liquidity function, the formula for obtaining the other token quantity through one token quantity is incorrect, directly affecting the liquidity addition functionality for users.


Incorrect Formula

Severity: Critical

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: The amount_to_refund calculation should also be divided by DecimalPrecision after being multiplied by it, preventing precision loss in refund amounts.


remove_liquidity does not call update_rewarder

Severity: Critical

Ecosystem: Aptos

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Aptos-Audit-Report.pdf

Report Date: Jan 2023

Description:

remove_liquidity does not call update_rewarder which will cause reward cumulative error.


Broken Stable Curve Math

Severity: Critical

Ecosystem: Aptos

Protocol: Pontem (Liquidswap)

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Sep 2025

Description:

The liquidity_pool::compute_and_verify_lp_value function, checks if the lp value is the same before and after a swap. When dealing with a stable curve, the lp value before the swap, is calculated incorrectly.


Overflow In Calculating Delta B

Severity: Critical

Ecosystem: Sui

Protocol: Cetus

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Jan 2023

Description:

The function get_delta_b is used to calculate the amount_b for specified liquidity. However, its implementation relies on the assumption that themultiplication ofliquidityandsqrt_price_diff returns the value < 2**128 which does not require to be true.

High Findings


Risk of Arithmetic Overflow

Severity: High

Ecosystem: Sui

Protocol: Aftermath Orderbook

Auditor: OtterSec

Report: https://www.notion.so/a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2024

Description: In ticks_per_lot_to_quote_per_base, a multiplication operation between ticks_per_lot and tick_size can overflow if the result exceeds the maximum representable value of a u64, resulting in an integer overflow vulnerability.


Fund Loss Due to Unchecked Conversion

Severity: High

Ecosystem: Sui

Protocol: Aftermath

Auditor: OtterSec

Report: https://www.notion.so/a296e98838aa4fdb8f3b192663400772

Report Date: Jan 2025

Description: An incorrect calculation turns negative values into positive values, causing unexpected profit and fund loss. The conversion is not properly validated, leading to unintended financial outcomes.

Incorrect Price Calculation

Severity: High

Ecosystem: Sui

Protocol: Aftermath

Auditor: OtterSec

Report: https://www.notion.so/a296e98838aa4fdb8f3b192663400772

Report Date: Apr 2023

Description: In math.move, the functions calc_oracle_price and calc_spot_price are intended to calculate the price of BASE coin in terms of QUOTE coin. However, calc_spot_price_fixed incorrectly computes the price of out-coin in terms of in-coin, inverting the intended calculation.


Inconsistent Assert Statement

Severity: High

Ecosystem: Sui

Protocol: Bluefin

Auditor: OtterSec

Report: https://www.notion.so/a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2024

Description: The request_profit_withdraw_from_vault function fails to account for vault.pending_profit_amount in its withdrawal validation, allowing the holding account to inflate pending profits and bypass balance checks. As a result, withdrawals can exceed the actual available profit, leading to potential fund misallocation or loss.


Round Up Shares

Severity: High

Ecosystem: Sui

Protocol: Volo

Auditor: OtterSec

Report: https://www.notion.so/a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2023

Description: By staking the minimum number of Sui repeatedly, due to rounding errors, users can receive more Cert tokens when unstaking than intended, effectively exploiting the protocol.


Precision Loss Results in Rewards being Left in the Contract and Unable to be Withdrawn

Severity: High

Ecosystem: Sui

Protocol: Cetus Farming

Auditor: MoveBit

Report: https://movebit.xyz/reports/Cetus-Farming-Smart-Contract-Final-Audit-Report.pdf

Report Date: Jan 2024

Description: The accumulate_pool_reward() function experiences two instances of precision loss: once when calculating rewards for each pool based on proportion, and again when calculating acc_per_share using pool_acc_reward/total_pool_share. This results in residual rewards that cannot be withdrawn after all users claim their rewards.


pending_reward Is Not Compatible

Severity: High

Ecosystem: Sui

Protocol: Cetus Farming

Auditor: MoveBit

Report: https://movebit.xyz/reports/Cetus-Farming-Smart-Contract-Final-Audit-Report.pdf

Report Date: Jan 2024

Description: In both add_liquidity_fix_coin and remove_liquidity functions, without the addition of pos_info.reward, the pending_reward calculation would be incorrect, causing major problems in reward distribution.


Erroneous Calculation Leads To Unfair Liquidation

Severity: High

Ecosystem: Sui

Protocol: Navi

Auditor: OtterSec

Report: https://www.notion.so/a296e98838aa4fdb8f3b192663400772

Report Date: Jun 2023

Description: In logic.move, the calculate_max_liquidation function has calculation inaccuracies when retrieving max_liquidable_collateral and max_liquidable_debt. These calculation errors create exploitable opportunities for attackers to profit from improper liquidation scenarios.


Accuracy Loss

Severity: High

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: In the claim_rewards function, amount_to_claim is incorrectly calculated, potentially resulting in 0 or unclaimable funds. The calculation should multiply before dividing to reduce accuracy loss.


Incorrect Calculation in amount_to_claim in claim function

Severity: High

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: A calculation error in the condition for amount_to_claim in the claim function causes incorrect reward amounts to be claimed.


Overflow Risk in i64::sub

Severity: High

Ecosystem: Sui

Protocol: Typus Finance

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Typus-Finance-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: The i64::sub operation has an overflow risk, potentially causing unexpected behavior or contract failure.


Improper Reward Calculations in reward_distributor.move

Severity: High

Ecosystem: Unknown

Protocol: Project Zenith

Auditor: MoveJay

Report: https://github.com/Jayfromthe13th/Project-Z-Security-Audit-Report/blob/Wallet/audit.md

Report Date: Mar 2024

Description: The accumulated_gain function inaccurately calculates token earnings, neglecting contributions to subsequent scales, leading to incorrect reward distributions.


Incorrect next scaled variable debt update in liquidations leads to wrong interest rates

Severity: High

Ecosystem: Aptos

Protocol: AAVE v3.1-3.3 Core

Auditor: Spearbit

Report: https://github.com/aave/aptos-aave-v3/blob/main/audits/Spearbit%20Aave%20Aptos%20Core%20V3.1-V3.3%20Report.pdf

Report Date: June 2025

Description:

When liquidating and liquidation_logic::burn_debt_tokens is called, the debt_reserve_cache's scaled_variable_debt (debt token total supply) needs to be updated after the burn by setting it to the next_scaled_variable_debt variable.

However, the code currently sets the next borrow index (not scaled total supply) to the next_scaled_variable_debt value, which are different units, borrow index is in RAY (1e27), while next_scaled_variable_debt is in token units (usually 6-8 token decimals).


Dust amounts of high-value tokens can be stolen for profit due to rounding

Severity: High

Ecosystem: Aptos

Protocol: AAVE v3.0.2 Core

Auditor: Spearbit

Report: https://github.com/aave/aptos-aave-v3/blob/main/audits/Spearbit%20Aave%20Aptos%20Core%20V3.0.2%20Report.pdf

Report Date: June 2025

Description:

The mint and burn actions for the aToken and vToken use the same rounding direction to convert between (rebased) amounts and the scaled amounts, rounding "half-up":

let amount_scaled = wad_ray_math::ray_div(amount, index);

This can be abused to extract tokens from the protocol.


Users may lose all rewards because of the precision loss

Severity: High

Ecosystem: Aptos

Protocol: AAVE V3

Auditor: Cantina Contest SRs

Report: https://cantina.xyz/code/ad445d42-9d39-4bcf-becb-0c6c8689b767/findings/19

Report Date: May 2025

Description:

In function calculate_asset_index_internal, we will calculate the reward rate per scale amount for the latest time slot.

The formula we use is emission_per_second * time_delta * asset_unit / total_supply. Here the asset unit depends on the underlying asset's decimal. For example, if the underlying asset is USDC, then the asset_unit is 1e6. Here the asset_unit is used as the precision decimal.

The problem here is that the precision decimal is not enough, and the formula's result may be round down to 0. If the reward rate per scale amount is 0, then all users will lose their rewards.


Precision factor is not precise enough

Severity: High

Ecosystem: Aptos

Protocol: PancakeSwap

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/PancakeSwap%20Aptos%20-%20Zellic%20Audit%20Report.pdf

Report Date: Nov 2022

Description:

The precision_factor used to avoid division precision errors is not large enough to mitigate truncation to zero errors.


Potential overflow in the add_reward function

Severity: High

Ecosystem: Aptos

Protocol: PancakeSwap

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/PancakeSwap%20Aptos%20-%20Zellic%20Audit%20Report.pdf

Report Date: Nov 2022

Description:

In the add_rewards function there is an assert that may cause an overflow by multiplying two u64 values.


Updating Magnified Dividends Per Share during Unstaking is Incorrect

Severity: High

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

Wwhen users unstake, the protocol also updates the magnified dividends per share. The calculation involves adding ((amount as u128) * pool_info.precision_factor / (pool_info.staked_tokens as u128)) to the original per share x or per share y values.

This is incorrect, as it causes the pool_info.magnified_dividends_per_share_x or pool_info.magnified_dividends_per_share_y values to increase without actual rewards being distributed to the rewards pool.


When Calculating Fees for Token Info Y Only, There is An Incorrect Passing of rewards_coins

Severity: High

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

rewards_coins is extracted from metadata.balance_y, but when calling the update_pool() function, it passes these rewards coins to reward_x,causing confusion in calculation logic.


Unstrict Swap Invariant

Severity: High

Ecosystem: Aptos

Protocol: Pontem (Liquidswap)

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Sep 2022

Description:

When dealing with an uncorrelated curve, the program introduced an error by reporting an incorrect swap if the lp_value after the swap is strictly smaller than the lp_value before the swap. The swap should be valid only when the value after is greater than the value before. Otherwise, swapping would be able to exploit potential rounding errors, depending on the precision of the relevant curves.


Improper Calculation in Liquidation

Severity: High

Ecosystem: Aptos

Protocol: Aries Markets

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Nov 2022

Description:

In the else case of the liquidation function, the settle_share_amount should be calculated from the repay_amount using the get_share_amount_from_borrow_amount function. Instead, the repay amount is directly returned as the settle share amount.


Improper Reward Calculations

Severity: High

Ecosystem: Aptos

Protocol: Thala Labs

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2023

Description:

In the protocol module, accumulated_gain calculates the earnings of a token based solely on the scale of the snapshot. However, it is possible for a user’s amount to have participated in the distribution of the next scale as well. As a result, the failure to account for this may lead to incorrect calculations of token earnings.


Improper Reward Calculations

Severity: High

Ecosystem: Aptos

Protocol: Thala

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description:

In the protocol module, accumulated_gain calculates the earnings of a token solely based on the scale of the snapshot. However, a user’s amount may have participated in the distribution of the subsequent scale as well. As a result, the failure to account for this may lead to incorrect calculations of token earnings.


Utilization Of Unsuitable Rounding Direction

Severity: High

Ecosystem: Aptos

Protocol: Meso Lending

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: July 2024

Description:

When calculate_shares performs a floor rounding (rounding down) in share calculations in borrow_internal and withdraw , the user may end up with fewer debt shares than they are entitled to, resulting in them owing more assets than the value represented by their shares. As a result, users will effectively earn funds for free because they are receiving fewer debt shares for their borrowings. The pool’s total debt increases without the user receiving proportional debt shares.


Abort Due to Underflow in Difference Calculation

Severity: High

Ecosystem: Aptos

Protocol: Aptos Securitize

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

In get_compliance_transferable_tokens_deposit and get_compliance_transferable_tokens within compliance_service , difference is calculated as time - lock_time without first checking if time is greater than or equal to lock_time . If lock_time exceeds time , the subtraction operation ( time - lock_time ) will result in an underflow, causing the program to abort.

Medium Findings


Miscalculation Due to Negative Withdrawal Amount

Severity: Medium

Ecosystem: Sui

Protocol: Aftermath

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Jan 2025

Description:

Negative p/l on a short position will cause amount_to_withdraw to be negative.


Risk of Negative Margin Calculation

Severity: Medium

Ecosystem: Sui

Protocol: Aftermath

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Jan 2025

Description:

May return negative margin causing issues in vault.


Assertion Failure Due to Rounding

Severity: Medium

Ecosystem: Sui

Protocol: Solend Steamm

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description:

Due to the presence of roundings during the conversion between cTokens and underlying tokens, the product of ctoken_amount and the deployed funds often exceeds the product of the bank’s total CTokens and recalled amount, failing the assertion check and resulting in frequent aborts.


Division by Zero in Committee Selection

Severity: Medium

Ecosystem: Sui

Protocol: Walrus Contracts

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description:

In staking_inner::select_committee_and_calculate_votes, a division by zero may occur when calculating capacity_vote if weight is zero, as the calculation of capacity_vote divides the product of node_capacity and the number of shards with weight.


Abort via Large Node Capacity Value

Severity: Medium

Ecosystem: Sui

Protocol: Walrus Contracts

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description:

Overflow in capacity_vote calculation caused by maliciously set node_capacity.


Utilization of Incorrect Commission Rate

Severity: Medium

Ecosystem: Sui

Protocol: Walrus Contracts

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description:

The updated commission rate is intended for future epochs and not for the current epoch. Thus, it will result in an incorrect calculation of the operator’s commission.


Possible Overflow Due to Exceeding the Type Limit

Severity: Medium

Ecosystem: Sui

Protocol: Mysten Republic Security Token

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Apr 2025

Description:

Specifically, when multiplying two large u64 values, such as self.total_funds and snapshot.address_balance(addr), the result may exceed the maximum value for u64, resulting in an overflow.


Fee Accounting Inconsistency

Severity: Medium

Ecosystem: Sui

Protocol: Mysten Deepbook V3

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Apr 2025

Description:

When the user chooses to pay the fee in DEEP, deep_quantity is calculated from fee_quantity. However, if deep_quantity turns out to be 0, the fee may be incorrectly calculated in base or quote instead, resulting in the fee being paid in a way that does not match the user’s intention.


Share Price Inflation

Severity: Medium

Ecosystem: Sui

Protocol: BlueFin

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2024

Description:

In withdraw_from_vault, when a user withdraws funds, the share count vault.total_shares is appropriately reduced. However, a critical vulnerability arises as no corresponding adjustment occurs to vault_total_balance. Although vault_total_balance is calculated based on the current vault balance, it fails to account for the reduced shares resulting from the withdrawal. Consequently, the share price may experience temporary inflation, given that vault_total_balance remains unchanged despite the reduction in total shares.


Price Manipulation

Severity: Medium

Ecosystem: Sui

Protocol: Aftermath Orderbook

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2024

Description:

Currently, during the calculation of premium_twap and spread_twap, lip_max_book_index_spread confines the book_price within a range of plus five to negative five percent of the index_price. Nevertheless, it remains possible to influence the time-weighted average price by manipulating the mark_price within the same percentage range of the index_price.


Incorrectly Calculated Reward Period

Severity: Medium

Ecosystem: Sui

Protocol: Turbos

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2024

Description:

total_elapsed_time skipped if emission = 0.


Missing Tick Step Validation

Severity: Medium

Ecosystem: Sui

Protocol: Turbos

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2024

Description:

Overflow and abort since base_tick_step and limit_tick_step are user inputted.


Volume Overflow Risk

Severity: Medium

Ecosystem: Sui

Protocol: Mysten Deepbook

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Aug 2024

Description:

Self-trading and flash loans can cause overflow.


Improper Order Quantity Calculation

Severity: Medium

Ecosystem: Sui

Protocol: Mysten Deepbook

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Aug 2024

Description:

get_quantity_out and get_level2_range_and_ticks do not account for the remaining quantity of orders.


BigVector Size Overflow

Severity: Medium

Ecosystem: Sui

Protocol: Mysten Deepbook

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Aug 2024

Description:

This is especially relevant due to the Sui Move runtime’s limitation on maximum object size, which is 256000 bytes. If the leaf objects in the BigVector exceed this limit, the Move runtime will throw an error, preventing the order book from functioning correctly.


Prevention of Pool Closure Due to Rounding

Severity: Medium

Ecosystem: Sui

Protocol: Hop Aggregator

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

max_amount_in and amount_out round down. Pool could remain in OPEN state, even though empty.


Withdrawals from staking pools may result in rounding errors, which results in lost rewards

Severity: Medium

Ecosystem: Sui

Protocol: Mysten Labs Sui

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description:

Rounding down issue, if user attempts to withdraw small number of tokens, could round down to nothing.


Precision Loss In Redistribution

Severity: Medium

Ecosystem: Sui

Protocol: Bucket

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: June 2023

Description:

Since the accumulators are not factored by some value, directly dividing the collateral and debt amounts with total stake leads to less precise rounded-down values, which the accumulators add and lead to imprecise accumulation.


Improper Tank Value Update

Severity: Medium

Ecosystem: Sui

Protocol: Bucket

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: June 2023

Description:

start_s and start_g incorrectly updated.


Overflow In Calculation Of Delta A

Severity: Medium

Ecosystem: Aptos

Protocol: Cetus

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Jan 2023

Description:

The numberator value is not validated before running u256::shlw on it. As a result, the non-zero bytes might be removed, which leads to an incorrect calculation of the value.


Precision Loss Issue In Weighted Math

Severity: Medium

Ecosystem: Aptos

Protocol: Thala Labs

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2023

Description:

In the math module, the calculation of the amount taken in during a swap is based on the amount given out, the balances in the pool, and the weights of the assets. calc_in_given_out_internal is responsible for this calculation, which involves using log_exp_math::pow to perform the required exponentiation. log_exp_math::pow used by calc_in_given_out_internal is vulnerable to precision errors, which may return incorrect values. For instance, the function may incorrectly calculate 1.0000000002 ** 1 = 1.0. This precision issue can be exploited in calc_in_given_out_internal, leading to a return value of zero despite a non-zero amount_out value.


Improper Price Deviation Calculation Formula

Severity: Medium

Ecosystem: Aptos

Protocol: Thala Labs

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2023

Description:

get_price_diff_ is responsible for computing price deviation. However, to calculate the percentage of price deviation, the formula should be (diff(new_price, old_price) / old_price) * 100. The current implementation uses new_price as the denominator if new_price > old_price. Use b (old_price) as the denominator in both cases.


Including Interest In Vault CR Calculation

Severity: Medium

Ecosystem: Aptos

Protocol: Thala Labs

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2023

Description:

redeem_collateral and liquidate calculate the collateral ratio (CR) for a vault, however CR is calculated without considering the vault.interest, leading to the use of an incorrect CR value in other calculations.


Incorrect Withdraw Fee Calculation On Update

Severity: Medium

Ecosystem: Aptos

Protocol: Steamflow

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Mar 2023

Description:

In protocol::update, the change in the amount_per_period triggers an additional fee calculation using withdrawal_fees based on contract.start. However, using the start time for fee calculation results in the fee being recalculated for the period.


Improper Fee Amount Calculation With Zero Fees

Severity: Medium

Ecosystem: Aptos

Protocol: Steamflow

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Mar 2023

Description:

protocol::fee_amount is used to calculate the fee for a given amount using the input parameter fees as basis points (bps). However, the case of fees == 0 incorrectly returns the total amount as the fee. Instead, the function should check for fees == 10000 to return the total amount as the fee correctly.


Precision Loss Issue In Weighted Math

Severity: Medium

Ecosystem: Aptos

Protocol: Thala

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description:

log_exp_math::pow used by calc_in_given_out_internal is vulnerable to precision errors, which may return incorrect values.


Improper Price Deviation Calculation Formula

Severity: Medium

Ecosystem: Aptos

Protocol: Thala

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description:

get_price_diff_ is responsible for computing price deviation. However, to calculate the percentage of price deviation, the formula should be (diff(new_price, old_price) / old_price) * 100. The current implementation uses new_price as the denominator if new_price > old_price. Use b (old_price) as the denominator in both cases.


Including Interest In Vault CR Calculation

Severity: Medium

Ecosystem: Aptos

Protocol: Thala

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description:

These functions do not account for the updated interest of the vault when calculating the CR. As a result, the CR is calculated without considering the vault.interest, leading to the use of an incorrect CR value in other calculations.


Incorrect Liquidity Calculation

Severity: Medium

Ecosystem: Aptos

Protocol: Aries Markets

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2024

Description:

The issue in get_borrow_rate may result in miscalculated utilization ratios and lower interest rates for borrowers than intended. The function currently calculates total_liquidity by adding the reserve_amount (unborrowed reserve funds) to the sum of total_borrowed and decimal::from_u128(total_cash), which is incorrect. The utilization ratio is calculated by dividing total_borrowed by total_liquidity. With the incorrect calculation, the total_liquidity is overestimated because the reserve_amount is added instead of subtracted, lowering the utilization ratio.


Removal Of Incorrect Debt Shares

Severity: Medium

Ecosystem: Aptos

Protocol: Meso Lending

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: July 2023

Description:

In lending_pool, DUST_THRESHOLD is utilized to completely remove any position with remaining shares less than DUST_THRESHOLD. Consequently, when a user’s remaining debt shares fall below the DUST_THRESHOLD in repay, the function completely removes the user’s debt shares (as shown in the code snippet below). This removal effectively cancels any remaining debt the user has, resulting in a potential giveaway of free money, since the user no longer owes anything even though they might have an outstanding debt.


Interest Accrual Mismatch

Severity: Medium

Ecosystem: Aptos

Protocol: Meso Lending

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: July 2023

Description:

If the user deposits the repayment into a different pool via deposit_internal, interest is not accrued for the repayment pool before the deposit is made, as highlighted in the code below. This results in an inconsistent state because, while the borrowing pool’s state is updated to reflect the most recent accrued interest, the repayment pool’s state may not reflect the most recent accrued interest since accrue_interest is not called for this pool in end_flashloan.


Inconsistency In Debt Repaid And Collateral Seized

Severity: Medium

Ecosystem: Aptos

Protocol: Meso Lending

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: July 2023

Description:

During liquidation, the liquidator specifies the repayment amount to be repaid on behalf of the liquidatee, and a fungible asset of that amount is provided as an argument to repay. repay utilizes calculate_shares to determine the exact number of shares to repay, rounding down in cases of non-perfect division. As a result, the liquidatee’s debt reduction may be less than the original fungible asset amount ( repaid_amount ). However, all subsequent calculations rely on the repaid_amount variable to determine the number of shares transferred from the liquidatee to the liquidator.


Investor Limit Calculation Error

Severity: Medium

Ecosystem: Aptos

Protocol: Aptos Securitize

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

max_us_investors_percentage is not considered when calculating the U.S. investors’ limit. The U.S. investors’ limit is intended to restrict the percentage of U.S. investors relative to the total number of investors. Not incorporating the max_us_investors_percentage implies that the actual cap on U.S. investors may exceed the intended compliance threshold


Rounding Error in Delegation Pool

Severity: Medium

Ecosystem: Aptos

Protocol: Kofi Finance Contacts

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2025

Description:

The majority of delegation_pool operations contain small rounding errors that affect delegators. When unlocking stake (undelegating) from a delegation pool, the amount unlocked may be slightly less than the requested amount. Similarly, during staking, users deposit a specific amount of APT in exchange for a calculated number of shares, but due to rounding during the conversion, the actual stake increase may be slightly less than the input amount. For example, a user may delegate x APT , but only x-1 APT is effectively staked.


The Value of 0 for Both States

Severity: Medium

Ecosystem: Sui

Protocol: ABEx Labs

Auditor: MoveBit

Report: https://movebit.xyz/reports/Abex-Smart-Contract-Audit-Report.pdf

Report Date: Aug 2023

Description:

When the result of a calculation is 0, the state of the returned sRate is negative, which may result in two states of 0, positive 0 and negative 0. The same problem exists for add and sub. The same applies to sdecimal.


Collateral may be insufficient when repaying

Severity: Medium

Ecosystem: Sui

Protocol: Bucket Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Bucket-Protocol-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description:

When calling record_repay_capped, amount of collateral calculated for repay may exceed collateral_amount. This results in bottle.collateral_amount is less than the returned amount of collateral return_sui_amount.


Incorrect Data in Event

Severity: Medium

Ecosystem: Sui

Protocol: Turbos Finance-TurboStar

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/TurboStar-Smart-Contract-Audit-Report.pdf

Report Date: May 2023

Description:

Calculation error in claim function, quantity is always 0.


Calculation Formula Error

Severity: Medium

Ecosystem: Sui

Protocol: Typus Finance

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Typus-Finance-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

delivery_value_per_unit is expressed as delivery_price * o_token precision and then divides the precision of b_token. When L304 calculates delivery_value, the precision of b_token is divided, resulting in a logic error.


Timelock overflow in Default Maven struct

Severity: Medium

Ecosystem: Sui

Protocol: MSafe Maven

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Maven-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

If no other operations are created through operation, time lock = MAX_U64. If proposal is initiated at this time and approved, calling start_permission_recovery > order_timelock::start_timelock_order > timelock::new will cause an overflow and crash.


Sqrt function precision error

Severity: Medium

Ecosystem: Sui

Protocol: Sui AMM Swap

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Sui-AMM-swap-Contracts-Audit-Report.pdf

Report Date: Nov 2022

Description:

Incorrect calculation on add_liquidity function. Lp tokens should be square root of the multiplication of two tokens, but current code takes the square first, then multiplying.


Calculation of reward and point May Be Inaccurate

Severity: Medium

Ecosystem: Sui

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Sui-Contract-Audit-Report.pdf

Report Date: Mar 2023

Description:

pool::collect_reward, pool::calculate_and_update_rewards, and pool::calculate_and_update_points do not recaculate rewards except in some special cases. This can lead to inaccurate reward and point calculations.


Early withdrawal penalty bypass by chunking withdrawal amount

Severity: Medium

Ecosystem: Aptos

Protocol: Propbase

Auditor: Hacken

Report: https://hacken.io/audits/propbase/sca-propbase-staking-feb2024/

Report Date: Feb 2024

Description:

The Propbase protocol uses $PROPS token for staking operations. The protocol distributes staking rewards as $PROPS to stakeholders. In addition, admin of the protocol sets a penalty_rate during the pool creation. The penalty rate amount can be set between 1 and 50. The purpose of this variable is to penalize early withdrawals.

The penalty calculation can be seen at below:

let penalty = amount / 100 * stake_pool_config.penalty_rate;

Currently, there is no lower bound for withdraw amount in the code. Therefore, it is possible to chunk the total withdraw amount by 99 in order to bypass this penalty according to the formula above.

let penalty = 99 / 100 * stake_pool_config.penalty_rate (0-50);
penalty = 0;

As a result, it is possible to bypass the early withdrawal penalty due to this precision loss.


Incorrect Fee Calculation in Quoter Function Leads to Underestimated Input Amounts

Severity: Medium

Ecosystem: Sui

Protocol: Magma DEX

Auditor: Three Sigma

Report: https://cdn.sanity.io/files/qoqld077/staging/9566473c444a6cfd99c7a6556fa4857950b41de3.pdf

Report Date: July 2025

Description:

The almm_pair::get_swap_in function serves as a quoter function that calculates the required input amount for a given output amount in the ALMM protocol. This function is critical for frontend applications to provide accurate swap quotes and enable proper slippage calculations. The function iterates through bins to calculate the total input amount needed for a desired output. For each bin, it calculates amount_in_without_fee based on the bin's price and then adds the fee amount. However, the function incorrectly uses fee::get_fee_amount_from instead of fee::get_fee_amount for fee calculations.


Unstaking from LP pools will cause underflow and lock user funds

Severity: Medium

Ecosystem: Initia

Protocol: Cabal Liquid Staking

Auditor: Code4Arena Contest Security Researchers

Report: https://code4rena.com/reports/2025-04-cabal-liquid-staking-token

Report Date: May 2025

Description:

If the last pool is empty or with insufficient funds an underflow will occur.


The liquidator will incur a loss when performing liquidationCall

Severity: Medium

Ecosystem: Aptos

Protocol: AAVE V3

Auditor: Cantina Contest SRs

Report: https://cantina.xyz/code/ad445d42-9d39-4bcf-becb-0c6c8689b767/findings/192

Report Date: Jun 2025

Description:

ccording to the Aave documentation, the liquidation_bonus must be above 100%.

However, the current calculations result in values below 100% :

(5 * math_utils::get_percentage_factor()) / 100*// (5 * 10000) / 100 = 500* (85 * math_utils::get_percentage_factor()) / 1000*// (85 * 10000) / 1000 = 850*

These values are far below the expected minimum of 10000 (which represents 100%). To be valid, the value must be greater than 10000.


Incorrect Calculation of share_proportion

Severity: Medium

Ecosystem: Aptos

Protocol: Echelon

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Echelon%20-%20Zellic%20Audit%20Report%20(January).pdf

Report Date: Jan 2025

Description:

asset_amounts * BPS_BASE / deposit_amounts will not properly calculate the percentage of the deposit. Currently, the number of users is divided by the total number of tokens, so the exact ratio is not calculated.


The operator can Evade The Fees When Loaning Assets

Severity: Medium

Ecosystem: Aptos

Protocol: Amnis

Auditor: MoveBit

Report: https://movebit.xyz/reports/Amnis-Final-Audit-Report.pdf

Report Date: Mar 2024

Description:

The function pegging.loan_apt() allows the operator to withdraw funds from the protocol, but a certain fee is required when returning the funds. The fee calculation is as follows: math64::mul_div(amount, pegging().loan_fee, BPS_MAX) According to the protocol configuration, we found that loan_fee is 10, and BPS_MAX is 10000. When amount * 10 < 10000 , users will not have to pay any fees. Therefore, the operator can repeatedly borrow 999 to avoid the fees. It is recommended to set a minimum loan amount or to check if the fee is 0, in which case borrowing assets should not be allowed.


Rounding Errors Handling Is Not Best Practice

Severity: Medium

Ecosystem: Aptos

Protocol: Superposition

Auditor: MoveBit

Report: https://movebit.xyz/reports/Superposition-Final-Audit-Report.pdf

Report Date: Mar 2024

Description:

In both borrow and repay functions, a rounding handling increases amount by one. However, this brutal force method is not a good practice since it may add one extra layer to the rounding (if it is already rounded up).


Assert condition is not accurate

Severity: Medium

Ecosystem: Aptos

Protocol: Aries Market

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Aries-Market-Contracts-Audit-Report.pdf

Description:

In decimal.move, an assert is provided to prevent overflow, but the conditions are not strict and U64_MAX * U64_MAX does not equal U128_MAX.

Improper Rounding

Severity: Medium

Ecosystem: Sui

Protocol: Cetus DLMM

Auditor: OtterSec

Report: https://drive.google.com/drive/u/0/folders/1d9nv3nJidsbQ0vDT8D1kEuR3rJzK2ULg

Report Date: Nov 2025

Description:

The calculation of delta_liquidity_share in bin::increase_liquidity utilizes floor division, which may round down small values to zero. This implies that users depositing small token amounts may not receive any liquidity shares, effectively losing their deposited funds.


Arithmetic Precision Errors

Severity: Medium

Ecosystem: Binance Smart Chain

Protocol: AquaSwap

Auditor: MoveJay

Report: https://github.com/Jayfromthe13th/AuquaSwap-Audit-/blob/Wallet/Audit%20report.md

Report Date: 2024

Description:

The calculate_protocol_fees function rounds down to zero for small order sizes, allowing users to bypass fees.


Arithmetic Errors – Overflow

Severity: Medium

Ecosystem: Binance Smart Chain

Protocol: AquaSwap

Auditor: MoveJay

Report: https://github.com/Jayfromthe13th/AuquaSwap-Audit-/blob/Wallet/Audit%20report.md

Report Date: 2024

Description:

Susceptibility to overflow errors can cause denial of service in various functions.

Centralization Risk - Overview

Single points of control (e.g., owner-only functions) that undermine decentralization or enable abuse.

Centralization RiskFindings
High8
Medium8
Total16

High Findings


BKT Token Centralization Risk

Severity: High

Ecosystem: Sui

Protocol: Bucket

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Bucket-Protocol-Smart-Contract-Audit-Report.pdf

Report Date: June 2023

Description:

The allocate_bkt function has too much authority and can be locked up by anyone, in any amount, and at any time, which creates a risk of centralization.

Recommendation:

Manage BktAdminCap with multi-signature account to mitigate the risk.


Centralization Risk (Aftermath Finance)

Severity: High

Ecosystem: Sui

Protocol: Aftermath Finance LSD

Auditor: MoveBit

Report: https://movebit.xyz/reports/Aftermath-Finance-Liquid-Staking-Derivative-Audit-Report.pdf

Report Date: Nov 2023

Description:

The admin account holds multiple powerful permissions. If compromised, an attacker could manipulate the protocol or its assets. See the full report for a detailed list of admin capabilities.


Centralization Risk (KunaLabs)

Severity: High

Ecosystem: Sui

Protocol: KunaLabs Yield Optimizer

Auditor: MoveBit

Report: https://movebit.xyz/reports/Yield-Optimizer-Final-Audit-Report.pdf

Report Date: Nov 2023

Description:

The admin account holds multiple powerful permissions. If compromised, an attacker could manipulate the protocol or its assets. See the full report for a detailed list of admin capabilities.


Centralization Risk (Scallop)

Severity: High

Ecosystem: Sui

Protocol: Scallop

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Scallop-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description:

The admin account holds multiple powerful permissions. If compromised, an attacker could manipulate the protocol or its assets. See the full report for a detailed list of admin capabilities.


Centralization Risk (Lucky Kat)

Severity: High

Ecosystem: Sui

Protocol: Lucky Kat

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/LuckyKat-Koban-Smart-Contract-Audit-Report.pdf

Report Date: May 2023

Description:

There is a centralization risk with privileged accounts able to mint unlimited tokens and burn their token.

Recommendation:

Multi-signature accounts should be set as privileged accounts.


Centralization Risk (Suia)

Severity: High

Ecosystem: Sui

Protocol: Suia

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Suia-Smart-Contract-Audit-Report.pdf

Report Date: May 2023

Description:

There is a centralization risk with privileged accounts able to mint unlimited tokens and burn their token.

Recommendation:

Multi-signature accounts should be set as privileged accounts.


Centralization Risk (Volo)

Severity: High

Ecosystem: Sui

Protocol: Volo

Auditor: MoveBit

Report: https://movebit.xyz/reports/Volo-Smart-Contract-Audit-Report.pdf

Report Date: Sep 2023

Description:

There are some risks of centralization in the contract, the admin can set the total_rewards of the NativePool, which will result in a change in the rate calculation of the contract.


Centralization Risk

Severity: High

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

Excessive admin privileges create a single point of failure; system security heavily depends on the admin’s integrity and key safety.

Medium Findings


Admin Privilege Abuse (Centralization Risk)

Severity: Medium

Ecosystem: Sui

Protocol: MoviePass Exchange -MSX Smart Contracts

Auditor: Certora

Report: https://github.com/Certora/SecurityReports/blob/main/Reports/2025/03_02_2025_MoviePass_MSX-MR.pdf

Report Date: Feb 2025

Description:

Admin can control any user’s custodial pool, posing a serious risk if the admin account is compromised.


Oracle Centralization Risk

Severity: Medium

Ecosystem: Sui

Protocol: Typus Finance

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Typus-Finance-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

All prices rely on typus_oracle::oracle; if its private key is compromised, attackers could manipulate prices. Mitigation: use a multisig-controlled oracle, verify return values, or integrate a trusted third-party oracle.


Centralization Risk

Severity: Medium

Ecosystem: Sui

Protocol: Navi

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Navi-Smart-Contract-Audit-Report.pdf

Report Date: July 2023

Description:

Multiple admin functions present centralization risk; acknowledged and mitigated by adopting a multi-sig wallet.


Centralization Risk

Severity: Medium

Ecosystem: Sui

Protocol: Aries Market

Auditor: MoveBit

Report:

Report Date: June 2023

Description:

Single immutable admin account poses centralization risk; recommend replacing with a multi-sig account.


Excessive Priviledge Concentration

Severity: Medium

Ecosystem: Aptos

Protocol: Yeap Finance

Auditor: SlowMist

Report: https://github.com/slowmist/Knowledge-Base/blob/master/open-report-V2/smart-contract/aptos-smart-contract/yeap-finance%20-%20SlowMist%20Audit%20Report.pdf

Report Date: July 2025

Description:

A single governance entity holds nearly unlimited permissions and can arbitrarily modify key protocol parameters, lacking effective checks and balances.


Excessive Administrator Privileges in update_team_reward Function

Severity: Medium

Ecosystem: Aptos

Protocol: TokimonsterAI

Auditor: ExVul

Report: https://github.com/ExVul-Sec/AuditReport/blob/main/Smartcontract/TokimonsterAI%20Smarat%20Contract%20Audit%20Report-Exvul.pdf

Report Date: May 2025

Description:

The update_team_reward function allows unrestricted admin control to change the team_reward parameter at any time.


Centralization Risk

Severity: Medium

Ecosystem: Aptos

Protocol: Thala Labs Aptos Dollar

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Thala%20Labs%20Move%20Dollar%20-%20Zellic%20Audit%20Report.pdf

Report Date: Oct 2022

Description:

Protocol managers can control oracle price, initialize vaults and CoinTypes used in protocol, and control the minimum collateralization ratio and redemption fees.


The admin account can freeze any user’s account

Severity: Medium

Ecosystem: Aptos

Protocol: AptoPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/AptoPad-Aptos-Contracts-Audit-Report.pdf

Report Date: Feb 2023

Description:

Admin can block withdrawals and transfers of APD coins, granting excessive control and creating a significant centralization risk.


Cross Implementation - Overview

Inconsistencies between contract versions or mirrored implementations causing unexpected outcomes.

Cross-ImplementationFindings
Medium2
Total2

Medium Findings


collector and AToken treasury incompatibilities

Severity: Medium

Ecosystem: Aptos

Protocol: AAVE Periphery

Auditor: Spearbit

Report: https://github.com/aave/aptos-aave-v3/blob/main/audits/Spearbit%20Aave%20Aptos%20Core%20V3.1-V3.3%20Report.pdf

Report Date: Jun 2025

Description:

A few different design issues in the collector.move module compared to the Solidity contracts.


GHO is misconfigured in Aptos Deployment

Severity: Medium

Ecosystem: Aptos

Protocol: AAVE Core

Auditor: Spearbit

Report: https://github.com/aave/aptos-aave-v3/blob/main/audits/Spearbit%20Aave%20Aptos%20Periphery%20V3.0.2%20Report.pdf

Report Date: Jun 2025

Description:

Solidity vs Move design issues in interest rate strategy.

Constant Definition - Overview

Hardcoded constants or misconfigured parameters leading to misbehavior or rigid protocol design.

Constant DefinitionFindings
Critical2
High1
Medium4
Total7

Critical Findings


Faulty Constant Definition

Severity: Critical

Ecosystem: Sui

Protocol: Bluefin Spot

Auditor: OtterSec

Report: https://www.notion.so/a296e98838aa4fdb8f3b192663400772

Report Date: Nov 2024

Description:

The MAX_u64 constant is incorrectly defined as 0xFFFFFFFFFFFFFFF (15 characters) instead of 0xFFFFFFFFFFFFFFFF (16 characters). This omission causes errors in tick calculations by ignoring the most significant bit.


DefaultBidPercentage Misconfiguration

Severity: Critical

Ecosystem: Sui

Protocol: MoviePass Exchange

Auditor: Certora

Report: https://github.com/Certora/SecurityReports/blob/main/Reports/2025/03_02_2025_MoviePass_MSX-MR.pdf

Report Date: Feb 2025

Description:

The DefaultBidPercentage constant is incorrectly set to 10_000 instead of 1_000_000, causing the maximum bid rate to be misconfigured and potentially allowing unexpected bid behaviors.


High Findings


Incorrect Variable Assignment

Severity: High

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

In is_whitelist_phase, the one_day constant is incorrectly set to 0 instead of 24*60*60*1000. This causes the calculation campaign.sale_start - one_day > clock::timestamp_ms(clock) to be incorrect, potentially allowing whitelist phase logic to fail.

Medium Findings


nonce is Always 0

Severity: Medium

Ecosystem: Aptos

Protocol: MoveGPT

Auditor: MoveBit

Report: https://movebit.xyz/reports/MoveGPT-Final-Audit-Report.pdf

Report Date: Apr 2024

Description:

The nonce string value added to the signature in the buy function is always 0 and there is no place to change it. It is recommended not to use hard-coded.


Wrong value hardcoded in TOTAL_SUPPLY leads to too few minted tokens

Severity: Medium

Ecosystem: Sui

Protocol: Zesh AI

Auditor: Hacken

Report: https://hacken.io/audits/zesh-ai-layer/sca-zesh-ai-layer-zesh-coin-dec2024/

Report Date: Dec 2024

Description:

Harded coded token supply set to 1000 instead of 1 billion, as token uses 6 decimals. const TOTAL_SUPPLY: u64 = 1_000_000_000


Unused Constant

Severity: Medium

Ecosystem: Sui

Protocol: Scallop

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Scallop-Smart-Contract-Audit-Report.pdf

Report Date: June 2023

Description:

Certain variables not referenced or used in any of the contract.


MIN_BASE_MAX_CLOSE_FACTOR_THRESHOLD has outdated value

Severity: Medium

Ecosystem: Aptos

Protocol: AAVE v3.0.2 Core

Auditor: Spearbit

Report: https://github.com/aave/aptos-aave-v3/blob/main/audits/Spearbit%20Aave%20Aptos%20Core%20V3.0.2%20Report.pdf

Report Date: June 2025

Description:

Incorrect constant.

Data Inconsistency - Overview

Desynchronized or outdated state across contracts or storage variables breaking protocol invariants.

Data InconsistencyFindings
Critical2
High9
Medium6
Total17

Critical Findings


Token Identifier Collision

Severity: Critical

Ecosystem: OL Network

Protocol: StakeSphere

Auditor: MoveJay

Report: https://github.com/Jayfromthe13th/StakeSphere-stealth-/blob/Wallet/Audit.md

Report Date: Apr 2024

Description:

The get_pool_address function generates a unique address for a liquidity pool linked to trading pairs of fungible assets. This function creates and returns an address that uniquely identifies the liquidity pool for the specified pair of tokens. Users have the liberty to construct an Object using any symbol of their choice, which offers a great deal of flexibility. This flexibility, however, can lead to the creation of Object instances that closely resemble other existing instances. This situation might lead to a seed collision, which could subsequently cause a collision in the generation of the pool address.


Improper Implementation Of Positions

Severity: Critical

Ecosystem: Aptos

Protocol: Eternal Finance

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Jan 2023

Description:

In the bank.move module, the Position struct is utilized to store collateral share amounts and debts on a position. However, there exists an inconsistency in the implementation of positions between the bank.move and pancake_dex_worker.move modules. The bank module assumes that a position can manage the collateral and debts of multiple coins, whereas the worker module assumes that a position can only hold the collateral and debts for one coin pair. This inconsistency could result in the loss of funds.


High Findings


Invalid Calculations; Data Consistency

Severity: High

Ecosystem: Sui

Protocol: Volo

Auditor: Hacken

Report: https://hacken.io/audits/volo/sca-volo-liquid-staking-aug2023/

Report Date: Sep 2023

Description:

In the remove_stakes loop, the requested_amount is not updated after each withdrawal, potentially leading to over-withdrawals or inconsistent withdrawal tracking.


Requirements Violation; Data Consistency

Severity: High

Ecosystem: Sui

Protocol: Volo

Auditor: Hacken

Report: https://hacken.io/audits/volo/sca-volo-liquid-staking-aug2023/

Report Date: Sep 2023

Description:

The sort_validators function fails to consistently sort validators by priority. Extremely large priority values are placed at the beginning or middle of the array unpredictably, violating the intended descending order requirement.


Inconsistent Handling of reward_fee

Severity: High

Ecosystem: Sui

Protocol: Volo

Auditor: MoveBit

Report: https://movebit.xyz/reports/Volo-Smart-Contract-Audit-Report.pdf

Report Date: Oct 2023

Description:

In the update_rewards function, the total_rewards set by the set_rewards_unsafe function includes reward_fee, but in line 581 of the unstake_amount_from_validators function sub_rewards_unsafe(self, rewards - reward_fee) subtracts reward_fee.


Inconsistent Deduction Logic in remove_stakes Function

Severity: High

Ecosystem: Sui

Protocol: Volo

Auditor: MoveBit

Report: https://movebit.xyz/reports/Volo-Smart-Contract-Audit-Report.pdf

Report Date: Oct 2023

Description:

In the remove_stakes function, when the condition of L184 is not satisfied, the logic of L188-L191 will be executed. The value of requested_amount should be changed to requested_amount - principal_value. If the value of requested_amount is not updated, the actual amount withdrawn will be greater than requested_amount.


deposit Does Not Update User's Share If He Deposits Multiple Times

Severity: High

Ecosystem: Sui

Protocol: Random-Vault

Auditor: MoveBit

Report: https://movebit.xyz/reports/Random-Vault-Final-Audit-Report.pdf

Report Date: Feb 2024

Description:

When a user deposits multiple times, the contract updates round.total_share but fails to update the individual user’s share, leading to incorrect share accounting and potential loss of rewards.


token.start_p is not updated

Severity: High

Ecosystem: Sui

Protocol: Bucket

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Bucket-Protocol-Smart-Contract-Audit-Report.pdf

Report Date: June 2023

Description: After invoking claim_collateral, the start_p value remains unchanged. This can cause subsequent logic errors and inconsistencies in state-dependent calculations.


ReserveData not Updated

Severity: High

Ecosystem: Sui

Protocol: Navi

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Navi-Smart-Contract-Audit-Report.pdf

Report Date: July 2023

Description: In the execute_withdraw function, small remaining amounts after withdrawal are sent to the treasury, but the user’s asset data and reserve balance in ReserveData are not updated. This leads to calculation errors and data desynchronization across the protocol.


Position Rewarder Checkpoint is not updated when changing liquidity

Severity: High

Ecosystem: Sui

Protocol: Magma DEX

Auditor: Three Sigma

Report: https://cdn.sanity.io/files/qoqld077/staging/9566473c444a6cfd99c7a6556fa4857950b41de3.pdf

Report Date: July 2025

Description:

When adjusting liquidity (inc/dec), only the global fee growth is checkpointed. However, reward growth from the reward manager is initialized only once at position creation via position_info_load_rewarder_growth_from_bin and never updated afterward, causing incomplete reward accounting.


LP unstaking only burns the shares but leaves the underlying tokens in the system, which distorts the shares-to-tokens ratio and leads to incorrect amounts being calculated during staking and unstaking

Severity: High

Ecosystem: Initia

Protocol: Cabal Liquid Staking

Auditor: Code4Arena Contest Security Researchers

Report: https://code4rena.com/reports/2025-04-cabal-liquid-staking-token

Report Date: May 2025

Description:

When a user unstakes LP tokens, the corresponding shares (Cabal tokens) are burned. However, the actual undelegation from the validator will occur only after a delay of up to 3 days. During this period, the shares are already burned, but the underlying tokens are still included in shares-to-token conversions.

Medium Findings


Attacker Can Desynchronize Supply Snapshot During Same-Block Unstake, Reducing Everyone’s Rewards

Severity: Medium

Ecosystem: Initia

Protocol: Cabal Liquid Staking

Auditor: Code4Arena Contest Security Researchers

Report: https://code4rena.com/reports/2025-04-cabal-liquid-staking-token

Report Date: May 2025

Description:

An attacker holding Cabal LSTs (like sxINIT) can monitor the mempool for the manager’s voting_reward::snapshot() transaction. By submitting his own cabal::initiate_unstake transaction to execute in the same block (H) as the manager’s snapshot, the attacker can use two flaws: cabal_token::burn (called by their unstake) doesn’t update the supply snapshot for block H, leaving the recorded supply artificially high (pre-burn). cabal_token::check_snapshot skips recording the attacker’s own balance for block H. Later reward calculations use the stale high supply but retrieve the attacker’s now lower (post-burn) balance via fallback logic. This desynchronization causes the total calculated reward shares to be less than 100%, reducing the rewards paid out to all users for that cycle.


 LP Redelegation Uses Inaccurate Internal Tracker Amount, Leading to Potential Failures or Orphaned Funds

Severity: Medium

Ecosystem: Initia

Protocol: Cabal Liquid Staking

Auditor: Code4Arena Contest Security Researchers

Report: https://code4rena.com/reports/2025-04-cabal-liquid-staking-token

Report Date: May 2025

Description:

The redelegate_lp function, called during validator changes for LP pools, uses the internal pool.amount tracker to specify the amount for MsgBeginRedelegate. This tracker can diverge from the actual staked amount due to unreflected rewards or slashing, potentially causing redelegation failures or leaving funds staked with the old validator.


Desynchronization of Cabal’s internal accounting with actual staked INIT amounts leads to over-minting of sxINIT tokens

Severity: Medium

Ecosystem: Initia

Protocol: Cabal Liquid Staking

Auditor: Code4Arena Contest Security Researchers

Report: https://code4rena.com/reports/2025-04-cabal-liquid-staking-token

Report Date: May 2025

Description:

The Cabal Protocol’s implementation of compound_xinit_pool_rewards fails to synchronize the protocol’s internal accounting (m_store.staked_amounts) with the actual amount of INIT tokens staked in the underlying Initia staking system. This creates a vulnerability where external events like slashing penalties or validator-initiated actions that reduce the staked amount are not reflected in Cabal’s internal state.


Loss of funds due to address mappings are not cleaned up after domain expiry

Severity: Medium

Ecosystem: Initia

Protocol: Initia Move

Auditor: Code4Arena Contest Security Researchers

Report: https://code4rena.com/reports/2025-01-initia-move

Report Date: Apr 2025

Description:

The register_domain function doesn’t properly clean up old mappings (name_to_addr and addr_to_name) when a new user registers an expired domain. While it removes the old name_to_token mapping, it leaves the previous user’s address mappings.


Update magnified_dividends_per_share Values When staked_tokens Reaches Zero

Severity: Medium

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

When pool_info.staked_tokens reaches zero,the protocol fails to update pool_info.magnified_dividends_per_share_x and pool_info.magnified_dividends_per_share_y . This inconsistency results in a mismatch between the current state of pool_info and its initialized state.


Incorrect metadata used for deposit_stkapt function

Severity: Medium

Ecosystem: Aptos

Protocol: KoFi Finance

Auditor: MoveJay

Report: https://github.com/KofiFinance/audits/blob/main/Kofi%20Finance%20-%20Zenith%20Audit%20Report.pdf

Report Date: Mar 2025

Description:

In the deposit_stkapt function, the code incorrectly uses kAPT_coin::metadata() instead of stkAPT_coin::metadata() when creating/accessing the fungible store for stkAPT tokens. This mismatch between token type and metadata will cause deposits to fail. The function is supposed to deposit stkAPT tokens but is using kAPT metadata to identify the store.

Denial of Service (DoS) - Overview

Logic that can halt execution, lock funds, or make functions unusable.

DoSFindings
Critical1
High2
Medium24
Total27

Critical Findings


burn_from_bins_internal is subjected to DoS as we reset global liquidity when one bins liquidity goes to zero

Severity: Critical

Ecosystem: Sui

Protocol: Magma DEX

Auditor: Three Sigma

Report: https://cdn.sanity.io/files/qoqld077/staging/9566473c444a6cfd99c7a6556fa4857950b41de3.pdf

Report Date: July 2025

Description:

When burning liquidity we call burn_from_bins_internal. and we reset the global liquidity parameter to zero in case the reserve for the bins goes to zero or the supply of that bin goes to zero. Resetting liquidity at this case is not needed, it is actually incorrect, as this variable indicates the total liquidity in all bins. so falling one bin to zero does not mean the global liquidity goes to zero. And the problem is not just incorrect view function. In case this occur and another LP wanted to burn frmo his position from another bin, and the bin still has liquidity we will go to the else block which will do self.liquidity - liquidity_delta so it will endup in underflow error, reverting the tx and preventing the burning. Even the first check enforces the liquidity difference to be too small. so most of further burning process will end up at else block results in underflow and reverting the tx.

High Findings


NFT Token ID contains forbidden character by design which prevents any domain from being issued at all

Severity: High

Ecosystem: Initia

Protocol: Initia Move

Auditor: Code4Arena Contest Security Researchers

Report: https://code4rena.com/reports/2025-01-initia-move

Report Date: Apr 2025

Description:

The usernames module allows for registering a domain. This happens in function register_domain. On registration, a NFT is minted to the buyer, with field Token ID in format domain:timestamp. However the : character is forbidden by underlying nft.move module which is also the reason why original unit tests fail. Due to this, the protocol cannot be used in its current state, because no NFTs can be currently minted, thus, no domains can be claimed. Hence, this is equivalent to a permanent DoS.


Excessive rewards allocations leads to DoS

Severity: High

Ecosystem: Aptos

Protocol: PancakeSwap

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/PancakeSwap%20Aptos%20-%20Zellic%20Audit%20Report.pdf

Report Date: Nov 2022

Description:

Certain conditions may lead users having to save funds by calling emergnecy_withdraw, forfeiting their rewards.

Medium Findings


DoS Due to Surpassing of Event Limit

Severity: Medium

Ecosystem: Sui

Protocol: Aftermath

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Jan 2025

Description:

The max_num_event_emit sets a restriction on how many events may be emitted at a time. A vault owner may intentionally place multiple pending orders across various clearing houses, thereby accumulating a large number of events to be processed. If the number of events exceeds 1024, it will block the force withdrawal process.


Denial of Service via Mint Limit Exhaustion

Severity: Medium

Ecosystem: Sui

Protocol: Lombard

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description:

Swapping small amount of wrapped token for native multiple times can cause DOS.


DoS due to Excessive Gas Consumption

Severity: Medium

Ecosystem: Sui

Protocol: Lombard

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description:

Large number of small orders through max_computation_budget, blocks legitimate orders.


DoS due to Excessive Gas Consumption

Severity: Medium

Ecosystem: Sui

Protocol: Mysten Deepbook

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Aug 2024

Description:

Large number of small orders through max_computation_budget, blocks legitimate orders.


The owner of kiosk may block the user’s funds by calling set_allow_extension

Severity: Medium

Ecosystem: Sui

Protocol: Mysten Labs Sui

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description:

The current implementation may disallow the use of this function by calling set_allow_extensions with allow_extensions set to false. This may result in the locking of users’ funds that were transferred to the extension.


Denial Of Service & Inefficient Gas Model

Severity: Medium

Ecosystem: Sui

Protocol: Volo

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date:

Description:

native_pool can introduce a large number of validators with no upper limit causing other functions like sort to go through a large list of validators.


Unrestricted Validator Registration May Lead To DoS

Severity: Medium

Ecosystem: Aptos

Protocol: Ditto

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

Validators can join the Ditto protocol by invoking ditto_staking::add_validator. When the validator whitelist is disabled, there are no restrictions on validator entry. Each new validator occupies space in the ValidatorState table and ValidatorLockupBuffer stored on the @ditto_staking account. Many of the computations that interact with validator state run linear time algorithms over these structures and therefore require gas usage roughly linear to the number of validators. A malicious user could register a large number of fake validators in order to increase the usage of the associated validator tables and therefore increase the computation requirement on all subsequent instructions. In the worst case, a malicious user may be able to register enough validators to hit the computation limit and therefore prevent the protocol from operating entirely.


Potential DOS in delegation_service Pool

Severity: Medium

Ecosystem: Aptos

Protocol: Tortuga

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

In delegation_service, there is a hard limit on the number of direct delegators a pool can have: MAX_NUMBER_OF_DELEGATIONS (currently 100). A malicious user could fill the delegator list with fake delegators, staking small amounts in order to prevent real delegators from staking. In conjunction with OS-TOR-ADV-00, an attacker could bypass the min_delegation_amount and leave dust amounts in the pool, effectively making this attack free.


Lame Coin DOS

Severity: Medium

Ecosystem: Aptos

Protocol: Laminar Markets

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

In the stake::register_staking_account function, a duplicate call occurs when a new user tries to register a Lame coin. This would fail in the second register call (duplicated call), as the coin is already registered under the user in the first register call. This would cause a Denial of Service, as the new user will not be able to create a staking account.


Reverse Iterator DOS

Severity: Medium

Ecosystem: Aptos

Protocol: Laminar Markets

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

In the splay_tree::prev_node_idx function, the iterator traverses down to the left only when the left is not sentinel. In other cases, the check was made for the left node and matched against the right node. This will fail if the right node is a sentinel. The impact of having an improper iterator will make the order book inoperable; as these iterators are used across the order book to traverse and match the orders.


Remove Job DOS

Severity: Medium

Ecosystem: Aptos

Protocol: Switchboard

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Nov 2022

Description:

The function aggregator::remove_job skips the execution silently when the supplied job address doesn’t exist in aggregator_job_data. This should abort because when aggregator_remove_job_action::actuate calls this function and skips execution, the following call to decrement the job_ref_count will be reduced.The job_ref_count is used to keep track of number of references that a job has. So If a job gets added count increases and count decreases when removed. Abort if the supplied job doesn’t exist.


DOS While Removing Shares From Reserve

Severity: Medium

Ecosystem: Aptos

Protocol: Aries Markets

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Nov 2022

Description:

In profile.move, the try_subtract_profile_reward_share function checks whether the profile has a farm for that specific reserve type while subtracting shares from a profile farm. If a farm doesn’t exist, the reward for that reserve is created after the profile is created, so the function skips the subtraction of shares. This case is not handled while subtracting shares from the reserve farm in the reserve::try_remove_reserve_reward_share function. This leads to the subtraction of shares that were previously absent in the reserve.


Denial Of Service In Withdraw And Cancel

Severity: Medium

Ecosystem: Aptos

Protocol: Steamflow

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Mar 2023

Description:

In protocol, withdraw and cancel require transferring contract coins (X) to the recipient. If the recipient is not registered to the contract coin (X) and transfers are disabled, the amount becomes locked in the protocol. This may occur if the recipient’s address is lost or if the recipient’s address input is incorrect.


Denial Of Service While Vesting

Severity: Medium

Ecosystem: Aptos

Protocol: Thala

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description:

start_vesting in thl_vesting/farming_vesting.move initiates vesting when called by a user to begin vesting. It uses a smart table on vesting.claims to store the claims of the users. The length of the vesting.claims smart table is the claim ID for the current vesting. Claiming a claim removes the entry at the claim ID from the smart table, resulting in a decrease in the length of the smart table. Consequently, attempting to add a new claim causes a denial of service issue.


Potential Denial Of Service In Pool

Severity: Medium

Ecosystem: Aptos

Protocol: Tortuga

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: June 2023

Description:

In delegation_service, there is a hard limit on the number of direct delegators a pool may have: MAX_NUMBER_OF_DELEGATIONS, which currently equals 100. A malicious user may fill the delegator list with fake delegators, staking small amounts to prevent real delegators from staking. In conjunction with OS-TOR-PRO-01, an attacker may bypass the min_delegation_amount and leave dust amounts in the pool, effectively making a free exploit.


DOS Due to Blocking of Primary Store Creation

Severity: Medium

Ecosystem: Aptos

Protocol: Echelon

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Apr 2025

Description:

The vulnerability relates to the creation of a primary fungible asset store in new_reward_fa in the lending core (shown below) and isolated core farming modules. new_reward_fa tries to create a primary store for the asset at the package address utilizing create_primary_store , which does not check if a store already exists at the address before creating a new one.

Thus, primary_fungible_store::create_primary_store aborts if a primary store already exists at the address. As anyone may create a primary store at any address since it is permissionless, it enables an attacker to create a primary store for an asset at the package address. This action will block any subsequent attempts to add that address as a farming reward in both lending_core and isolated_lending farms.


Risk of Self-Dos

Severity: Medium

Ecosystem: Sui

Protocol: Volo

Auditor: MoveBit

Report: https://movebit.xyz/reports/Volo-Smart-Contract-Audit-Report.pdf

Report Date: Sep 2023

Description:

In line 199 of the remove_stakes function, it is necessary to deal with the situation that staked_sui_mut_ref - requested_amount is less than 1 Sui , otherwise it will cause self-dos.


Option params in CLI

Severity: Medium

Ecosystem: Sui

Protocol: Legend of Arcadia

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Legend-of-Arcadia-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description:

burn_request and update_metadata_request have Option type parameters. If these parameters cannot be passed in CLI, users cannot call functions, causing DOS on these functions.


DoS on Failed Transfer Operations on the Same Object

Severity: Medium

Ecosystem: Sui

Protocol: MSafe Maven

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Maven-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

Multiple transfer requests cause DoS as first transfer succeeds, other requests fail when execute_object_operation is called.


DoS from Privileged User where Permission has Single Signer Settings

Severity: Medium

Ecosystem: Sui

Protocol: MSafe Maven

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Maven-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

If proposer and approver are in same roles, the role only has one signer with the authority to vote on the propsal. This will cause execution queue to be blocked resulting in a DoS.


claim Function May Cause DOS Problems

Severity: Medium

Ecosystem: Aptos

Protocol: MoveGPT

Auditor: MoveBit

Report: https://movebit.xyz/reports/MoveGPT-Final-Audit-Report.pdf

Report Date: Apr 2024

Description:

In the claim function, when lock_amount is equal to round_config.balances, it will extract all the coins in round_config.balances , but by calculating the lock_amount may be less than round_config.balances, then the function will always fail when reaching the else branch to extract the lock_amount from balances.


Reentrancy Check in lock_staking::reentry_check Causes Concurrent INIT Deposit Failures (DOS)

Severity: Medium

Ecosystem: Initia

Protocol: Cabal Liquid Staking

Auditor: Code4Arena Contest Security Researchers

Report: https://code4rena.com/reports/2025-04-cabal-liquid-staking-token

Report Date: May 2025

Description:

The liquid staking protocol’s deposit_init_for_xinit function, which allows users to deposit INIT tokens to receive xINIT, is vulnerable to transaction failures when multiple users deposit concurrently in the same block. The function withdraws INIT tokens and delegates them to a validator via pool_router::add_stake, which triggers lock_staking::delegate. This, in turn, invokes reentry_check to prevent multiple delegations in the same block.

If a second user attempts to deposit in the same block as another, their transaction fails with error code 196618 (EREENTER), as reentry_check detects that the StakingAccount was already modified in the current block. This vulnerability disrupts users’ ability to participate in the protocol, particularly during periods of high transaction activity.


Unstaking calculates user share at request time, ignoring slashing — leading to DoS and unfair distribution

Severity: Medium

Ecosystem: Initia

Protocol: Cabal Liquid Staking

Auditor: Code4Arena Contest Security Researchers

Report: https://code4rena.com/reports/2025-04-cabal-liquid-staking-token

Report Date: May 2025

Description:

Users can stake both INIT and LP tokens into different validator pools by calling functions like deposit_init_for_xinit or stake_asset. To exit, users initiate an unstake via initiate_unstake, which starts an unbonding period. After this delay, they can claim their tokens through claim_unbonded_assets.

Behind the scenes, these staked assets are delegated to validators, and slashing may occur—meaning a portion of the delegated tokens could be penalized (burned). To stay accurate, the protocol uses pool_router::get_real_total_stakes to track the current delegated amount. However, the current unstaking flow doesn’t properly account for slashing events that may occur during the unbonding period.


DoS due Unbounded Rewards Map

Severity: Medium

Ecosystem: Aptos

Protocol: AAVE v3.1-3.3 Core

Auditor: OtterSec

Report: https://github.com/aave/aptos-aave-v3/blob/main/audits/Ottersec%20Aave%20Aptos%20V3.1-V3.3%20Report.pdf

Report Date: Aug 2025

Description:

The rewards_controller logic utilizes a SimpleMap to store users_data for each reward distribution. SimpleMap is implemented as a vector of key-value pairs, which implies that every insertion or lookup requires linear-time scanning of the vector. As this structure grows, its performance degrades, and operations that iterate over it may run out of gas. Specifically, in this case, every user is expected to maintain an entry in the map. As a result, the map is expected to grow indefinitely.

Since this is permissionless, a malicious actor may create many such entries by interacting with the pool repeatedly. Consequently, if the vector grows excessively, handle_action may start failing due to out-of-gas issues, as gas utilization for common operations such as mint, burn, supply, or liquidate may exceed the transaction limit, resulting in a denial-of-service scenario.

Front Running - Overview

Attackers exploit transaction ordering or mempool visibility to gain unfair advantage.

Front-runningFindings
High3
Medium2
Total5

High Findings


Frontrunning Matched Funds for Unfair Gains

Severity: High

Ecosystem: Aptos

Protocol: Emojicoin

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description:

There is potential for frontrunning when matching funds are allocated. This issue arises due to the way matched amounts are distributed. The emojicoin arena module features a mechanism where users may lock in a portion of their contribution to receive matched funds from the vault. An attacker may create a large number of pools with small amounts, increasing the likelihood that one of their pools is chosen during the crank scheduling. Before the crank selects a melee, the attacker may buy a large amount of their own token, driving up its price, inflating its value relative to other tokens in the pool. Consequently, if their pool is selected, they may then buy into the pool and swap out their tokens to capture the matched funds.


Wallet creation is vulnerable to front-running attacks

Severity: High

Ecosystem: Aptos

Protocol: Momentum Safe

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/MSafe%20-%20Zellic%20Audit%20Report.pdf

Report Date: Sep 2022

Description:

A malicious user can monitor the mempool for pending ini_wallet_creations transactions and block them by submitting transactions with a higher gas price that calls aptos_account::create_account(msafe_address). This is because msafe_address is directly readable from the mempool.


Potential front-running in orderbook create

Severity: High

Ecosystem: Aptos

Protocol: Laminar Markets

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Laminar%20-%20Zellic%20Audit%20Report.pdf

Report Date: Oct 2022

Description:

address and seed are trivial. Attacker can front-run book::create_orderbook by creating account at right address, causing a revert.

Medium Findings


Duplicate-order DoS via front-running deterministic order_id

Severity: Medium

Ecosystem: Sui

Protocol: Garden Move

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Garden%20Move%20Deploy%20-%20Zellic%20Audit%20Report.pdf

Report Date: May 2025

Description:

order_id is publicly visible — initiate_on_behalf lets anyone set order_id without verifying initiator ownership, allowing attackers to replay the transaction (e.g., with amount = 1) to trigger a DuplicateOrder error for the legitimate request.


Front-Running Pair/Market Creation

Severity: Medium

Ecosystem: Aptos

Protocol: Echelon

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Apr 2025

Description:

create_pair_with_jump_model in isolated_lending is responsible for creating a new lending pair with a jump interest rate model. However, it is vulnerable to front-running. An attacker may observe a pending pair creation and preemptively register their Aptos account to the to-be-created pair’s address before the pair is fully initialized. Similarly, in lending_core , create_market_with_jump_model_v2 , the market creation may be front-run with a call to register the Aptos account at the address of the market that it is going to be created, resulting in a denial-of-service scenario.

Gas Related Issues - Overview

Inefficient or unbounded gas use that increases costs or causes function failure.

Gas-related IssuesFindings
Medium11
Total11

Medium Findings


Dutch Gas Optimization

Severity: Medium

Ecosystem: Sui

Protocol: Typus Finance

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Typus-Finance-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

Recommended to merge coins together, then transfer to fee_pool_address.


Gas Optimization

Severity: Medium

Ecosystem: Sui

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Sui-Contract-Audit-Report.pdf

Report Date: Mar 2023

Description:

A while loop in position::is_empty can return false when the amount_owned of one of the vector elements is not 0. In addition, in the return value && expression, there is no check of position_info.points_owned==0. Suggestion: Return false when the amount_owned of one of the vector elements is not 0.


Momentum safe deployment is vulnerable to max_gas attacks

Severity: Medium

Ecosystem: Aptos

Protocol: Momentum Safe

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/MSafe%20-%20Zellic%20Audit%20Report.pdf

Report Date: Sep 2022

Description:

simple_map::borrow() uses a binary search algorithm that creates an opportunity for max_gas attacks.


Transactions can be blocked from max_gas attacks

Severity: Medium

Ecosystem: Aptos

Protocol: Momentum Safe

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/MSafe%20-%20Zellic%20Audit%20Report.pdf

Report Date: Sep 2022

Description:

Same underlying issue as above. An attacker could stuff the txn_book.pendings to the point where the compute costs of simple_map::borrow() exceed max_gas.


Distribution mechanism for liquidation rewards susceptible to max_gas

Severity: Medium

Ecosystem: Aptos

Protocol: Thala Labs Move Dollar

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Thala%20Labs%20Move%20Dollar%20-%20Zellic%20Audit%20Report.pdf

Report Date: Oct 2022

Description:

Attacker could flood StabilityPool.deposits iterable table with accounts with zero APD deposited. This could lead to max_gas and the inabilty for stability pool depositors to be rewarded for risks taken in supporting the stability pool.


Low collateral positions can lead to max_gas

Severity: Medium

Ecosystem: Aptos

Protocol: Thala Labs Move Dollar

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Thala%20Labs%20Move%20Dollar%20-%20Zellic%20Audit%20Report.pdf

Report Date: Oct 2022

Description:

An attacker could open many vaults with low collateral, setting the borrow amount to barely reach minimum collateralization rate. These positions would be placed near end of sorting vaults where collateral redemption begins and could lead to max_gas in vault::redeem_collateral, affecting the abiulity of users to exchange APD for collateral.


Accumulation of vaults can lead to max_gas via insertion algorithm

Severity: Medium

Ecosystem: Aptos

Protocol: Thala Labs Move Dollar

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Thala%20Labs%20Move%20Dollar%20-%20Zellic%20Audit%20Report.pdf

Report Date: Oct 2022

Description:

No controls to prevent 0 collateral vaults from being made nor to remove them. Attacker could flood system with zero-collateral vaults using vault::open_vault or this could naturally occur depending on number of users in protocol with zero-collateral vaults that are never removed.


Some assertions can be optimized

Severity: Medium

Ecosystem: Aptos

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Aptos-Audit-Report.pdf

Report Date: Jan 2023

Description:

Many assertions are not placed at the beginning of functions. It is recommended so they can fail fast and save gas.


utils::str optimization

Severity: Medium

Ecosystem: Aptos

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Aptos-Audit-Report.pdf

Report Date: Jan 2023

Description:

utils::str currently uses a pre-defined map to convert a u8 to a char and inserts char into the index 0 of the string, very inefficient.


Position recalculation optimization

Severity: Medium

Ecosystem: Aptos

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Aptos-Audit-Report.pdf

Report Date: Jan 2023

Description:

In collect_fee and collect_rewarder functions in pool module, there are duplicated codes to get the pool and position. The reason is get_position_tick_range can not borrow the Pool resource after the pool variable keeps a mutable reference to the Pool resource. This is a limitation of Move language to ensure security. We can solve this by introducing a helper function which uses a &Pool parameter to get the position tick range.


Sequential Search Leads To Gas Griefing

Severity: Medium

Ecosystem: Aptos

Protocol: MSafe

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2033

Description:

When confirming a Momentum Safe registration, the address is removed from the pending vector of the owner’s OwnerMomentumSafes using a linear search. As anyone can register Momentum Safes for the owner, this causes the pending vector to grow. Note that an attacker can register a Momentum Safe in O(1) time, but all future operations will cost O(n) for the victim. This asymptotic difference makes it a viable gas-griefing attack vector.

Inflation Attacks - Overview

Manipulating token supply or pricing mechanisms to artificially inflate token value or circulation, leading to economic imbalance or devaluation.

Inflation AttacksFindings
Medium1
Total1

Medium Findings


Inflation Attack on Zero Total Stake

Severity: Medium

Ecosystem: Aptos

Protocol: Thala LSD

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description:

staking::stake_thAPT_v2 is susceptible to an inflation attack, which may allow the first depositor to exploit subsequent depositors by manipulating the exchange rate. This can be achieved by making an initial deposit, which would depeg the 1:1 initial ratio between the sthAPT_supply and the thAPT_staking amount due to the staking fee. After this point, the attacker can continue making progressively larger deposits into the pool, resulting in zero minted sthAPT, further inflating the price.

Input Validation - Overview

Missing or weak checks on user input leading to invalid or malicious state changes.

Input ValidationFindings
Critical14
High23
Medium22
Total59

Critical Findings


Tolerance Check Bypass on Forced Withdrawal

Severity: Critical

Ecosystem: Sui

Protocol: Aftermath Market Making

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Jan 2025

Description: A malicious user may intentionally set min_expected_balance_out to an unrealistically high value that the vault cannot satisfy, effectively locking the withdrawal session. The user can then trigger a forced withdrawal, bypassing default constraints on withdrawal processing and resulting in vault losses. This feature also triggers market orders on all positions.


Absence of Generics Checking

Severity: Critical

Ecosystem: Binance Smart Chain

Protocol: AquaSwap

Auditor: MoveJay

Report: https://github.com/Jayfromthe13th/AuquaSwap-Audit-/blob/Wallet/Audit%20report.md

Report Date: July 2024

Description: The revoke_trade<BaseTokenType> function does not assert that the inputted generic type matches the base_type TypeInfo stored on the Trade resource. An attacker could drain liquidity from the AMM by placing a limit trade order, canceling it, and passing an incorrect token type.


Signature Length Validation

Severity: Critical

Ecosystem: Sui

Protocol: Bluefin

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2024

Description: Extra bytes in signature_bytes can alter the computed hash, leading to incorrect digest values and potentially causing incorrect validation if rewards have been previously claimed.


Missing UID Validation

Severity: Critical

Ecosystem: Sui

Protocol: Bluefin

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2024

Description: Missing validation of UIDs allows attackers to use invalid or forged BankV2 objects, potentially minting shares at lower price, resulting in a loss of funds.


Loss of Coin

Severity: Critical

Ecosystem: Sui

Protocol: Cetus

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2024

Description: The limit_order::repay_flash_loan function lacks a check to verify that the order_id in the receipt matches the ID of the limit order. An attacker can manipulate the order_id, resulting in loss of coins.


Loss Of Funds In Lending

Severity: Critical

Ecosystem: Sui

Protocol: Navi

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: June 2023

Description: All functions in lending.move lack validation on the Coin Type, allowing attackers to use incorrect coin types and causing loss of funds through incorrect asset calculations.


Bid with Zero Input Causing DOS

Severity: Critical

Ecosystem: Sui

Protocol: MoviePass Exchange

Auditor: Cetora

Report: https://github.com/Certora/SecurityReports/blob/main/Reports/2025/03_02_2025_MoviePass_MSX-MR.pdf

Report Date: Feb 2025

Description: A bid with a 0-value input can cause the entire dispersal phase to fail if the split(0) operation reverts. A single 0-value bid entering the disperse function can cause a denial-of-service by failing all subsequent withdrawals.


Missing Asset-Type Validation in repay_add_liquidity Allows Wrong Token Repayment

Severity: Critical

Ecosystem: Sui

Protocol: Dexlyn

Auditor: HackenProof

Report: https://hackenproof.com/audit-programs/dexlyn-smart-contract-audit-contest?tab=reports

Report Date: Sep 2025

Description: The repay_add_liquidity function accepts repayment with arbitrary fungible assets without verifying they are the pool's configured tokens. This allows attackers to provide wrong tokens and still satisfy liquidity repayment, corrupting pool reserves.


repay_flash_swap accepts arbitrary token types, enabling theft of pool assets

Severity: Critical

Ecosystem: Sui

Protocol: Dexlyn

Auditor: HackenProof

Report: https://hackenproof.com/audit-programs/dexlyn-smart-contract-audit-contest?tab=reports

Report Date: Sep 2025

Description: The repay_flash_swap function lacks token type validation, allowing the pool to accept repayment with arbitrary token types and enabling theft of real assets from the pool.


Unchecked reward asset during reward claim allows withdrawing the wrong token from pool reserves

Severity: Critical

Ecosystem: Sui

Protocol: Dexlyn

Auditor: HackenProof

Report: https://hackenproof.com/audit-programs/dexlyn-smart-contract-audit-contest?tab=reports

Report Date: Sep 2025

Description: The reward-claim function trusts a user-supplied asset_addr when transferring owed rewards instead of enforcing the configured rewarder asset for the given rewarder_index. An LP with accrued rewards can claim in asset A or B (or any fungible asset the pool holds), draining pool reserves by up to the owed amount per claim.


Lack of Validation for target_amount and tokens_to_sell in create_campaign

Severity: Critical

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: Missing validation for target_amount and tokens_to_sell can lead to 0 values due to precision issues, causing failure to claim tokens or locking assets indefinitely.


Function can't be called

Severity: Critical

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: The claim_refund function cannot be called because the parameter Vault<TI, TR> cannot be passed, preventing users from retrieving their tokens.


Function Parameter Error

Severity: Critical

Ecosystem: Sui

Protocol: Cetus Concentrated

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Sui-Contract-Audit-Report.pdf

Report Date: Mar 2023

Description: The cross_by_swap function parameters are entered in the wrong order, causing the swap result to be calculated incorrectly due to the coding error.


Missing Type Check While Placing Order

Severity: Critical

Ecosystem: Aptos

Protocol: Econia

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Dec 2022

Description:

In the functions market::place_market_order and market::place_limit_order(), when placing an order, there is no type verification against the original market types. Usually, the market should only allow orders of the same type, but this check was not enforced while placing an order. This would allow attackers to use incorrect coin types against the market, transferring coins of an incorrect type.

High Findings


Lack of Minimum Liquidity Constraint

Severity: High

Ecosystem: Sui

Protocol: Solend Steam

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description: Insufficient minimum liquidity may expose the protocol to inflation attacks, enabling malicious actors to manipulate the value of bToken. If bToken value exceeds a 1:1 ratio, burning bToken and increasing the underlying token amount can trigger zero mint on user deposits, causing losses.


Inconsistencies Due to Zero Share Amount Value

Severity: High

Ecosystem: Sui

Protocol: Mysten Walrus

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description: The staking_inner::request_withdraw_stake function does not explicitly prevent withdrawal requests with a share_amount of zero. This oversight allows malicious users to manipulate the staking pool's share-to-asset ratio by withdrawing a small principal or leaving it, potentially causing denial of service.


Unfair Rewards via Incorrect Supply Pool Instance

Severity: High

Ecosystem: Sui

Protocol: Kuna Labs

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: June 2025

Description: If a user borrows from SupplyPool<X, SX0> to create a position, a malicious liquidator can exploit this by passing a different SupplyPool instance than the one used when the position was created, enabling extraction of extra rewards.


Trade Proof Bypass

Severity: High

Ecosystem: Sui

Protocol: Mysten Deepbook

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Aug 2024

Description: If balances_in and balances_out are equal, the trade proof can be bypassed, allowing invalid trades to be executed without proper validation.


Bypass of the id_leak_verifier stage of suiverifier may occur

Severity: High

Ecosystem: Sui

Protocol: MystenLabs Sui

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description: Capabilities can be added during upgrades, potentially bypassing the id_leak_verifier stage of suiverifier, allowing unauthorized modifications to the protocol.


Pending Order Fee Tokens not Tied to Valid Tokens

Severity: High

Ecosystem: Sui

Protocol: ABEx Labs

Auditor: MoveBit

Report: https://movebit.xyz/reports/Abex-Smart-Contract-Audit-Report.pdf

Report Date: Aug 2023

Description: The fee token can be a fake coin minted by the attacker. When a pending order executor comes to execute the pending order, they receive the fake fee instead of the real token, causing losses to the executor.


May Be Wrong Parameters In flash function

Severity: High

Ecosystem: Sui

Protocol: FlowX Finance

Auditor: MoveBit

Report: https://movebit.xyz/reports/FlowX-Final-Audit-Report.pdf

Report Date: May 2024

Description: Multiple issues exist in the flash function: (1) if borrowed money exceeds existing pool funds, it automatically borrows the available amount instead of the requested amount; (2) the handling fee is calculated from user input rather than actual borrowed amount; (3) the FlashReceipt uses input parameters rather than actual output values, potentially causing repayment to fail with large losses.


Lack of Validation for the Generic Parameter CoinType

Severity: High

Ecosystem: Sui

Protocol: Navi

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Navi-Smart-Contract-Audit-Report.pdf

Report Date: Jul 2023

Description: All functions in lending.move lack CoinType validation. Incorrect CoinType parameters cause incorrect asset calculations in Storage, potentially preventing the entire contract from functioning properly.


Lack of Validation for Campaign and Whitelist ID in invest function

Severity: High

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: The invest function lacks checks for campaign or whitelist ID, allowing users from one whitelist to participate in another campaign, bypassing access controls.


Lack of Validation for Funding Status in fund function

Severity: High

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: The fund function lacks a "fund already full" check, allowing multiple funding transactions. However, upon distribution, only a fixed amount can be distributed.


Lack of Parameter Check

Severity: High

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description: In the withdraw function, penalty calculation may exceed lock.amount, preventing users from withdrawing their stake coins.


Lack of Market Version Check

Severity: High

Ecosystem: Sui

Protocol: Aries Market

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Aries-Smart-Contract-Audit-Report.pdf

Report Date: June 2023

Description: The set_reserveconfig_obj function doesn't check for market version, which may result in incorrect market information being set or used.


Missing Market Checks

Severity: High

Ecosystem: Sui

Protocol: Aries Market

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Aries-Smart-Contract-Audit-Report.pdf

Report Date: June 2023

Description: The liquidate function may cause the market to not match the current profile due to missing validation checks.


PackMessage is not bound to token type

Severity: High

Ecosystem: Sui

Protocol: MiniMiners

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Mini-Miners-Contract-Audit.pdf

Report Date: Apr 2023

Description: PackMessage only checks the number and not the token type, allowing users to exchange different coin types provided that the game ID has corresponding coin types available, enabling token swaps without proper validation.


Missing Zero Check for Added Liquidity

Severity: High

Ecosystem: Sui

Protocol: Sui AMM

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Sui-AMM-swap-Contracts-Audit-Report.pdf

Report Date: Nov 2022

Description: The liquidity addition function does not check for adding zero liquidity, allowing users to lose their X and Y coins without receiving CoinLP<X,Y> tokens in return.


Incorrect Integer Parsing

Severity: High

Ecosystem: Aptos

Protocol: Echelon

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Echelon%20-%20Zellic%20Audit%20Report%20(January).pdf

Report Date: Apr 2025

Description:

The parse_deposit_payload function has a bug in how it handles integer-value parsing. Solidity stores integer values in big-endian format (most significant byte first, reading right to left). The from_bcs module parses integers in little-endian format (least significant byte first, reading left to right).


Nonexistent Token Pair

Severity: High

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

In the function swap_v2::swap_exact_fee_to_apt(), it attempts to retrieve information about <TokenPairMetadata<X, APT>>. However, under normal circumstances, such information doesn't exist unless created using the create_pair() function. Doing so would entail creating pairs for all tokens with APT, which clearly doesn't align with logic. <TokenPairReserve<X, APT>> faces a similar issue.


Token Extraction Mismatch in Fee Distribution Logic

Severity: High

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

The function swap_v2.distribute_dex_fees() is used to ensure proper distribution of DEX fees, regardless of the input token. In the case where type_info::type_of() != type_info::type_of(), the line coin_x_out = coin::extract(&mut metadata.balance_x, amount_in) extracts the token amount from metadata.balance_x using the user-input amount_in. However, it seems that the intended behavior might be to use amount_to_liquidity + amount_to_treasury instead of amount_in.


Unexpected Coin Value (Property 2 Not Hold)

Severity: High

Ecosystem: Aptos

Protocol: Liquidswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/Pontem-Liquidity-Swap-Formal-Verification-Audit-Report.pdf

Report Date: Apr 2024

Description:

The property 2 requires: The coin_x and coin_y of a pool should both be zero (at its initial state) or both be nonzero. The coin_x and coin_y after any operation should not be zero for a non-empty pool. swap_inner, mint, burn, flashloan, pay_flashloan function have violated this property.


Unexpected Coin Value (Property 2 Not Hold)

Severity: High

Ecosystem: Aptos

Protocol: Pontem

Auditor: MoveBit

Report: https://movebit.xyz/reports/Pontem-Liquidity-Swap-Formal-Verification-Audit-Report.pdf

Report Date: Apr 2024

Description:

The property 2 requires: The coin_x and coin_y of a pool should both be zero (at its initial state) or both be nonzero. The coin_x and coin_y after any operation should not be zero for a non-empty pool. swap_inner, mint, burn, flashloan, pay_flashloan function have violated this property.


Wrong Type Parameter

Severity: High

Ecosystem: Aptos

Protocol: vibrantX

Auditor: MoveBit

Report: https://movebit.xyz/reports/vibrantX-Final-Audit-Report.pdf

Report Date:

Description:

The type parameter Token4 received by the get_weighted_reserves function is not passed to the weighted_pool::pool_balances_and_weights function, and there is a duplicate of the type parameter Token, so make sure this is by design.


Disabling Withdrawals by Withdrawing Zero-Value FA

Severity: High

Ecosystem: Aptos

Protocol: Aptos Labs Securitize

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

The ds_token module relies on an invariant that withdrawals must be coupled with deposits. The system tracks the number of active withdrawals utilizing the WithdrawCount resource, ensuring that multiple withdrawals will not coincide (as enforced by assert_withdraw_count ). However, via dispatchable_fungible_asset::withdraw , a user may withdraw a zero-value fungible asset (FA). Since this FA has a value of zero, it does not represent any meaningful asset transfer. Still, the WithdrawCount is incremented to reflect that a withdrawal has occurred.


Utilization of Proper Assertions for Wallet Creation

Severity: High

Ecosystem: Aptos

Protocol: Aptos Labs Securitize

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

registry_service::add_wallet directly utilizes create_primary_store to create a new primary store for a specified wallet_addr . However, this function will fail if the address already has a primary store. Thus on calling add_wallet or add_wallet_by_investor , if the wallet already has a primary store it will not be added and the execution will fail. Additionally, there is an incorrect assertion in add_wallet_by_investor, which verifies if wallet_addr is a special wallet, unintentionally allowing only special wallets to be added. This behavior may expose the system to risks. The intended functionality, however, is to prevent the registration of special wallets. Therefore, the assertion should check that wallet_addr is not a special wallet. A similar assertion should also be added to add_wallet to prevent the registration of special wallets.


Medium Findings


Lack of Validation for Price Value in get_price function

Severity: Medium

Ecosystem: Sui

Protocol: Scallop

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Scallop-Smart-Contract-Audit-Report.pdf

Report Date: June 2023

Description:

Missing 0 check can lead to incorrect calculations and impact other functions.


Parameter Check for Creating Dutch

Severity: Medium

Ecosystem: Sui

Protocol: Typus Finance

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Typus-Finance-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

Parameters like decay_speed should not be zero, and time-related values must be logically consistent (e.g., start_ms < end_time_ms and end_time_ms should be greater than the current time).


Can Create Pools With Same Type

Severity: Medium

Ecosystem: Sui

Protocol: MovEx

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/MovEx-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

create_pool function doesn't check if pool type was already created which will lead to duplicate pools. Depth of each pool is not large enough and will cause slippage.


Create Pools with same Coin Type

Severity: Medium

Ecosystem: Sui

Protocol: MovEx

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/MovEx-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

You can create a pool with two of the same token.


Severity: Medium

Ecosystem: Sui

Protocol: Sui AMM swap

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Sui-AMM-swap-Contracts-Audit-Report.pdf

Report Date: Nov 2022

Description:

The functions multi_add_liquidity, multi_remove_liquidity, and multi_swap first use the pop_back function for coins_in and lp_coin in the code to pop up the last element of the vector, but this does not judge that the length of the vector is 0.


Lack of Input Validation

Severity: Medium

Ecosystem: Sui

Protocol: Aries Market

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Aries-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description:

reserve_ratio is not checked to ensure it is not greater than 100 when updating reserve_config.


The addition of reserve is missing validation

Severity: Medium

Ecosystem: Sui

Protocol: Aries Market

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Aries-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description:

add_reserve lacks input validation — should include an assertion to prevent adding the same coin to the reserve. The client acknowledged this but deemed it a non-issue.


Validation is Required Before Deleting reserve_addr

Severity: Medium

Ecosystem: Sui

Protocol: Aries Market

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Aries-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description:

Check if reserve_addr exists, then proceed with delete.


ID occupied causes program termination

Severity: Medium

Ecosystem: Sui

Protocol: Mango

Auditor: ExVul

Report: https://github.com/ExVul-Sec/AuditReport/blob/main/Smartcontract/Mango%20Smart%20Contract%20Audit%20Report-Exvul.pdf

Report Date: July 2025

Description:

The new_bridge_pair funciton in config.move does not strictly enforce the relationship between the provided id and the internal pair_id counter.


strategy_type missing check

Severity: Medium

Ecosystem: Aptos

Protocol: Mole

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Mole-Aptos-Audit-Report.pdf

Report Date: Feb 2023

Description:

add_collateral and work functions both use strategy_type parameter to execute different logic. However, add_collateral lacks a check of strategy_type.


current_time not checked

Severity: Medium

Ecosystem: Aptos

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Aptos-Audit-Report.pdf

Report Date: Jan 2023

Description:

In get_ref_fee_rate, current_time does not check it is the current time.


Missing tick in range check

Severity: Medium

Ecosystem: Aptos

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Aptos-Audit-Report.pdf

Report Date: Jan 2023

Description:

get_sqrt_price_at_tick function does not check if tick is in range, some ticks out of range pass.


Create pool with two same CoinTypes

Severity: Medium

Ecosystem: Aptos

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Aptos-Audit-Report.pdf

Report Date: Jan 2023

Description:

A pool can be created between CoinA and CoinA, which is redundant.


Missing Check for Sequence Number

Severity: Medium

Ecosystem: Sui

Protocol: Walrus Contracts

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description:

While there is validation for the blob ID, there is no validation for the ending checkpoint sequence number. As a result, the value provided by a quorum-reaching node gets recorded in the state. If an incorrect number is entered, it causes a mismatch between the event blob being processed by the node and the on-chain tracking.


Exceeding Object Size Limit

Severity: Medium

Ecosystem: Sui

Protocol: Walrus Contracts

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description:

In staking_pool, if the StorageNodeInfo.{name,network_address} field is set to an excessively long value by the node owner, it may contribute significantly to the total size of the StakingPool object. This may restrict the addition of new values to pending_shares_withdraw, thereby blocking stakers from making withdrawals.


Missing Commission Rate Check

Severity: Medium

Ecosystem: Sui

Protocol: Walrus Contracts

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description:

There is no check to ensure that the commission rate is less than or equal to 10000, an ENotEnough error may occur in staking_pool::advance_epoch when the node becomes part of the committee.


Duplicate Entries

Severity: Medium

Ecosystem: Sui

Protocol: Drife Technologies

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Dec 2023

Description:

register_rider and register_driver allows the creation of multiple rider or driver objects with the same address, resulting in duplicate entries. Both register_rider and register_driver create a new rider or driver objects without checking whether an object with the same address already exists, resulting in multiple objects with the same address.


Signature Forgery

Severity: Medium

Ecosystem: Sui

Protocol: Drife Technologies

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Dec 2023

Description:

In the context of the drife_app::request_ride, the signature includes a parameter city: String after the address to allow the user to set the city name. However, this string may become any value, even to the operation name. Attacker can forge signature by manipulating this field.


Missing TransactionPayload Type Validation

Severity: Medium

Ecosystem: Aptos

Protocol: MSafe

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

The TransactionPayload struct contains the payload and its type. Aptos supports payloads of type: • WriteSet • Scripts • ModuleBundle • EntryFunction

The payload in theTransactionPayloadstruct can be any transaction type, not justEntryFunction. This assumption should be validated. For example, many internal functions such as register payload validation assume the layout of the TransactionPayload is a EntryFunction.


Missing Chain ID Validation

Severity: Medium

Ecosystem: Aptos

Protocol: MSafe

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

Transactions can be replayed from one chain to another if this field isn’t properly validated. In the context of a multisig, the transaction can be added but will fail at execution. Nonetheless, this represents a potential UX risk and is worth remediating. Validate chain_id in the validate_txn_payload function.


Lack Of Check For Forbidden IDs

Severity: Medium

Ecosystem: Sui

Protocol: Maven

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Apr 2023

Description:

Update admin policy could be set to forbidden ID, ensure check beforehand.


Users may set a TTL value that does not follow the maximum TTL limit

Severity: Medium

Ecosystem: Sui

Protocol: Mysten Labs Sui

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2023

Description:

Users may assign invalid TTL values to their domain names, enforce limit.

Looping Issues - Overview

Unbounded loops or iteration over dynamic arrays leading to high gas costs or DoS.

Looping IssuesFindings
Critical1
High2
Medium3
Total6

Critical Findings


Unbounded Execution - DOS

Severity: Critical

Ecosystem: Binance Smart Chain

Protocol: AquaSwap

Auditor: MoveJay

Report: https://github.com/Jayfromthe13th/AuquaSwap-Audit-/blob/Wallet/Audit%20report.md

Report Date: July 2025

Description:

These functions can lead to unbounded execution because they iterate over potentially large lists. An attacker could exploit this by registering a large number of orders, causing the functions to block and leading to denial-of-service (DOS).


High Findings


Infinite Loop in handle_redeem

Severity: High

Ecosystem: Sui

Protocol: Bucket Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Bucket-Protocol-Smart-Contract-Audit-Report.pdf

Report Date: July 2023

Description:

In the handle_redeem function, if the debt value is 0, the loop controlling the redemption process may not terminate as expected, leading to a potential infinite loop. This can cause transaction failures or denial-of-service conditions within the protocol.


Infinite Recursion in distribute_dex_fees() Leading to Transaction Failure

Severity: High

Ecosystem: Aptos

Protocol: Baptswap

Auditor: MoveBit

Report: https://movebit.xyz/reports/BAPTSWAP-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

The function swap_v2.distribute_dex_fees() aims to calculate and distribute DEX fees based on the type of input X. In this function, the protocol calls swap_exact_x_to_y_direct() to exchange X for APT and then transfers the obtained APT to the treasury. However, within the swap_exact_x_to_y_direct() function, the protocol again invokes distribute_dex_fees(). This recursive calling pattern leads to an infinite loop, resulting in an out-of-gas situation and a failed transaction.

Medium Findings


Presence Of Infinite Loop

Severity: Medium

Ecosystem: Sui

Protocol: Drife Technologies

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Dec 2023

Description:

If ride is less than three stops, continues to next iteration, but it does not increase causing infinite loop.


Multiple indexes can map to the same reserve

Severity: Medium

Ecosystem: Aptos

Protocol: AAVE

Auditor: Certora

Report: https://github.com/aave/aptos-aave-v3/blob/main/audits/Certora%20Aave%20Aptos%20Core%20V3.0.2%20Report.pdf

Report Date: Apr 2025

Description:

The function init_reserve() does not break when finding a valid index to use.

When adding a new reserve, the function first looks for an unused index in the current range (and increases the range of indexes if none were found). If an unused index was found, we map this index to the new reserve. However, we do not break from the loop, but continue looking for more unused indexes. If we find multiple such indexes, we will have multiple indexes mapping to the same reserve. (For multiple indices to be unused within the current range, drop_reserve() will have to be called twice between uses of init_reserve().)

This will then lead to counting the reserve multiple times when calling calculate_user_account_data(), which can lead to counting the same coin as collateral twice and taking debt against it, resulting in a loan worth more than its collateral.

For this to work, drop_reserve() will have to be called twice between uses of init_reserve().


Inefficient Assignment Within Loop in the process_cluster Function

Severity: Medium

Ecosystem: Aptos

Protocol: Supra

Auditor: MoveBit

Report: https://movebit.xyz/reports/Supra-Smart-Contract-Audit-Report.pdf

Report Date: Sep 2023

Description:

It was identified that the assignment operation located at line 316 within the process_cluster function is unnecessarily repeated in every iteration of the loop. This will result in less efficient execution and increased gas consumption. It is recommended to move this assignment code to a position immediately before the loop, ensuring that the assignment is performed only once.

Missing Functions - Overview

Essential management or recovery functions omitted, leaving the system unmaintainable or funds stuck.

Missing FunctionsFindings
Critical1
High3
Medium13
Total17

Critical Findings


Locked Fees in Vault Due to Lack of Withdraw Function

Severity: Critical

Ecosystem: Aptos

Protocol: Kofi Finance

Auditor: Zenith

Report: https://github.com/KofiFinance/audits/blob/main/Kofi%20Finance%20-%20Zenith%20Audit%20Report.pdf

Report Date: May 2025

Description:

The protocol implements a deposit fees function, but there is no corresponding withdraw fees function.


High Findings


Unable to Withdraw Flash Loan Fees

Severity: High

Ecosystem: Sui

Protocol: Scallop

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Scallop-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description:

The redeem function converts MarketCoin to Coin, but there is no implementation to extract or withdraw the associated fees.


Inability to Receive Unused Tokens

Severity: High

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

Users cannot reclaim any remaining tokens in fund.vault or in Vault.reward_balance after distribution. There is no mechanism to recover unused tokens, potentially resulting in locked or lost assets.


Unused friend Functions

Severity: High

Ecosystem: Aptos

Protocol: vibrantX

Auditor: MoveBit

Report: https://movebit.xyz/reports/vibrantX-Final-Audit-Report.pdf

Report Date: Jan 2024

Description:

The add_address function is not used in this module and the vibrantx_package_manager module does not set the friend module so the add_address function can't be called by anyone, thus causing the module function to be disabled.

Medium Findings


Inability to Initialize Objects

Severity: Medium

Ecosystem: Sui

Protocol: Drife Technologies

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Dec 2023

Description:

Without the ability to properly initialize stops, users are limited in their ability to request rides with specific stop details. This, in turn, results in a compromise of the user experience and the system’s flexibility, as users may be unable to specify the stops they want when requesting a ride.


Incomplete Function About Protocol Fee

Severity: Medium

Ecosystem: Sui

Protocol: Haedel

Auditor: MoveBit

Report: https://movebit.xyz/reports/Haedal-Final-Audit-Report.pdf

Report Date: Dec 2023

Description:

Missing function for collecting protocol fees.


Lack of A Method to Add referrals in the Market

Severity: Medium

Ecosystem: Sui

Protocol: ABEx Labs

Auditor: MoveBit

Report: https://movebit.xyz/reports/Abex-Smart-Contract-Audit-Report.pdf

Report Date: Aug 2023

Description:

Can obtain rebates, but no way to add rebate users.


Unable to Remove Strategies

Severity: Medium

Ecosystem: Sui

Protocol: Kuna Labs Yield Optimizer Smart Contract

Auditor: MoveBit

Report: https://movebit.xyz/reports/Yield-Optimizer-Final-Audit-Report.pdf

Report Date: Nov 2023

Description:

remove_strategy function is not utilized in scallop_whusdce module, therefore strategies in the vault will not be removed.


Module Lacks Interface For Upgrades

Severity: Medium

Ecosystem: Sui

Protocol: Fluidity

Auditor: MoveBit

Report: https://movebit.xyz/reports/Fluidity-Final-Audit-Report.pdf

Report Date: Feb 2024

Description:

The module uses a third-party contractual interface and lacks an interface for upgrading, which may result in the module not being able to be modified when the third-party interface function changes.


Missing Function to Remove Users from Whitelist

Severity: Medium

Ecosystem: Sui

Protocol: Turbos Finance-TurboStar

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/TurboStar-Smart-Contract-Audit-Report.pdf

Report Date: May 2023

Description:

There is a function to add users, but not one to remove them.


Add an interface to modify the controller of the multi-signature account

Severity: Medium

Ecosystem: Sui

Protocol: Sui AMM Swap

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Sui-AMM-swap-Contracts-Audit-Report.pdf

Report Date: Nov 2022

Description:

Missing interface to change the controller.


Removal of Accrual Functions Before Protocol Changes Leading to Interest Distortion

Severity: Medium

Ecosystem: Initia

Protocol: Echelon Market

Auditor: Quantstamp

Report: https://certificate.quantstamp.com/full/echelon-market/9ee15c30-6a0f-4a70-b5ce-63b8a887bd4e/index.html

Report Date: Mar 2025

Description:

The following functions used to accrue interest before changing protocol parameters. This ensure that up to the point of the changes all interest would be accumulated as per the previous configuration.

  1. set_interest_fee_bps().
  2. set_pair_jump_interest_rate_model().

Removing the accrual functions would lead to distorted interests as pending interest accrual would assume the new values, which could lead to sudden unexpectedly high or low interest changes.


Missing Pause Control Functions in ALMM Pair Module Leads to Non-Functional Emergency Controls

Severity: Medium

Ecosystem: Sui

Protocol: MagmaDEX

Auditor: Three Sigma

Report: https://cdn.sanity.io/files/qoqld077/staging/9566473c444a6cfd99c7a6556fa4857950b41de3.pdf

Report Date: July 2025

Description:

The magma_almm::almm_pair module has a broken pause mechanism. The AlmmPair struct includes a pause field that's initialized to false during pair creation, and critical functions like collect_fees, stake_in_magma_distribution, and collect_reward, etc. check this state with assert!(!self.pause, ErrPaused). However, there are no functions to actually pause or unpause the pair.


Missing update_position_fees in burn function

Severity: Medium

Ecosystem: Sui

Protocol: MagmaDEX

Auditor: Three Sigma

Report: https://cdn.sanity.io/files/qoqld077/staging/9566473c444a6cfd99c7a6556fa4857950b41de3.pdf

Report Date: July 2025

Description:

When changing the position liquidity either by adding/removing tokens, we always call update_position_fees. this is to make sure the . Position took the fees it deserves for that period. before changing his tokens. The function update_position_fees is called for all functions that changes the liquidity of position, this includes burn_position, raise_position_by_amounts_internal, shrink_position. But for burn, which is used to make a partial burning of the position, this function is missing.


Tokens cannot be withdrawn from admin_controlled_ecosystem_reserve.move

Severity: Medium

Ecosystem: Aptos

Protocol: AAVE v3.0.2 Periphery

Auditor: Spearbit

Report: https://github.com/aave/aptos-aave-v3/blob/main/audits/Spearbit%20Aave%20Aptos%20Periphery%20V3.0.2%20Report.pdf

Report Date: June 2025

Description:

Fungible_assets is never written, so the function transfer_out() does nothing.


Incentives cannot be configured

Severity: Medium

Ecosystem: Aptos

Protocol: AAVE v3.0.2 Periphery

Auditor: Spearbit

Report: https://github.com/aave/aptos-aave-v3/blob/main/audits/Spearbit%20Aave%20Aptos%20Periphery%20V3.0.2%20Report.pdf

Report Date: June 2025

Description:

rewards_controller.move does not contain functions to create RewardsConfigInput, therefore emissions_manager::configure_assets() can’t be executed.


pausable and current_pause_start Parameters cannot be Modified

Severity: Medium

Ecosystem: Aptos

Protocol: StreamFlow

Auditor: MoveBit

Report: https://movebit.xyz/reports/StreamFlow2-Final-Audit-Report.pdf

Report Date: Mar 2024

Description:

In the create function we can initialize the pausable and current_pause_start parameters, but there is no specific implementation of the pause method in the contract.


Missing Version Check - Overview

Lack of validation for contract or dependency versions causing incompatibility or security regressions.

Missing Version CheckFindings
High2
Total2

High Findings


Initialize Missing Version Checks

Severity: High

Ecosystem: Sui

Protocol: FlowX Finance

Auditor: MoveBit

Report: https://movebit.xyz/reports/FlowX-Final-Audit-Report.pdf

Report Date: May 2024

Description:

The old initialize function remains callable, allowing users to reinitialize the pool and potentially cause inconsistent or unintended system states.


Security Vulnerability in add_operator Function of config.move due to Missing Contract Version Check

Severity: High

Ecosystem: Sui

Protocol: Cetus Farming Smart Contracts

Auditor: MoveBit

Report: https://movebit.xyz/reports/Cetus-Farming-Smart-Contract-Final-Audit-Report.pdf

Report Date: Jan 2024

Description:

The add_operator function lacks a version check, allowing older contract versions to be called. This can reintroduce vulnerabilities or inconsistent logic from outdated deployments.

Oracle Issues - Overview

Manipulation or inaccuracy of external data sources impacting on-chain decisions.

Oracle IssuesFindings
Real World Exploit1
Critical3
High4
Medium11
Total19

Real World Exploit


Price manipulation

Severity: Real World Exploit

Ecosystem: Sui

Protocol: Typus Finance

Auditor: blackhat

Report: https://medium.com/@TypusFinance/typus-finance-tlp-oracle-exploit-post-mortem-report-response-plan-ce2d0800808b

Report Date: Oct 2025

Description:

The technical cause was a missing assert check in the update_v2 function of the oracle module, found within this contract package. This flaw effectively bypassed the authorization check, allowing any address to update oracle prices.


Critical Findings


Manipulatable Price Oracle

Severity: Critical

Ecosystem: Binance Smart Chain

Protocol: AquaSwap

Auditor: MoveJay

Report: https://github.com/Jayfromthe13th/AuquaSwap-Audit-/blob/Wallet/Audit%20report.md

Report Date: July 2024

Description:

The contract uses the ratio of the liquidity sizes of the tokens to determine the value of the liquidity token. This can be manipulated by an attacker to drain the pool.


Improper Oracle Calculations

Severity: Critical

Ecosystem: Aptos

Protocol: Aries Markets

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Nov 2022

Description:

Pyth price calculations in oracle.move are performed incorrectly. The price should be multiplied by, not divided by, the magnitude.


Missing Slippage Checks

Severity: Critical

Ecosystem: Aptos

Protocol: Eternal Finance

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Jan 2023

Description:

get_lp_by_cake does not properly perform slippage checks against an oracle price when swapping assets around.

High Findings


Oracle Lacks Update Cycle Verification

Severity: High

Ecosystem: Sui

Protocol: Navi

Auditor: MoveBit

Report: Navi Smart Contract Audit Report (MoveBit)

Report Date: July 2023

Description:

The oracle mechanism lacks verification of the update cycle. Specifically, there is no maximum interval period enforced when obtaining prices, allowing outdated price data to persist in the system. This can result in stale price feeds and inaccurate valuations.

Recommendation:

Implement a maximum time interval check for oracle updates and require regular price refreshes to ensure price data remains current.


Oracle Confidence Checks

Severity: High

Ecosystem: OL Network

Protocol: StakeSphere

Auditor: MoveJay

Report: https://github.com/Jayfromthe13th/StakeSphere-stealth-/blob/Wallet/Audit.md

Report Date: Feb 2025

Description:

High oracle confidence values suggest that there is disagreement among providers about the actual price. For instance, Pyth measures confidence as the difference between the 25th and 75th quartiles and the median price.

Recommendation:

Check the confidence of oracles.


Potential risk of manipulation of hyperion llp positions

Severity: High

Ecosystem: Aptos

Protocol: Yeap Finance

Auditor: SlowMist

Report: https://github.com/slowmist/Knowledge-Base/blob/master/open-report-V2/smart-contract/aptos-smart-contract/yeap-finance%20-%20SlowMist%20Audit%20Report.pdf

Report Date: July 2025

Description:

In the health_check module, get_amount_by_liquidity must use the pool’s real-time price; otherwise, attackers can manipulate token amounts by performing large swaps within the same transaction.


Domain pricing relies on pool price, which can be manipulated

Severity: High

Ecosystem: Initia

Protocol: Initia Move

Auditor: Code4Arena Contest SRs

Report: https://code4rena.com/reports/2025-01-initia-move

Report Date: Apr 2025

Description:

Payment for domains (registration, extensions) relies on direct spot price from the Dex module which is directly related to pool reserves. This can be manipulated with a flash loan or a large amount deposit, resulting in: buying a domain in a lower price making other users overpay for their domains. Calculating the price based directly on a liquidity pool reserves is a well known insecure pattern.

Medium Findings


Third-party Dependency

Severity: Medium

Ecosystem: Sui

Protocol: Aries Market

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Aries-Smart-Contract-Audit-Report.pdf

Report Date: June 2023

Description:

PriceOracle for example is third-party risk.


Missing Validation While Updating Oracle Price

Severity: Medium

Ecosystem: Sui

Protocol: Aries Market

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Aries-Smart-Contract-Audit-Report.pdf

Report Date: June 2023

Description:

Lacks a check to prevent prices from being set to zero; should include an assertion enforcing price > 0.


Potential flaws in pyth price acquisition

Severity: Medium

Ecosystem: Aptos

Protocol: Yeap Finance

Auditor: SlowMist

Report: https://github.com/slowmist/Knowledge-Base/blob/master/open-report-V2/smart-contract/aptos-smart-contract/yeap-finance%20-%20SlowMist%20Audit%20Report.pdf

Report Date: July 2025

Description:

Pyth is a “pull oracle.” This means if no user actively pulls and updates the price on-chain, the on-chain oracle might remain updated for extended periods, rendering the protocol’s Pyth price source unavailable.


Unconditional timestamp update in update_references allows volatility fee manipulation

Severity: Medium

Ecosystem: Sui

Protocol: Magma DEX

Auditor: Three Sigma

Report: https://cdn.sanity.io/files/qoqld077/staging/9566473c444a6cfd99c7a6556fa4857950b41de3.pdf

Report Date: July 2025

Description:

The almm_pair::update_references function is responsible for managing volatility-based fee parameters in the ALMM protocol. This function updates the volatility reference and index reference based on time elapsed since the last update, which directly affects the variable fee calculation used in swaps. The function contains a critical flaw where the time_of_last_update is unconditionally updated regardless of whether the volatility parameters are actually processed. This allows attackers to manipulate the fee mechanism by preventing the volatility reference from decaying naturally.


Failure to Check for Stale Price Oracle

Severity: Medium

Ecosystem: Aptos

Protocol: AAVE v3.1-3.3 Core

Auditor: OtterSec

Report: https://github.com/aave/aptos-aave-v3/blob/main/audits/Ottersec%20Aave%20Aptos%20V3.1-V3.3%20Report.pdf

Report Date: Aug 2025

Description:

get_asset_price_internal does not validate for freshness of the data while retrieving prices from feeds.


Severity: Medium

Ecosystem: Aptos

Protocol: AAVE V3

Auditor: Cantina Contest SRs

Report: https://cantina.xyz/code/ad445d42-9d39-4bcf-becb-0c6c8689b767/findings/237

Report Date: June 2025

Description:

In AAVE's oracle module, we will try to fetch underlying asset's price from Oracle feed if there is not one custom price.

We will fetch the price via the interface chainlink::get_benchmark_value(benchmark) from the benchmark. According to Chainlink Aptos Doc, when we fetch the price from benchmark, we can fetch the price and the related timestamp from the benchmark.

The problem here is that we miss fetching the timestamp from the benchmark, and we don't check whether the price from Chainlink is staleness or not. If there is something wrong in Chainlink, the price don't update for a while, we may fetch stale price, this will cause we borrow/liquidate with one incorrect underlying price.


Missing oracle stale price check

Severity: Medium

Ecosystem: Aptos

Protocol: Thala Labs Aptos Dollar

Auditor: Zellic

Report: https://github.com/Zellic/publications/blob/master/Thala%20Labs%20Move%20Dollar%20-%20Zellic%20Audit%20Report.pdf

Report Date: Feb 2023

Description:

The oracle lacks timestamps and stale-price checks. The project has switched to a tiered oracle framework, which requires a separate review.


Missing Check for Negative in get_switchboard_price() Function

Severity: Medium

Ecosystem: Aptos

Protocol: Merkle Trade Smart Contract

Auditor: MoveBit

Report: https://movebit.xyz/reports/Merkle-Trade-Smart-Contract-Audit-Report.pdf

Report Date: July 2023

Description:

The function get_switchboard_price() is used to retrieve the price and round confirmed timestamp from Switchboard. it is advised to include a check to ensure the negative is not true. If the negative value is true, it implies that there might be some problem with the price received from Oracle, potentially because the price is expired or has some error leading to potential issues.


Oracle max_deviation cannot be updated

Severity: Medium

Ecosystem: Aptos

Protocol: Aries Market

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Aries-Market-Contracts-Audit-Report.pdf

Report Date: Feb 2023

Description:

Oracle max_deviation cannot be updated in set_pyth_oracle and set_switchboard_oracle, the only way to change it is to unset the oracle and set it again.


Oracle Confidence Checks

Severity: Medium

Ecosystem: Aptos

Protocol: Argo

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

High oracle confidence values indicate that providers disagree on the actual price. Pyth, for example, represents confidence as the difference between the 25/75th quartile and the median price. In this case, it’s safer to ignore the value than to use a potentially inaccurate value.


Risk of Borrowing Undervalued Collateral

Severity: Medium

Ecosystem: Aptos

Protocol: Echelon Staked LPT

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Apr 2025

Description:

In the current implementation, the staked LPT oracle may undervalue liquidity provider tokens. While this does not impact their utilization as collateral—effectively acting as a reduced collateral factor—it is critical to prevent borrowing of these undervalued assets. An undervalued oracle price only limits borrowing power, which is acceptable as long as borrowing is not permitted against such assets.

Runtime/Development Issues - Overview

Debug-only, test, or misconfigured deployment code reaching production.

Runtime/Development IssuesFindings
Medium10
Total10

Medium Findings


Compile Failed

Severity: Medium

Ecosystem: Sui

Protocol: Mini Miners

Auditor: MoveBit

Report: Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Mini-Miners-Contract-Audit.pdf

Report Date: Apr 2023

Description:

The project fails to compile because the Sui client version is outdated. The Move.toml and related dependencies require Sui client 0.29. To fix this, upgrade the Sui client to version 0.29 and adjust any paths or configurations accordingly.


Unbound Function

Severity: Medium

Ecosystem: Sui

Protocol: Mini Miners

Auditor: MoveBit

Report: Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Mini-Miners-Contract-Audit.pdf

Report Date: Apr 2023

Description:

The project fails to compile because the Sui client version is outdated. The Move.toml and related dependencies require Sui client 0.29. To fix this, upgrade the Sui client to version 0.29 and adjust any paths or configurations accordingly.


Unit test cannot pass

Severity: Medium

Ecosystem: Sui

Protocol: Mini Miners

Auditor: MoveBit

Report: Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Mini-Miners-Contract-Audit.pdf

Report Date: Apr 2023

Description:

A required module import is missing — test_import_nft() fails due to the absence of import std::hash


Compile error

Severity: Medium

Ecosystem: Aptos

Protocol: PatronusFi

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/PatronusFi-Contract-Audit-Report.pdf

Report Date: Mar 2023

Description:

In vault.move, the withdraw_reserved_coins function has a return value that will always cause the project to fail to compile.


Unit Test Fails

Severity: Medium

Ecosystem: Aptos

Protocol: PatronusFi

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/PatronusFi-Contract-Audit-Report.pdf

Report Date: Mar 2023

Description:

The unit test fails and cannot be executed, the package cannot be found due to an error.


Key generic type Map lacks ability constraints to copy + drop

Severity: Medium

Ecosystem: Aptos

Protocol: Aries Market

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Aries-Market-Contracts-Audit-Report.pdf

Report Date: Feb 2023

Description:

map.move will cause compilation errors.


Package upgrade policy risk

Severity: Medium

Ecosystem: Aptos

Protocol: Aries Market

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Aries-Market-Contracts-Audit-Report.pdf

Report Date: Feb 2023

Description:

In Move.toml, upgrade policy to immutable to ensure packages are more safe for users.


Dependency Management

Severity: Medium

Ecosystem: Aptos

Protocol: Mole

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Mole-Aptos-Audit-Report.pdf

Report Date: Feb 2023

Description:

In Move.toml, modify to corresponding git commit version number.


Change the rev dependency to the git version number

Severity: Medium

Ecosystem: Aptos

Protocol: AptoPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/AptoPad-Aptos-Contracts-Audit-Report.pdf

Report Date: Feb 2023

Description:

In the Move.toml file, ensure latest version.


Dependency git rev should be a commit hash or a tag

Severity: Medium

Ecosystem: Aptos

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Aptos-Audit-Report.pdf

Report Date: Jan 2023

Description:

Dependency git rev should be a commit hash or a tag instead of a branch for reproducability. the branch may be updated in the future which may cause build to fail.

State Management - Overview

Improper updates, resets, or dependency on stale state causing protocol corruption or loss of sync.

State ManagementFindings
Critical7
High13
Medium17
Total37

Critical Findings


Arbitrary Lock Duration

Severity: Critical

Ecosystem: OL Network

Protocol: StakeWallet 2.0 by StakeSphere

Auditor: MoveJay

Report: https://github.com/Jayfromthe13th/OL-Audit/blob/Wallet/audit.md

Report Date: Apr 2024

Description:

The Lockbox module in the Slow Wallet v2.0 implementation allows users to lock assets for a specified period. However, a vulnerability exists where the DEFAULT LOCK DURATION constant is not enforced, allowing users to create lockboxes with arbitrary durations.


Improper Mint Limit Reset

Severity: Critical

Ecosystem: Sui

Protocol: Lombard Finance

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Dec 2024

Description:

The minting function incorrectly resets the remaining mint limit (left) during a new epoch, as it assigns the limit value directly instead of referencing it with *limit.


Outdated Variable VaultsValuation

Severity: Critical

Ecosystem: Sui

Protocol: ABEx Labs

Auditor: MoveBit

Report: https://movebit.xyz/reports/Abex-Smart-Contract-Audit-Report.pdf

Report Date: Aug 2023

Description:

When two VaultsValuation instances are created in a single transaction, only the first is updated during valuate_vault, leaving the second outdated. This allows a user to deposit again using stale valuation data, receiving excess LP tokens and potentially depleting protocol assets.


Lack of State Changes During Function Execution

Severity: Critical

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

The claim_refund function fails to update related state variables or mark the InvestCertificate as claimed, allowing users to reuse the same certificate multiple times to claim additional refunds.


Failure in Updating State Post Withdrawal

Severity: Critical

Ecosystem: Aptos

Protocol: Aries Markets

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2024

Description:

The withdraw_reserve_amount function in reserve_details is responsible for handling the withdrawal of a specified amount of reserve currency from the reserve. However, after completing the withdrawal, it fails to update the total_cash_available value stored in the ReserveDetails structure.


Insufficient Tracking of Flashloan Parameters

Severity: Critical

Ecosystem: Aptos

Protocol: ThalaSwapV2

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Aug 2024

Description:

In pool, the Flashloan structure contains a vector of unsigned 64-bit integers (u64) to represent the amounts of assets borrowed during the flash loan operation. However, the structure does not include any information about which specific assets were borrowed or from which pool the assets were borrowed. When a user initiates a flash loan, they borrow a specific amount of a particular asset from a liquidity pool. In a well-designed flash loan mechanism, the receipt of the flash loan should accurately record both the amount and the type of borrowed asset.


Absence of State Variable Update on Wallet Removal

Severity: Critical

Ecosystem: Aptos

Protocol: Aptos Securitize

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

In registry_service::remove_wallet , the failure to remove wallet_addr from the investor.wallets structure introduces a significant vulnerability. This results in inaccurate calculations in investor_wallet_balance_total , which, in turn, impacts various other functions in the project that depend on accurate wallet balances.

High Findings


Inability to End an Epoch

Severity: High

Ecosystem: Sui

Protocol: Sui Bridge

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Apr 2024

Description:

The register function allows a validator to register with a used public key (bridge_pubkey_bytes). When try_create_next_committee is called at the end of epoch, the function creates a new committee based on the registrations stored in member_registrations. When attempting to insert the members into the new_members mapping utilizing vec_map::insert, the insertion will fail if the public key already exists in the mapping. This prevents the system from creating a new committee even if enough stake is available. As a result, the committee is not updated properly, and an end of epoch would fail to attempt to create the committee.


Incorrect Flow Tracking

Severity: High

Ecosystem: Sui

Protocol: Sui Axelar(Gateway V2)

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2024

Description:

In the current implementation, the function utilizes self.flow_limit.add_flow_out(sui_amount, clock) to record the amount of tokens given out. This is inappropriate when the system is receiving tokens through an interchain transfer. Utilizing add_flow_out during a reception scenario inaccurately reflects the state of token flow. Instead of tracking tokens that are leaving the system, it should track tokens coming in.


Users Unable To Claim Surplus

Severity: High

Ecosystem: Sui

Protocol: Bucket

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: June 2023

Description:

When the debt amount (repay_amount) is greater than or equal to the Bottle debt, after calculating the collateral amount to return, the bottle.collateral_amount subtracts from it and returns true.That signifies the clearing of all debt. Now, the Bottle is destroyable. However, simply destroying the Bottle deletes it from the Bottle table, which results in the user being unable to claim their surplus collateral amount from the Bottle.


Absence of Functionality

Severity: High

Ecosystem: Sui

Protocol: Drife Technologies

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Dec 2023

Description:

The update_driver_state function fails to set on_ride to false after a successful ride completion. Additionally, a driver can complete a ride even when on_ride is already false, causing inconsistent state tracking and availability errors.


Multiple Active Rides

Severity: High

Ecosystem: Sui

Protocol: Drife Technologies

Auditor: OtterSec

Report: https://www.notion.so/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Dec 2023

Description:

A malicious user may call request_ride multiple times to accept multiple rides at once, resulting in situations where a single rider is associated with multiple active rides, disrupting the normal functioning of the ride-sharing service.


Missing State Validation

Severity: High

Ecosystem: Sui

Protocol: Navi

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Navi-Smart-Contract-Audit-Report.pdf

Report Date: July 2023

Description:

Storage data can be modified in many public functions even when admin has suspended transactions.


Liquidation Remarking

Severity: High

Ecosystem: Aptos

Protocol: Argo

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2022

Description:

Argo uses a descending auction system to process liquidations. When a vault is undercollateralized and eligible for liquidation, it becomes ”marked” and the descending auction begins. Unfortunately, this function does not ensure that the vault was not previously marked. As a result, a user attempting to prevent the liquidation of their vault can repeatedly mark their own vault to reset the descending auction.


Missing Snapshot Mechanism In Staking Module

Severity: High

Ecosystem: Aptos

Protocol: Merkle Token

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: July 2024

Description:

In staking, where voting power is derived from locked tokens, the absence of a snapshot mechanism to record past voting powers may result in critical issues affecting the integrity of voting processes. When a user unlocks their tokens via unlock , their voting power is effectively removed. Without a snapshot mechanism to preserve historical voting power, this removal retroactively impacts past voting records, invalidating previous votes or governance actions that depended on the user’s voting power.


Artificial Reduction of Investor Counts

Severity: High

Ecosystem: Aptos

Protocol: Aptos Securitize

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

There is an inconsistency in the way the system allows users to create zero-value fungible assets (FA) through fungible_asset::zero and deposit them via dispatchable_fungible_asset::deposit. A user with a zero FA balance may withdraw a zero-value FA and then deposit it, setting WithdrawCount.amount to zero.


Discrepancies in Updating Investor Count

Severity: High

Ecosystem: Aptos

Protocol: Aptos Securitize

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

In the existing implementation of compliance_service::record_burn (shown below), the function checks if the investor’s balance equals the value to be burned ( balance_who == (value as u64) ). However, it does not explicitly check if value is greater than zero before making this comparison or before adjusting the investor count. If value is zero, the condition will still evaluate to true, which will decrease the total investor count incorrectly, even though the investor was already inactive (with a zero balance) and should not have been counted.


Failure to Distribute Staking Rewards

Severity: High

Ecosystem: Aptos

Protocol: Kofi Finance Contacts

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2025

Description:

rewards_manager::update_rewards handles staking reward calculations and distributions during epoch changes. A manager fee is deducted, and the remaining APT rewards are minted as kAPT and deposited into the vault via the minting_manager::mint_to_vault function. However, while kAPT coins are successfully minted, the virtual_balance , which tracks deposited kAPT and determines the exchange rate, is not updated. This oversight permanently locks staking rewards, preventing distribution to stakers


Address mismatch in configuration data storage & retrieval#19

Severity: High

Ecosystem: Aptos

Protocol: AAVE V3

Auditor: Cantina Contest SRs

Report: https://cantina.xyz/code/ad445d42-9d39-4bcf-becb-0c6c8689b767/findings/19

Report Date: May 2025

Description:

The AAVE protocol has a fundamental address mismatch where configuration data is stored at one blockchain address (@aave_data) but all retrieval functions attempt to read from a completely different address (@aave_pool). This is equivalent to storing your house keys in one safe but always looking for them in a different safe.


Missing max_id in update in batch_add_addr

Severity: High

Ecosystem: Aptos

Protocol: MoveDID

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/MoveDID-Aptos-Contracts-Audit-Report.pdf

Report Date: Nov 2022

Description:

add_addr modifies max_id when adding the address, but batch_add_addr does not.

Medium Findings


Assets May be Locked in Proposals

Severity: Medium

Ecosystem: Sui

Protocol: Legend of Arcadia

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Legend-of-Arcadia-Smart-Contract-Audit-Report.pdf

Report Date: Jun 2023

Description:

A proposal cannot be canceled until it reaches an approval or rejection threshold. Proposals can get stuck if MultiSignature participants are inactive and not voting, causing data or assets in the proposal to be locked.


Lack of Validation for Campaign Status in invest

Severity: Medium

Ecosystem: Sui

Protocol: SuiPad

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/SuiPad-Smart-Contract-Audit-Report.pdf

Report Date: Apr 2023

Description:

No validation for closed campaigns — users can invest in campaigns that are already closed, leading to confusion or incorrect token distribution.


No Pool Status Check

Severity: Medium

Ecosystem: Sui

Protocol: Cetus Concentrated Liquidity Protocol

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Cetus-Concentrated-Liquidity-Protocol-Sui-Contract-Audit-Report.pdf

Report Date: Mar 2023

Description:

No suspension checks — functions like repay_flash_swap, repay_flash_swap_with_partner, update_pool_url, and update_fee_rate can still modify pool data even when the pool is suspended.


Owner’s address is not updated

Severity: Medium

Ecosystem: Sui

Protocol: Mini Miners

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Mini-Miners-Contract-Audit.pdf

Report Date: Apr 2023

Description:

info is a shared object, so ownership cannot be transferred through transfer, and after the change the ownership, the owner address in info is not updated, and the next assert will panic.


Reserve Interest Not Updated in Timely Manner

Severity: Medium

Ecosystem: Sui

Protocol: Aries Market

Auditor: MoveBit

Report: https://github.com/movebit/Sampled-Audit-Reports/blob/main/reports/Aries-Smart-Contract-Audit-Report.pdf

Report Date: June 2023

Description:

Interest may become outdated for long-standing loans; recommend periodic updates to keep interest calculations synchronized.


Shared Global Vault Without Pool-Specific Balance Tracking Enables Cross-Pool Reward Drainage

Severity: Medium

Ecosystem: Sui

Protocol: Magma DEX

Auditor: Three Sigma

Report: https://cdn.sanity.io/files/qoqld077/staging/9566473c444a6cfd99c7a6556fa4857950b41de3.pdf

Report Date: July 2025

Description:

The ALMM protocol implements a reward system where all pools share a single RewarderGlobalVault instance, while each pool maintains its own RewarderManager for tracking reward emissions and growth. The critical flaw lies in the absence of pool-specific reward balance tracking within the global vault, allowing pools to withdraw rewards that were intended for other pools.


Epoch Mismatch in Storage Reclamation

Severity: Medium

Ecosystem: Sui

Protocol: Walrus

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description:

Epoch mismatch causes extend_blob to fail: decrease_storage_to_reclaim in storage_accounting attempts to reduce storage in the wrong epoch.


Risk of Compromising Snapshot Integrity

Severity: Medium

Ecosystem: Sui

Protocol: Mysten Republic Security Token

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Apr 2025

Description:

total_supply compromised during join. join allows two different tokens to be merged into one, potentially altering the balances and total supply of tokens mid-snapshot. If tokens that are part of the snapshot join with those that are, total_supply will no longer be equal to unlocked_sum + locked_sum.


Health Check Performed On Outdated State

Severity: Medium

Ecosystem: Sui

Protocol: Navi

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: June 2023

Description:

The is_health assert in execute_withdraw and execute_borrow in logic.move depends on the user’s collateral and loan balances. However, these balances are not updated with update_state during health validation, potentially causing inaccuracies. This issue is particularly impactful during the liquidation process, as outdated collateral asset states may lead to exclusion from liquidation.


Improper Stake Update

Severity: Medium

Ecosystem: Sui

Protocol: Bucket

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: June 2023

Description:

In the handle_redeem function in bucket.move, when redeeming Bottles, the else case inside the while loop handles the last Bottle’s redemption. When the remaining redemption amount is less than the Bottle’s buck amount, the loop ends in the else case with a break and skips the call to bottle::update_stake_and_total_stake_by_debtor on the last Bottle. Needs bottle::update_stake_and_total_stake_by_debtor on break.


Restake Sui

Severity: Medium

Ecosystem: Sui

Protocol: Volo

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2023

Description:

A vulnerability arises when a user creates an UnstakeTicket for a large stake. This may prevent the user from burning the ticket and reclaiming the staked SUI during the current epoch.


Include Pending In Unstake

Severity: Medium

Ecosystem: Sui

Protocol: Volo

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2023

Description:

native_pool::burn_ticket_non_entry employs native_pool::unstake_amount_from_validators to collect SUI for returns to the user. However, it does not consider the coins held in NativePool::pending.


Missing Timestamp Update

Severity: Medium

Ecosystem: Aptos

Protocol: Aries Markets

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: May 2024

Description:

When adding or removing rewards in the liquidity farming contract, the update_reward function is called to adjust the reward per share based on the elapsed time (time_diff). However, these functions currently do not update the farm.timestamp after invoking update_reward. Consequently, if subsequent reward distribution actions occur without updating the timestamp, the rewards for the same time period will be double-claimed.


Wallet Balance Misverification

Severity: Medium

Ecosystem: Aptos

Protocol: Aptos Securitize

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

ds_token::check_wallets_for_list checks the total token balance for an investor instead of the balance in each individual wallet. This implies that even if a wallet holds zero tokens, it will still be added tothe active wallet list if the investor’s total balance is non-zero. This discrepancy may allow an investor to create a large number of empty wallets that are added to the wallet tracking structures ( wallet_indexes and wallet_list ). Thus, an investor may create numerous dead wallets (wallets with a zero token balance), initiating a token transfer to each of these wallets with a value of zero.


Missing Bound Check on Lock Removal

Severity: Medium

Ecosystem: Aptos

Protocol: Aptos Securitize

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

When a lock is removed, it is not actually deleted from the SmartTable storing lock records. This renders the data accessible in the system even after it is supposedly removed. Since locks are not fully removed from the SmartTable , view functions may show locks that should have been deleted. Also, the lock_index is not validated to ensure it is within the bounds of the investor’s lock count. Thus, the lock_index values may be out of bounds, potentially attempting to delete nonexistent records. As a result, the same lock may be removed multiple times repeatedly, each time decreasing the lock count.


Failure to Clear Investor Attributes After Removal

Severity: Medium

Ecosystem: Aptos

Protocol: Aptos Securitize

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Oct 2024

Description:

In registry_service::remove_investor , when an investor is removed, only their main record in the investors table is deleted. Any associated data, such as compliance attributes, remains in the attributes table. If a new investor is later registered with the same ID as the removed investor, the system will inadvertently link the new investor to the old attributes, potentially allowing unintended access to privileges based on deleted investor’s attributes.


Failure to Convert to veTHL

Severity: Medium

Ecosystem: Aptos

Protocol: Thala LSD

Auditor: OtterSec

Report: https://ottersec.notion.site/Sampled-Public-Audit-Reports-a296e98838aa4fdb8f3b192663400772

Report Date: Feb 2025

Description:

When a user unlocks their veTHL via vetoken::unlock , the system resets the unlockable_epoch to zero. Additionally, if a user registers an account without locking veTHL , unlockable_epoch is also set to zero.


Appendix: Move Protocols & Audit Reports

OtterSec Reports

  • Cetus DLMM - Nov 2025
  • Kuna Labs – Jun 2025
  • Aptos ULN 301 – May 2025
  • Kofi Finance Contacts – May 2025
  • Thala Chainlink Oracle – May 2025
  • Mysten Republic Security Token – Apr 2025
  • Mysten Deepbook V3 – Apr 2025
  • Echleon – Apr 2025
  • Echleon Staked LPT – Apr 2025
  • Mayan Sui – Feb 2025
  • Solend Steam – Feb 2025
  • Lombard Sui – Feb 2025
  • Walrus Contracts – Feb 2025
  • Thala LSD – Feb 2025
  • Thala Deps – Feb 2025
  • Emojicoin – Feb 2025
  • Thala Swap + Math V2 – Jan 2025
  • Aftermath Market Making – Jan 2025
  • TruFin – May 2024
  • Amnis Finance – May 2024
  • Aries Markets – May 2024
  • Sui Axelar Gateway V2 – May 2024
  • Cetus – May 2024
  • Turbos – May 2024
  • First Digital – Jun 2024
  • Mysten Deepbook – Aug 2024
  • Fungible StakedSui – Aug 2024
  • ThalaSwapV2 – Aug 2024
  • Merkle Token – Jul 2024
  • Merso Lending – Jul 2024
  • Hop Aggregator – Oct 2024
  • Solend Liquid Staking – Oct 2024
  • Aptos Securitize – Oct 2024
  • BlueFin Spot – Nov 2024
  • Lombard Finance – Dec 2024
  • Wormhole Sui Integration – Dec 2024
  • Drife Technologies – Dec 2023
  • Haedel LSD – Nov 2023
  • Volo – Oct 2023
  • Aftermath LSD – Oct 2023
  • Tsunami GMX – Sep 2023
  • Pontem clmm – Aug 2023
  • Scallop – Jul 2023
  • Navi – Jun 2023
  • Bucket – Jun 2023
  • Tortugal – Jun 2023
  • Aries Market (Sui) – Jun 2023
  • Thala – May 2023
  • Aftermath – May 2023
  • Wormhole Sui – May 2023
  • Mysten Labs Sui (Rust and Move) – May 2023
  • BlueJay – May 2023
  • Ghost Ivy – May 2023
  • Lucky Kat – May 2023
  • Suia – May 2023
  • Steamflow – Mar 2023
  • Typus Finance – Apr 2023
  • MovEX – Apr 2023
  • KriyaDEX – Apr 2023
  • MSafe Maven – Apr 2023
  • SuiPad – Apr 2023
  • Mini Miners – Apr 2023
  • Mokshya/Wapal Aptos NFT Mint Smart – Mar 2023
  • PatronusFi – Mar 2023
  • Aries Market (Aptos) – Feb 2023
  • Mole – Feb 2023
  • AptoPad – Feb 2023
  • Thala Labs – Feb 2023
  • Wormhole NFT Aptos – Feb 2023
  • Eternal Finance – Jan 2023
  • Cetus – Jan 2023
  • Pontem Harvest – Jan 2023
  • PancakeSwap OFT – Dec 2022
  • PancakeSwap IFO – Dec 2022
  • Econia – Dec 2022
  • Meeiro – Dec 2022
  • Aries Markets – Nov 2022
  • Swithboard Aptos – Nov 2022
  • Pancake Swap – Nov 2022
  • Laminar Markets – Oct 2022
  • Argo – Oct 2022
  • Tortuga – Oct 2022
  • Ditto – Oct 2022
  • Pyth – Oct 2022
  • Wormhole Aptos – Oct 2022
  • MSafe – Oct 2022
  • LayerZero Aptos – Sep 2022
  • Pontem (Liquidswap) – Sep 2022

MoveBit Reports

  • FlowX Finance – May 08, 2024
  • Liquidswap – Apr 20, 2024
  • Pontem – Apr 20, 2024
  • MoveGPT – Apr 11, 2024
  • StreamFlow – Mar 26, 2024
  • Superposition – Mar 26, 2024
  • Amnis – Mar 14, 2024
  • Cellana Smart Contract – Feb 20, 2024
  • Dola Protocol – Feb 07, 2024
  • Random-Vault – Feb 02, 2024
  • Cetus Farming Smart Contracts – Jan 19, 2024
  • vibrantX – Jan 08, 2024
  • Baptswap – Dec 18, 2023
  • Haedel – Dec 04, 2023
  • Kuna Labs Yield Optimizer Smart Contract – Nov 15, 2023
  • Aftermath Finance Liquid Staking Derivative – Nov 21, 2023
  • Supra – Sep 10, 2023
  • Volo – Sep 07, 2023
  • Kanalabs aggregator Smart Contract – Sep 07, 2023
  • Scallop – Jun 2023
  • Bucket Protocol – Jun 2023
  • Legend of Arcadia – Jun 2023
  • Aries Market (Sui) – Jun 2023
  • Navi – Jul 2023
  • Talofa Corporation – May 2023
  • Turbos Finance-TurboStar – May 2023
  • Lucky Kat – May 2023
  • Suia – May 2023
  • Typus Finance – Apr 2023
  • MovEX – Apr 2023
  • KriyaDEX – Apr 2023
  • MSafe Maven – Apr 2023
  • SuiPad – Apr 2023
  • Mini Miners – Apr 2023
  • Merkle Trade Smart Contract – Jul 21, 2023
  • Mokshya/Wapal Aptos NFT Mint Smart – Mar 2023
  • PatronusFi – Mar 2023
  • Cetus Concentrated Liquidity Protocol (Sui) – Mar 2023
  • Aries Market (Aptos) – Feb 2023
  • Mole – Feb 2023
  • AptoPad – Feb 2023
  • Cetus Concentrated Liquidity Protocol (Aptos) – Jan 2023
  • Transit Finance – Nov 2022
  • Sui AMM swap – Nov 2022
  • MoveDID – Nov 2022

Zellic Reports

  • Matrixdock – Jul 28, 2025
  • Garden Move Deploy – Jun 4, 2025
  • Cetus – Apr 11, 2025
  • Magma Finance – Jan 31, 2025
  • Echelon – Jan 16, 2025
  • Econia – Jan 5, 2023
  • Wormhole Aptos – Nov 29, 2022
  • PancakeSwap Aptos – Nov 17, 2022
  • LiquidSwap – Nov 3, 2022
  • OFT – Nov 1, 2022
  • Laminar Markets – Oct 26, 2022
  • Tortuga Liquid Staking – Oct 21, 2022
  • Aptos Dollar – Oct 7, 2022
  • Momentum Safe – Sep 23, 2022

MoveJay Audit Reports

  • Aave Core
  • Aave Core v2
  • Aave Periphery
  • Navi
  • Kofi Finance
  • Poel
  • Studio Mirai
  • OL Network
  • Dexlyn Bridge
  • Project Z
  • StakeSphere
  • AquaSwap
  • Thala

Hacken / HackenProof

  • Hacken S3Money – Jan 2025
  • Hacken Volo – Sep 2023
  • Hacken Zesh AI – Dec 2024
  • HackenProof DexLyn Smart Contract Audit Contest – Sep 2025

Pashov

  • Elixir – Aug 2025

ExVul

  • Hyperion – Apr 2025
  • TokinmonsterAI – May 2025
  • Mango – Jul 2025

Protocol-specific Reports

  • AAVE v3.0.2 Core Certora – Apr 2025
  • AAVE v3.1-3.3 Core Certora – Apr 2025
  • AAVE v3.1-3.3 Core OtterSec – Aug 2025
  • AAVE v3.0.2 Core Spearbit – Jun 2025
  • AAVE v3.1-3.3 Core Spearbit – Jun 2025
  • AAVE v3.0.2 Periphery Spearbit – Jun 2025

Contests

  • AAVE v3 Cantina Contest – May–Jun 2025
  • Initia Cabal Liquid Staking Code4Arena Contest – May 2025
  • Initia Move Code4Arena Contest – Apr 2025

Zenith

  • KoFi Finance - Mar 2025

Quantstamp

  • Echelon Market – Mar 2025
  • BucketV2 – Aug 2025

SlowMist

  • Yeap Finance – Jul 2025

Three Sigma

  • Magma DEX – Jul 2025

Access the reports using the links below:

Sui Learning Resources

📖 Reading & Documentation

Whitepapers & Books

Articles

🔐 Security-Specific

🎥 Video Courses & Tutorials

🎮 Interactive & Gamified

🛠️ Hands-On Practice


Aptos Learning Resources

📖 Reading & Documentation

Whitepapers & Books

Articles

🔐 Security-Specific

🎮 Interactive & Gamified


Academic Research & General Move Resources

📚 Academic Journals

📝 General Move Articles (CertiK Series)

Move for Solidity Developers Series