Skip to main content

Bug Bounty Report Guide

The report template below covers vulnerabilities in EVM-compatible Cosmos TAC chain node: precompiles, EVM↔Cosmos state synchronisation, bank/staking/distribution module bugs. Tools: Hardhat (EVM side), Cosmos REST API, Go node source.

Report Template

Report Template Commentary

1. Title and Metadata

  • One line: network + vulnerability class + affected component.
  • Status must state the confirmation level: THEORETICAL / LOCAL REPRODUCED / TESTNET CONFIRMED / MAINNET CONFIRMED.
Useful classes: Balance Desync, State Collision, Precompile Missing Invariant, Bank Module Bypass, IBC Replay, Consensus Equivocation.

2. Executive Summary

Triage reads this in 30 seconds. Must answer four questions:
  1. What is broken? — one sentence on the root cause.
  2. What does the attacker gain? — tokens / control / data.
  3. How much? — specific numbers.
  4. Is it repeatable? — yes/no.
Example:

3. Vulnerability Details

3.1 Affected Component

State the exact location in the node source:
Permalink to a specific commit if the repo is public:

3.2 Root Cause

One or two sentences — at the line-of-code level, not “somewhere in the module”:
<FunctionName> has zero calls to <MissingFunction>(). Every adjacent precompile that performs the same operation includes this call — <FunctionName> was missed.

3.3 How It Works

  1. Context: how the EVM↔Cosmos state bridge normally works.
  2. What the vulnerable code does: step by step.
  3. Where the logic breaks: the specific missing call / condition.
  4. Observable effect: what state inconsistency is produced.

3.4 Technical Prerequisite

Any conditions required for exploitation (directly affects severity):

3.5 Comparison with Correct Code

If an adjacent function is implemented correctly — always show the diff. This is the strongest evidence that it’s a missed piece, not an architectural flaw:

4. Exploitation Steps

One transaction = one step. Include specific arguments and before/after state.

5. PoC Results

The most valuable part for triage: real on-chain data. Required:
  • Deployment address of the PoC contract.
  • TX hashes for every step.
  • Block numbers.
  • Money-flow table.
  • Final profit calculation.
Example table:

5.1 Scaling Economics

6. Impact Assessment

CVSS v3.1 vector if the program requires it. Factors that raise severity: native token inflation, no privilege requirements, breakage of core modules (bank, staking, IBC).

Immediate

Minimal change — a specific diff or pseudo-diff in Go:

Long-term

Architectural fix so the class cannot recur:

Adjacent Audit

8. Proof-of-Concept Code

Attach the fully working PoC. Requirements:
  • Minimal — no extra helpers or logging.
  • Self-contained — compiles without external dependencies beyond hardhat / forge / cosmjs.
  • Commented — explain non-obvious preconditions (e.g. why a storage write before the precompile call is necessary to trigger the bug).