gRPC Goat

September 17, 2025 ยท View on GitHub

gRPC Goat is a "Vulnerable by Design" lab created to provide an interactive, hands-on playground for learning and practicing gRPC security.

Each lab contains a CTF-style flag that you can capture by successfully exploiting the vulnerability!

alt text

Quick Start

# Clone the repository
git clone https://github.com/rootxjs/grpc-goat.git
cd grpc-goat

# Start all vulnerable services
docker compose up --build

# Services will be available on localhost:8001-8009

Documentation

For complete documentation, installation guides, and step-by-step walkthroughs, visit:

๐Ÿ“– https://rootxjs.github.io/docs/grpc_goat_docs/getting-started/

The documentation includes:

  • gRPC Basics - Essential concepts and security fundamentals
  • Labs Overview - All 9 vulnerability scenarios with learning paths
  • Installation Guide - Detailed setup instructions and troubleshooting
  • Walkthrough - Step-by-step exploitation guides with code examples

Labs Overview

LabVulnerabilityPort
001gRPC Reflection Enabled8001
002Plaintext gRPC8002
003Insecure TLS8003
004Arbitrary mTLS8004
005mTLS Subject Validation8005
006Unix Socket World Writablecontainer
007SQL Injection8007
008Command Injection8008
009Server-Side Request Forgery8009

Prerequisites

  • Docker and Docker Compose
  • grpcurl: go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest

Proto Files

For labs 002-009, you'll need the corresponding .proto files to interact with the services. All proto files are available in the protos/ directory:

# Example: Test Lab 002 with grpcurl
grpcurl -plaintext -proto protos/lab-002-auth.proto \
  -d '{"username": "admin", "password": "password"}' \
  localhost:8002 auth.AuthService/Login

See protos/README.md for detailed usage instructions.

Contributing

Contributions are welcome! Please see the documentation website for contribution guidelines.

License

This project is licensed under the MIT License - see the LICENSE file for details.