Welcome to the Move Vulnerability Database (MVD) v2.0!
A comprehensive collection of vulnerability patterns in the Move ecosystem.
What's Inside
- Vulnerability Patterns - Categorized security issues with examples and severity ratings
- Appendix - Audit reports and protocol references
- Learning Resources - Curated materials for learning Move security
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 Patterns | Findings |
|---|---|
| Business Logic | 137 |
| Calculation Errors | 87 |
| Input Validation | 59 |
| Access Control | 41 |
| State Management | 37 |
| Denial of Service | 27 |
| Oracle Issues | 19 |
| Data Inconsistency | 17 |
| Missing Functions | 17 |
| Centralization Risk | 16 |
| Gas-related Issues | 11 |
| Runtime/Development Issues | 10 |
| Constant Definition | 7 |
| Looping Issues | 6 |
| Front-running | 5 |
| Cross-Implementation | 2 |
| Missing Version Check | 2 |
| Inflation Attacks | 1 |
| Total | 501 |
Data sourced from public Move audit reports by the following auditors/firms:
| Audit Firm/Auditor | Report Links |
|---|---|
| OtterSec | Sampled Public Audit Reports (OtterSec Notion) |
| MoveBit | MoveBit — Sampled Audit Reports |
| MoveJay | MoveJay (Jayfromthe13th) |
| Zellic | Zellic Reports |
| Spearbit | Spearbit Reports |
| Cantina | Cantina Reports |
| Code4Arena | Code4Arena Reports |
| Certora | Certora Security Reports |
| Hacken | Hacken Audits |
| Pashov Audit Group | Pashov Audit Group — Audits |
| ExVul Security | ExVul Audits |
| Quantstamp | Quantstamp Reports |
| SlowMist | SlowMist Reports |
| Three Sigma | Three Sigma Reports |
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 Patterns | Findings |
|---|---|
| Business Logic | 137 |
| Calculation Errors | 87 |
| Input Validation | 59 |
| Access Control | 41 |
| State Management | 37 |
| Denial of Service | 27 |
| Oracle Issues | 19 |
| Data Inconsistency | 17 |
| Missing Functions | 17 |
| Centralization Risk | 16 |
| Gas-related Issues | 11 |
| Runtime/Development Issues | 10 |
| Constant Definition | 7 |
| Looping Issues | 6 |
| Front-running | 5 |
| Cross-Implementation | 2 |
| Missing Version Check | 2 |
| Inflation Attacks | 1 |
| Total | 501 |
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 Patterns | RWE | C | H | M | Total |
|---|---|---|---|---|---|
| Business Logic | 17 | 50 | 70 | 137 | |
| Calculation Errors | 10 | 25 | 52 | 87 | |
| Input Validation | 14 | 23 | 22 | 59 | |
| Access Control | 12 | 18 | 11 | 41 | |
| State Management | 7 | 13 | 17 | 37 | |
| Denial of Service | 1 | 2 | 24 | 27 | |
| Oracle Issues | 1 | 3 | 4 | 11 | 19 |
| Data Inconsistency | 2 | 9 | 6 | 17 | |
| Missing Functions | 1 | 3 | 13 | 17 | |
| Centralization Risk | 8 | 8 | 16 | ||
| Gas-related Issues | 11 | 11 | |||
| Runtime/Development Issues | 10 | 10 | |||
| Constant Definition | 2 | 1 | 4 | 7 | |
| Looping Issues | 1 | 2 | 3 | 6 | |
| Front-running | 3 | 2 | 5 | ||
| Cross-Implementation | 2 | 2 | |||
| Missing Version Check | 2 | 2 | |||
| Inflation Attacks | 1 | 1 | |||
| Total | 1 | 70 | 163 | 267 | 501 |
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 Control | Findings |
|---|---|
| Critical | 12 |
| High | 18 |
| Medium | 11 |
| Total | 41 |
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 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 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 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
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 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 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 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 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 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 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 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 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 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 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 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 Logic | Findings |
|---|---|
| Critical | 17 |
| High | 50 |
| Medium | 70 |
| Total | 137 |
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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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
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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 Date: Apr 2025
Description:
Two validation issues exist in the lp.move contract's LP token creation functions:
- Token Pair Order Issue in
get_pool_seedsFunction
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.
- 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 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 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 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 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 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 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 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 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 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 Errors | Findings |
|---|---|
| Critical | 10 |
| High | 25 |
| Medium | 52 |
| Total | 87 |
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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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
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 Risk | Findings |
|---|---|
| High | 8 |
| Medium | 8 |
| Total | 16 |
High Findings
BKT Token Centralization Risk
Severity: High
Ecosystem: Sui
Protocol: Bucket
Auditor: MoveBit
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 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 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 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 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 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 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 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 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 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 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-Implementation | Findings |
|---|---|
| Medium | 2 |
| Total | 2 |
Medium Findings
collector and AToken treasury incompatibilities
Severity: Medium
Ecosystem: Aptos
Protocol: AAVE Periphery
Auditor: Spearbit
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 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 Definition | Findings |
|---|---|
| Critical | 2 |
| High | 1 |
| Medium | 4 |
| Total | 7 |
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 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 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 Date: June 2025
Description:
Incorrect constant.
Data Inconsistency - Overview
Desynchronized or outdated state across contracts or storage variables breaking protocol invariants.
| Data Inconsistency | Findings |
|---|---|
| Critical | 2 |
| High | 9 |
| Medium | 6 |
| Total | 17 |
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 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 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.
| DoS | Findings |
|---|---|
| Critical | 1 |
| High | 2 |
| Medium | 24 |
| Total | 27 |
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 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 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 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 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 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-running | Findings |
|---|---|
| High | 3 |
| Medium | 2 |
| Total | 5 |
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 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 Issues | Findings |
|---|---|
| Medium | 11 |
| Total | 11 |
Medium Findings
Dutch Gas Optimization
Severity: Medium
Ecosystem: Sui
Protocol: Typus Finance
Auditor: MoveBit
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 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 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 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 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 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 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 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 Attacks | Findings |
|---|---|
| Medium | 1 |
| Total | 1 |
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 Validation | Findings |
|---|---|
| Critical | 14 |
| High | 23 |
| Medium | 22 |
| Total | 59 |
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 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 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 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 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 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 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 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 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 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 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 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
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 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 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 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 Date: Apr 2023
Description:
You can create a pool with two of the same token.
Multiple related functions do not limit the empty Vector
Severity: Medium
Ecosystem: Sui
Protocol: Sui AMM swap
Auditor: MoveBit
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 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 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 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 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 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 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 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 Issues | Findings |
|---|---|
| Critical | 1 |
| High | 2 |
| Medium | 3 |
| Total | 6 |
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 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 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 Functions | Findings |
|---|---|
| Critical | 1 |
| High | 3 |
| Medium | 13 |
| Total | 17 |
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 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 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 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 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 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.
set_interest_fee_bps().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 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 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 Check | Findings |
|---|---|
| High | 2 |
| Total | 2 |
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 Issues | Findings |
|---|---|
| Real World Exploit | 1 |
| Critical | 3 |
| High | 4 |
| Medium | 11 |
| Total | 19 |
Real World Exploit
Price manipulation
Severity: Real World Exploit
Ecosystem: Sui
Protocol: Typus Finance
Auditor: blackhat
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 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 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 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 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 Date: Aug 2025
Description:
get_asset_price_internal does not validate for freshness of the data while retrieving prices from feeds.
Missing check stale price from Chainlink
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 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 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 Issues | Findings |
|---|---|
| Medium | 10 |
| Total | 10 |
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 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 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 Date: Feb 2023
Description:
map.move will cause compilation errors.
Package upgrade policy risk
Severity: Medium
Ecosystem: Aptos
Protocol: Aries Market
Auditor: MoveBit
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 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 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 Management | Findings |
|---|---|
| Critical | 7 |
| High | 13 |
| Medium | 17 |
| Total | 37 |
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 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 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 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 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 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 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 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:
| Audit Firm/Auditor | Report Links |
|---|---|
| OtterSec | Sampled Public Audit Reports (OtterSec Notion) |
| MoveBit | MoveBit — Sampled Audit Reports |
| MoveJay | MoveJay (Jayfromthe13th) |
| Zellic | Zellic Reports |
| Spearbit | Spearbit Reports |
| Cantina | Cantina Reports |
| Code4Arena | Code4Arena Reports |
| Certora | Certora Security Reports |
| Hacken | Hacken Audits |
| Pashov Audit Group | Pashov Audit Group — Audits |
| ExVul Security | ExVul Audits |
| Quantstamp | Quantstamp Reports |
| SlowMist | SlowMist Reports |
| Three Sigma | Three Sigma Reports |
Sui Learning Resources
📖 Reading & Documentation
Whitepapers & Books
Articles
- Sui Move for EVM and SVM Developers: Part 1 - Mental Models - Adevar Labs
- How Sui Move Rethinks Flash Loan Security - Trail of Bits
- Move Fast & Break Things, Part 2: A Sui Security Primer - Zellic
- The Billion Dollar Bug: Finding and Fixing a Critical Issue in the Move Bytecode Verifier - Zellic
- Introducing Movetool: A Move Bytecode Disassembler - Zellic
- Sui Foundation Move Blogs - Sui Foundation
🔐 Security-Specific
- Understand Sui Security - Official Docs
- Sui MOVE Smart Contract Auditing Primer - SlowMist
🎥 Video Courses & Tutorials
- Introduction to Sui - Dacade
- Build On Sui Playlist - Sui Community
- Move on Sui Course - MoveBit
🎮 Interactive & Gamified
- Let's Move Sui - Mysten Labs
🛠️ Hands-On Practice
- Building a Dapp with React, Move, and zkLogin on Sui - Dacade
- Building with Sui DeepBook: A DeFi Tutorial - Dacade
- Master Sui Move, Build Beyond - Metaschool
- Move on Sui Course - RiseIn
Aptos Learning Resources
📖 Reading & Documentation
Whitepapers & Books
Articles
- Move Fast and Break Things Part 1 - Zellic
- Top 10 Aptos Move Bugs - Zellic
- Aptos Network Blogs - Aptos Network
🔐 Security-Specific
- Move Security Guidelines - Official Docs
🎮 Interactive & Gamified
Academic Research & General Move Resources
📚 Academic Journals
- A Comparative Study of Solidity and Sui Move
- A Systematic Classification of Vulnerabilities in MoveEVM Smart Contracts
- Deferred Objects to Enhance Smart Contract Programming with Optimistic Parallel Execution
📝 General Move Articles (CertiK Series)
- An Introduction to Move
- Formal Verification, the Move Language, and the Move Prover
- The Move Prover: Quality Assurance of Formal Verification
- Facebook's "Move" Programming Language vs Solidity and DeepSEA
Move for Solidity Developers Series