Skip to content

Latest commit

 

History

History
88 lines (75 loc) · 6.34 KB

File metadata and controls

88 lines (75 loc) · 6.34 KB

Attack Tree Analysis for fuellabs/sway

Objective: Execute Arbitrary Code/Manipulate Contract State on FuelVM

Attack Tree Visualization

                                      Attacker's Goal:
                      Execute Arbitrary Code/Manipulate Contract State on FuelVM
                                                |
          -------------------------------------------------------------------------
          |						|
  1. Sway Language Vulnerabilities       2. FuelVM Implementation Flaws
          |						|
  ---------------------               ---------------------------------
  |						|				 |
1.1 Integer                         2.1 Gas Metering  2.3 Instruction
Overflow/Underflow                  Bugs            Handling Bugs
          |						|				 |
  --------                            --------      --------
  |					    |			 |	  |
1.1.1                               2.1.2         2.3.1  2.3.2
Unsigned                            Incorrect     Incorrect  Logic
Integer                             Gas Limit     Opcode     Opcode
Overflow                            Calculation   Handling   Behavior
Leading to                          [CRITICAL]    [CRITICAL] [CRITICAL]
Unexpected
Behavior
[HIGH RISK]
  • 1.1 Integer Overflow/Underflow:

    • 1.1.1 Unsigned Integer Overflow [HIGH RISK]:
      • Description: Sway uses unsigned integer types (e.g., u64). When a calculation results in a value larger than the maximum representable value for the type, the value "wraps around" to zero. This can lead to unexpected and exploitable behavior in contract logic.
      • Example:
        fn vulnerable_function(amount: u64) {
            let balance: u64 = 10;
            let new_balance = balance + amount; // Potential overflow!
            if new_balance > balance {
                // ... logic that might be bypassed due to overflow ...
            }
        }
        If amount is a very large number (e.g., close to u64::MAX), new_balance could become smaller than balance due to the wrap-around, bypassing the intended logic.
      • Exploitation: An attacker could craft an input (amount in the example) that triggers the overflow, causing the contract to behave in a way that benefits the attacker (e.g., transferring more tokens than intended, bypassing access controls).
      • Mitigation:
        • Use Sway's checked arithmetic operators (checked_add, checked_sub, checked_mul, checked_div). These operators return an Option<u64>, which will be None if an overflow occurs. The contract can then handle the error appropriately.
        • Thoroughly audit all arithmetic operations, especially those involving user-supplied input.
        • Consider using libraries that provide safe integer types (if available).
        • Extensive testing, including fuzzing, to identify potential overflow conditions.
  • 2.1 Gas Metering Bugs:

    • 2.1.2 Incorrect Gas Limit Calculation [CRITICAL]:
      • Description: The FuelVM is responsible for calculating and enforcing gas limits for transactions. If there's a bug in this calculation, an attacker might be able to execute more operations than intended, potentially exceeding the intended resource limits.
      • Exploitation: An attacker could craft a transaction that, due to the incorrect gas limit calculation, allows them to execute a computationally expensive operation or a sequence of operations that would normally be rejected due to exceeding the gas limit. This could lead to denial of service or, in extreme cases, potentially enable other vulnerabilities.
      • Mitigation:
        • This is primarily a FuelVM implementation issue. The Fuel Labs team is responsible for addressing this.
        • Application developers should stay updated with FuelVM releases and security advisories.
        • Report any suspected gas calculation bugs to the Fuel Labs team immediately.
        • Extensive testing and fuzzing of the FuelVM itself (by the Fuel Labs team) is crucial.
  • 2.3 Instruction Handling Bugs:

    • 2.3.1 Incorrect Opcode Handling [CRITICAL]:

      • Description: The FuelVM executes bytecode instructions (opcodes). If there's a bug in the implementation of a specific opcode, the FuelVM might behave unexpectedly. This could range from incorrect calculations to memory corruption.
      • Exploitation: An attacker could craft a transaction containing a specific sequence of opcodes that triggers the bug in the FuelVM's opcode handling. This could potentially lead to arbitrary code execution or manipulation of the contract's state.
      • Mitigation:
        • This is a FuelVM implementation issue. The Fuel Labs team is responsible for addressing this.
        • Application developers should stay updated with FuelVM releases and security advisories.
        • Report any suspected opcode handling bugs to the Fuel Labs team immediately.
        • Extensive testing, fuzzing, and formal verification of the FuelVM (by the Fuel Labs team) are crucial.
    • 2.3.2 Logic Opcode Behavior [CRITICAL]:

      • Description: Similar to incorrect opcode handling, but specifically focusing on logical errors within the intended behavior of an opcode. Even if the opcode is "handled" correctly in terms of memory safety, a flaw in its logical implementation could lead to vulnerabilities.
      • Exploitation: An attacker could craft a transaction that leverages the flawed logic of a specific opcode to achieve unintended results, such as manipulating contract state in an unauthorized way.
      • Mitigation:
        • This is a FuelVM implementation issue. The Fuel Labs team is responsible for addressing this.
        • Application developers should stay updated with FuelVM releases and security advisories.
        • Report any suspected opcode logic bugs to the Fuel Labs team immediately.
        • Extensive testing, fuzzing, and formal verification of the FuelVM (by the Fuel Labs team) are crucial.