Our work

Assurance work by formal methods experts

A Runtime Verification engagement is not a checkmark. Whether it is a full audit, a formal proof, a fuzzing campaign or a design review, it is an uncompromising end-to-end examination, and a mark of a security conscious team.

What every engagement includes

Request Work

Invariant-First Analysis

Before touching the code, we define the invariants: the properties that must always hold. This ensures we know exactly what correct behavior looks like from the start.

A Barrage of Rigorous Tools

We verify invariants with symbolic execution, fuzzing, and model checking, including our partner Almanax, covering attack surfaces traditional reviews miss.

Reports That Go Beyond Bugs

Our reports include documented invariants, system descriptions, and architecture notes: lasting documentation your team can reference long after the engagement.

OpSec Best Practices

Beyond bugs, we recommend operational security improvements (key management, deployment procedures, access controls), building security into every layer.

The most complete security work in the industry.

  • Formal methods trained PhD researchers
  • In-house security and AI tooling development
  • People-first skills, AI-enhanced results
  • Low turnover team (avg tenure of 4 years)

PhD researchers, AI-enhanced


Learn more about our team
  • Free infrastructure to run your campaigns
  • Test coverage and easy-to-read reports
  • Run your harness fuzzing anytime
  • AI agents integration for continuous fuzzing

KaaS, your all-in-one place for fuzzing


Learn more about KaaS

How we classify what we find

Every finding in a report is ranked on two independent axes: how bad it would be if exploited, and how hard it is to exploit. Knowing what the labels mean is most of reading a report, so they are written down here rather than left to convention. An auditor may deviate from this where a finding warrants it.

Severity: how bad it could be

The effects of the exploit set the severity. Who can carry it out does not; that is difficulty, below. Where a finding fits more than one rank, the most severe one wins.

High

Any of:

  • Permanent deadlock of some or all protocol operations.
  • Loss of any non-trivial amount of user or protocol funds.
  • Core protocol properties do not hold.
  • Arbitrary minting of tokens by untrusted users.
  • DOS attacks making the system (or any vital part of the system) unusable.

Medium

Any of:

  • Sensible or desirable properties over the protocol do not hold, but no known attack vectors due to this (a "looks risky" feeling).
  • Non-responsive or non-functional system is possible, but recovery of user funds can still be guaranteed.
  • Temporary loss of user funds, guaranteed to be recoverable via an external algorithmic mechanism like a treasury.
  • Loss of small amounts of user funds (e.g. bits of gas fees) that serve no protocol purpose.
  • Griefing attacks which make the system less pleasant to interact with and can potentially be used to promote a competitor.
  • System security relies on assumptions about externalities like "valid user input" or "working monitoring server".
  • Deployments are not verifiable, making phishing attacks possible.

Low

Any of:

  • Slow processing of user transactions can lead to changed parameters at transaction execution time.
  • Function reverts on some inputs that it could safely handle.
  • Users receive fewer funds than expected in a purely mathematical model, but the bounds of this error are very small.
  • Users are not protected from obviously bad choices (e.g. trading into an asset with zero value).
  • The system accumulates unrecoverable dust (e.g. due to rounding errors).

Informative

Not a vulnerability, but worth fixing. Any of:

  • Not following best coding practices.
    • Missing input validation or state sanity checks
    • Code duplication
    • Bad code architecture
    • Unmatched interfaces or poor use of external interfaces
    • Use of outdated or known problematic toolchains (e.g. an outdated compiler version)
    • Domain-specific code smells (e.g. not recycling storage slots on EVM)
  • Gas optimizations.
  • Non-intuitive or overly complicated behaviors, which may lead to users or auditors misunderstanding the code.
  • Lack of documentation, or incorrect or inconsistent documentation.
  • Known undesired behaviors when the security model or assumptions do not hold.

Difficulty: how hard it is to pull off

Cost, who can perform the attack, and how much control it needs. Flash loans are assumed available when judging cost. Where two factors both apply: if both are required for the attack, take the greater difficulty; if either alone suffices, take the lower.

High

Any of:

  • Only trusted authorized users can perform the attack (e.g. core devs).
  • Performing the attack costs significantly more than how much you benefit (e.g. it costs 10x to make the attack vs. what is won).
  • Performing the attack requires coordinating multiple transactions across different blocks, and can be stopped if detected early enough.
  • Performing the attack requires control of the network to delay or censor given messages.
  • Performing the attack requires convincing users to participate (e.g. bribing them).

Medium

Any of:

  • Semi-authorized (or allowed) users can perform the attack (e.g. "special" nodes, like validators or staking operators).
  • Performing the attack costs close to how much you benefit (e.g. 0.5x - 2x).
  • Performing the attack requires coordinating multiple transactions across different blocks, but cannot be stopped even if detected early.

Low

Any of:

  • Anyone who can create an account on the network can perform the attack.
  • Performing the attack costs much less than how much you benefit (e.g. under 0.5x).
  • Performing the attack can happen within a single block or transaction (or transaction group).
  • Performing the attack requires access to only a modest amount of capital and a flash-loan system.

Recommended action

Most findings also carry a recommended action, ordered here from most to least expensive for you to act on.

  1. 01

    Fix design

    A bug in the design means even a correct implementation will behave badly. There is little point proceeding to code review until the design is fixed, which is why design issues usually outrank code ones.

  2. 02

    Fix code

    The implementation does not conform to the design, or a common programming error is present. If working on the code reveals a design problem, the finding is escalated to fix design.

  3. 03

    Document prominently

    Design and code work as intended, but pair unsafely with some other product or integration. The docs should state the assumptions each side makes of the other. Escalates to fix code if a check would prevent it, or fix design if a rework would.

9

Years of expertise

$100B+

Total Value Secured

100+

Clients Protected

22

Security Experts

Work We're Proud Of

From blockchain launches to aerospace systems: a sample of what we've secured.

Why Runtime Verification

Formal Methods: the Security Edge in the Age of AI

As AI generates more of the code, the question isn't just whether it works, but whether it's correct. Formal methods define the standard. Everything else gets checked against it.

Reviewing critical software since 2017
Nearly a decade of reviews across any language: Rust, Go, C++, Solidity, JavaScript, and more. Our formal specification approach means the language is never the barrier; understanding the system is.
Trusted by Leaders Across Industries
DARPA, NASA, Boeing, the Ethereum Foundation, Solana, and Stellar have trusted us with critical systems, spanning aerospace, defense, and frontier technology.
Open-Source by Conviction
We build in the open. We maintain the K Framework (a formal methods platform used by researchers worldwide) and contribute to the broader security ecosystem.
AI-Ready Security Specifications
The specs and invariants we produce are machine-readable artifacts. We help teams encode security guarantees that AI agents can enforce throughout the development lifecycle.

"We see a worrisome trend in the industry where timelines are a race to the bottom, and we are not willing to compromise. A Runtime Verification audit report is a stamp of approval from our team. It's also a signal to our client's users and community that security is a priority, not an afterthought."

Everett - CEO
Everett Hildenbrandt
CEO of Runtime Verification

Not ready for a full engagement yet?
Learn how a Design Review can help you ship more secure code in as little as one week.

Explore Design Reviews