Audit Comp | Firedancer v0.1-logo

Audit Comp | Firedancer v0.1

Firedancer is a new validator client for Solana.

Solana
Infrastructure
Validator
C/C++

Status

Finished
Rewards Pool
$1,000,000
Vault TVL
To be determined
Started
10 July 2024
Ended
21 August 2024
Rewards Token
USDC
nSLOC
200,000
  • Triaged by Immunefi

  • PoC required

  • KYC required

Select the category you'd like to explore

Assets in Scope

Target
Type
Blockchain/DLT - Firedancer v0.1 Testnet (only directory and file listed in this file [https://asymmetric-assets.s3.amazonaws.com/fdctl-scope.txt?utm_source=immunefi] are within the scope)
Added on
10 July 2024

Impacts in Scope

Proof of Concept (PoC) Requirements

A PoC, demonstrating the bug's impact, is required for this program and has to comply with the Immunefi PoC Guidelines and Rules.

Whitehat Educational Resources & Technical Info

Is this an upgrade of an existing system? If so, which? And what are the main differences?

This is a complete ground-up implementation of a Solana protocol client. It was based on the Agave client (https://github.com/anza-xyz/agave), which is written in Rust, but this implementation is written from scratch in C.

Where do you suspect there may be bugs? Valuable aspects of this question are:

Which parts of the code are you most concerned about?

What attack vectors are you most concerned about?

  • Any attack vector that results in the loss of funds
  • Remote Code Execution, leading to compromise of validator key material or arbitrary transaction signing
  • Denial of Service, leading to degradation or loss of service availability
  • Global Denial of Service, leading to consensus failure, excessive forking, or chain halts

Which part(s) of the system do you want whitehats to attempt to break the most?

  • Signature Verification Tile (Denial of Service / RCE / Arbitrary Signing)
  • Network and QUIC Tiles (Denial of Service / RCE)
  • Sandbox Escape or Violation (Abusing the sandbox or violation of sandbox policies for unexpected outcomes)
  • Inconsistencies between Firedancer / Agave behavior that lead to unsafe outcomes.

Are there any assumed invariants that you want whitehats to attempt to break?

  • If any tile is compromised, the sandbox should contain its effects on that tile. It should not allow the compromise to significantly impact other tiles and/or the system.

Would you consider any bug report requiring their involvement to be out of scope as long as they operate within the privileges attributed to them?

  • Any bug reports that assume a pre-existing compromise of the validator operating system, applications, or any administrative control over the operating system.
  • Any bug dependent on exploiting vulnerabilities in the agave client codebase.
  • Any bug reports that require social engineering or physical attack on a person or the system.
  • Any bug reports that assume a malicious operator or the like.
  • Any bug that is not exploitable on the latest stable and supported Linux distributions (Ubuntu, Debian, Fedora, or Red Hat Distributions).
  • Any bug that is not focused on x86 architecture.
  • Any bug that is not exploitable on the latest stable and supported GCC versions.
  • Any bug that has an initial vector of compromise in a dependency.
  • Any bug in a dependency that is not exclusive to Firedancer should instead be reported to the upstream repo. (For example, If you find a bug in Agave that also affects Agave, you should report it to the Agave bug bounty program instead).

What external dependencies are there?

Build Dependencies: perl, autoconf, gettext, automake, autopoint, flex, bison, build-essential, gcc-multilib, protobuf-compiler, llvm, lcov, libgmp-dev, cmake.

Where might whitehats confuse out-of-scope code to be in-scope?

Code exists in the repository, which is in development but not yet executed by the validator, while it currently leverages the Agave client for these functions - for example, src/flamenco/runtime/, src/ballet/sbpf/. Attempts have been made above to make this very clear in the file dump listing at the bottom of the scope table, but there may be some minor exceptions that we can clear up if there are questions.

Are there any unusual points about your protocol that may confuse whitehats?

TLS stack handwritten only contains the parts absolutely necessary for Firedancer

What is the test suite setup information?

  • GitHub Actions: https://github.com/firedancer-io/firedancer/tree/main/.github/workflows
  • Additionally, M1 fuzzing harnesses do exist in the main repo, you can find them with this command: find . -type f -name 'fuzz_.c' -path './src/'
  • Fuzzing harnesses can be built with a modern Clang compiler (recommended: 17): MACHINE=linux_clang_x86_64 EXTRAS="asan fuzz" make -j fuzz-test

How to build and run the node?

https://firedancer-io.github.io/firedancer/guide/getting-started.html

Public Disclosure of Known Issues

Bug reports covering previously discovered bugs (listed below) are not eligible for a reward within this program. This includes known issues that the project is aware of but has consciously decided not to “fix,” necessary code changes, or any implemented operational mitigating procedures that can lessen potential risk.

Previous Audits

Firedancer v0.1 completed audit reports can be found at https://github.com/firedancer-io/audits. Any unfixed vulnerabilities mentioned in these reports are not eligible for a reward.

Severity
Critical
Title

Any sandbox escape

Severity
Critical
Title

Any bug leading to loss of funds or acceptance of forged / invalid signatures

Severity
Critical
Title

Key compromise/exfiltration exploit chain

Severity
High
Title

Process to process RCE between sandboxed tiles

Severity
Medium
Title

Any bug leading Firedancer v0.1 to produce an invalid block or skip its leader slot

Severity
Medium
Title

Consensus issues causing Firedancer v0.1 validators to fork

Severity
Medium
Title

Liveness issues that cause Firedancer v0.1 validators to crash or be unavailable

Out of scope

Program's Out of Scope information

These impacts are out of scope for this bug bounty program.

All Categories:

  • Impacts requiring attacks that the reporter has already exploited themselves, leading to damage
  • Impacts caused by attacks requiring access to leaked keys/credentials
  • Impacts caused by attacks requiring access to privileged addresses (governance, strategist) except in such cases where the contracts are intended to have no privileged access to functions that make the attack possible
  • Impacts relying on attacks involving the depegging of an external stablecoin where the attacker does not directly cause the depegging due to a bug in code
  • Mentions of secrets, access tokens, API keys, private keys, etc. in Github will be considered out of scope without proof that they are in-use in production
  • Best practice recommendations
  • Feature requests
  • Impacts on test files and configuration files unless stated otherwise in the bug bounty program

Websites and Apps

  • Theoretical impacts without any proof or demonstration
  • Impacts involving attacks requiring physical access to the victim device
  • Impacts involving attacks requiring access to the local network of the victim
  • Reflected plain text injection (e.g. url parameters, path, etc.)
    • This does not exclude reflected HTML injection with or without JavaScript
    • This does not exclude persistent plain text injection
  • Any impacts involving self-XSS
  • Captcha bypass using OCR without impact demonstration
  • CSRF with no state modifying security impact (e.g. logout CSRF)
  • Impacts related to missing HTTP Security Headers (such as X-FRAME-OPTIONS) or cookie security flags (such as “httponly”) without demonstration of impact
  • Server-side non-confidential information disclosure, such as IPs, server names, and most stack traces
  • Impacts causing only the enumeration or confirmation of the existence of users or tenants
  • Impacts caused by vulnerabilities requiring un-prompted, in-app user actions that are not part of the normal app workflows
  • Lack of SSL/TLS best practices
  • Impacts that only require DDoS
  • UX and UI impacts that do not materially disrupt use of the platform
  • Impacts primarily caused by browser/plugin defects
  • Leakage of non sensitive API keys (e.g. Etherscan, Infura, Alchemy, etc.)
  • Any vulnerability exploit requiring browser bugs for exploitation (e.g. CSP bypass)
  • SPF/DMARC misconfigured records)
  • Missing HTTP Headers without demonstrated impact
  • Automated scanner reports without demonstrated impact
  • UI/UX best practice recommendations
  • Non-future-proof NFT rendering

Blockchain/DLT & Smart Contract Specific:

  • Incorrect data supplied by third party oracles
    • Not to exclude oracle manipulation/flash loan attacks
  • Impacts requiring basic economic and governance attacks (e.g. 51% attack)
  • Lack of liquidity impacts
  • Impacts from Sybil attacks
  • Impacts involving centralization risks

Prohibited Activities:

  • Any testing on mainnet or public testnet deployed code; all testing should be done on local-forks of either public testnet or mainnet
  • Any testing with pricing oracles or third-party smart contracts
  • Attempting phishing or other social engineering attacks against our employees and/or customers
  • Any testing with third-party systems and applications (e.g. browser extensions) as well as websites (e.g. SSO providers, advertising networks)
  • Any denial of service attacks that are executed against project assets
  • Automated testing of services that generates significant amounts of traffic
  • Public disclosure of an unpatched vulnerability in an embargoed bounty