Skip to content

alimezar/FuzzRPC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FuzzRPC

A native Go fuzzer for gRPC and gRPC-Web services
FuzzRPC discovers services via reflection, builds seed messages automatically, mutates them type-safely, and reports findings in structured JSON and a color-coded HTML dashboard.


Key Features

Area Capability
Discovery Reflection-driven service and method enumeration (no proto files needed)
Fuzzing Seed generation → type-aware field mutation → concurrent execution
Transports • HTTP/2 gRPC (application/grpc)
• HTTP/1.1 gRPC-Web-Text (application/grpc-web-text)
Reporting out.json machine-readable log
out.html interactive dashboard with severity tint, baseline diff, and Chart.js bar graph
Diffing --baseline flag highlights new, unchanged, and resolved findings between scans
Severity Maps gRPC status codes to critical / high / low / none
CLI Helpers cmd/codec encodes/decodes gRPC-Web-Text frames for manual testing or Burp Suite integration
Zero Dependencies Ships as a single static Go binary (go install ...)

Installation

go install github.com/alimezar/FuzzRPC/cmd/fuzzrpc@latest
go install github.com/alimezar/FuzzRPC/cmd/codec@latest   # optional helper

Requires Go 1.22 or newer.


Quick Start

1. Run a target gRPC server

go run examples/helloworld/server/main.go   # listens on :50051

2. Native gRPC fuzzing

fuzzrpc \
  --target localhost:50051 \
  --report-json out.json \
  --report-html out.html

3. gRPC-Web fuzzing (via proxy on :8080)

fuzzrpc \
  --target localhost:8080 \
  --web \
  --report-json out_web.json

4. Baseline diff (CI regression gate)

fuzzrpc \
  --target staging.internal:50051 \
  --baseline previous.json \
  --report-json current.json \
  --fail-on new,critical     # forthcoming flag

Command-line Flags

Flag Description Default
--target host:port of the gRPC or gRPC-Web endpoint
--timeout Dial/call timeout 5s
--web Use gRPC-Web-Text transport false
--report-json Path to write out.json
--report-html Path to write out.html
--report-template Custom HTML template path templates/report.html
--baseline Previous out.json file for diffing

Run fuzzrpc -h to view all available options.


HTML Dashboard

  • Rows are tinted by severity:

    • Critical → Red
    • High → Orange
    • Low → Green
    • None → Plain
  • Left border indicates baseline status:

    • Blue = New
    • Grey = Unchanged
    • Strike-through = Resolved
  • Includes a Chart.js bar graph summarizing findings by severity.


Codec Utility

# Encode raw protobuf → gRPC-Web-Text
cat request.bin | codec --encode > payload.txt

# Decode intercepted payload
cat payload.txt | codec --decode > request.bin

Useful for Burp Suite or manual replay.


Architecture Overview

reflection → seed → mutate → (gRPC | gRPC-Web) runner → findings → report
               ↑            concurrent goroutines                ↑
               └────────────── baseline diff & severity mapping ─┘

Each stage lives in its own pkg/ sub-module:

  • reflect
  • seed
  • mutate
  • exec
  • codec
  • report

Roadmap

  • Add application/grpc-web+proto (binary) support
  • Migrate CLI to Cobra (enum / seed / fuzz / report subcommands)
  • Burp extension (zero-dependency tab leveraging codec)
  • Plugin system (Go‐plugin mutators and authentication hooks – JWT, mTLS)
  • GitHub Actions + full test coverage
  • Interactive TUI with step-through fuzzing and payload inspector

Contributing

  1. Fork and create a feature branch.
  2. Ensure go test ./... passes.
  3. Submit a PR with a concise description.

License

Distributed under the MIT License. See LICENSE for details.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors