Skip to content

Commit a72a007

Browse files
authored
Merge pull request #17 from FuzzingLabs/docs/update-temporal-architecture
docs: Update documentation for v0.7.0 Temporal architecture
2 parents 54738ca + c652340 commit a72a007

16 files changed

+709
-642
lines changed
Lines changed: 321 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,321 @@
1+
# FuzzForge v0.7.0: Temporal Orchestration & Vertical Workers Architecture
2+
3+
We're excited to announce **FuzzForge v0.7.0**, a major release featuring two significant improvements:
4+
5+
1. **Architectural Foundation**: Complete migration from Prefect to **Temporal** orchestration with **vertical workers** - pre-built containers for instant deployment
6+
2. **AI-Powered Secret Detection**: New workflows achieving 84% recall on obfuscated secrets using LLM semantic analysis
7+
8+
This release transforms how security workflows are built, deployed, and scaled.
9+
10+
<!-- truncate -->
11+
12+
## 🚀 Flagship Features
13+
14+
### Temporal Orchestration: Production-Ready Workflow Engine
15+
16+
We've fully migrated from Prefect to [Temporal](https://temporal.io), bringing enterprise-grade workflow orchestration to FuzzForge:
17+
18+
**Why Temporal?**
19+
20+
-**Reliability**: Automatic retries, timeouts, and failure handling built-in
21+
-**Observability**: World-class UI for monitoring workflow execution, logs, and debugging
22+
-**Scalability**: Horizontal scaling across workers with intelligent load balancing
23+
-**Developer Experience**: Type-safe workflows, versioning, and zero downtime deployments
24+
25+
**What This Means for You:**
26+
27+
```bash
28+
# Start FuzzForge with Temporal
29+
docker compose up -d
30+
31+
# Monitor workflows in real-time
32+
open http://localhost:8080 # Temporal UI
33+
34+
# Submit workflows - everything just works
35+
cd your_project/
36+
ff workflow run security_assessment .
37+
```
38+
39+
The Temporal UI gives you complete visibility into workflow execution:
40+
41+
- Live activity timelines
42+
- Detailed logs for every step
43+
- Retry history and failure analysis
44+
- Performance metrics and bottleneck detection
45+
46+
### Vertical Workers: Pre-Built Security Toolchains
47+
48+
FuzzForge now uses **vertical workers** - long-lived containers pre-built with security toolchains for different languages and platforms:
49+
50+
| Worker | Toolchain | Status | Available Workflows |
51+
| ----------- | ----------------------------- | ------------- | ------------------------------------- |
52+
| **python** | Gitleaks, TruffleHog, Atheris | ✅ Production | Secret detection, security assessment |
53+
| **rust** | cargo-fuzz | ⚠️ Early Dev | Rust fuzzing |
54+
| **ossfuzz** | OSS-Fuzz infrastructure | ⚠️ Heavy Dev | Continuous fuzzing campaigns |
55+
56+
**Note:** Additional workers (web, android, Go) are planned but not yet available.
57+
58+
**Key Benefits:**
59+
60+
1. **Zero Build Time**: Workflows start instantly - no container builds per workflow
61+
2. **Instant Code Changes**: Modify workflow code, restart worker, done
62+
3. **Consistent Environment**: Same toolchain versions across all runs
63+
4. **Resource Efficiency**: Share workers across multiple concurrent workflows
64+
65+
**Example: Running Secret Detection**
66+
67+
```bash
68+
# Worker is already running with Gitleaks, TruffleHog installed
69+
ff workflow run gitleaks_detection .
70+
71+
# Behind the scenes:
72+
# 1. CLI uploads project to MinIO
73+
# 2. Temporal schedules on python-worker
74+
# 3. Worker downloads from MinIO
75+
# 4. Gitleaks runs (already installed!)
76+
# 5. Results returned as SARIF
77+
```
78+
79+
### MinIO Storage: Unified File Handling
80+
81+
We've replaced volume mounts with **MinIO** (S3-compatible object storage):
82+
83+
**Old Way (Volume Mounts):**
84+
85+
```yaml
86+
# Had to mount directories, manage paths, cleanup manually
87+
volumes:
88+
- ./my_project:/target
89+
```
90+
91+
**New Way (MinIO):**
92+
93+
```bash
94+
# CLI handles everything automatically
95+
ff workflow run security_assessment .
96+
# ✓ Creates tarball
97+
# ✓ Uploads to MinIO
98+
# ✓ Passes target_id to workflow
99+
# ✓ Worker downloads and extracts
100+
# ✓ Cleanup handled automatically
101+
```
102+
103+
**Benefits:**
104+
105+
- ✅ No path conflicts or permissions issues
106+
- ✅ Works seamlessly with remote Temporal clusters
107+
- ✅ Automatic cleanup and caching
108+
- ✅ Supports large targets (GB+)
109+
110+
## 🔍 AI-Powered Secret Detection: Also in v0.7.0
111+
112+
Alongside the architectural improvements, we're releasing a comprehensive **secret detection** system with three workflows:
113+
114+
### Benchmark Results
115+
116+
We tested on a controlled dataset of **32 documented secrets** (12 Easy, 10 Medium, 10 Hard):
117+
118+
| Tool | Recall | Secrets Found | Speed | Best For |
119+
| --------------------- | --------- | ------------- | ----- | --------------------------- |
120+
| **LLM (gpt-5-mini)** | **84.4%** | 41 | 618s | Obfuscated & hidden secrets |
121+
| **LLM (gpt-4o-mini)** | 56.2% | 30 | 297s | Balanced speed/accuracy |
122+
| **Gitleaks** | 37.5% | 12 | 5s | Fast pattern-based scanning |
123+
| **TruffleHog** | 0.0% | 1 | 5s | Entropy analysis |
124+
125+
📊 [Full benchmark methodology and results →](https://github.com/FuzzingLabs/fuzzforge_ai/blob/dev/backend/benchmarks/by_category/secret_detection/results/comparison_report.md)
126+
127+
### Why LLM-Based Detection Wins
128+
129+
**Obfuscated Secrets (Medium Difficulty):**
130+
131+
```python
132+
# Gitleaks: ❌ Missed (no pattern match)
133+
# LLM: ✅ Found (semantic understanding)
134+
aws_key = base64.b64decode("QUtJQUlPU0ZPRE5ON0VYQU1QTEU=").decode()
135+
```
136+
137+
**Well-Hidden Secrets (Hard Difficulty):**
138+
139+
```python
140+
# Gitleaks: ❌ Missed (no pattern)
141+
# LLM: ✅ Found (understands XOR + join)
142+
secret = ''.join(chr(ord(c) ^ 0x42) for c in "\x0b\x15\x04\x1b...")
143+
```
144+
145+
**Standard Secrets (Easy Difficulty):**
146+
147+
```python
148+
# Both find these:
149+
AWS_ACCESS_KEY = "AKIAIOSFODNN7EXAMPLE"
150+
```
151+
152+
### Try It Yourself
153+
154+
```bash
155+
# Start FuzzForge
156+
docker compose up -d
157+
158+
# Run secret detection on your code
159+
cd your_project/
160+
ff workflow run gitleaks_detection . # Fast pattern-based
161+
ff workflow run trufflehog_detection . # Entropy analysis
162+
ff workflow run llm_secret_detection . # AI semantic analysis
163+
164+
# Get SARIF output
165+
ff finding <run-id>
166+
```
167+
168+
## 📊 Real-World Impact
169+
170+
**Before v0.7.0 (Pattern-Only Detection):**
171+
172+
- Found: Standard API keys, simple patterns
173+
- Missed: Base64-encoded secrets, obfuscated credentials, split secrets
174+
175+
**After v0.7.0 (LLM + Patterns):**
176+
177+
- **84% recall** on comprehensive benchmark
178+
- Detects novel obfuscation techniques
179+
- Understands code context (not just regex)
180+
- Catches secrets in:
181+
- Base64/hex encoding
182+
- String concatenation
183+
- XOR/ROT13 obfuscation
184+
- Template strings
185+
- Binary literals
186+
187+
## 🔄 Migration Guide
188+
189+
### What Changed
190+
191+
**Docker Compose:**
192+
193+
```bash
194+
# Old (Prefect)
195+
docker-compose up
196+
197+
# New (Temporal)
198+
docker compose up -d
199+
```
200+
201+
**Workflow Submission:**
202+
203+
```bash
204+
# Old (volume mounts)
205+
ff workflow run security_assessment --volume ./project
206+
207+
# New (automatic upload)
208+
ff workflow run security_assessment .
209+
# CLI handles upload automatically!
210+
```
211+
212+
**Worker Management:**
213+
214+
```bash
215+
# Old (per-workflow containers)
216+
# Each workflow built its own container
217+
218+
# New (vertical workers)
219+
docker compose up -d # All workers start
220+
# Workflows share workers - much faster!
221+
```
222+
223+
### Configuration
224+
225+
Set up AI workflows with API keys:
226+
227+
```bash
228+
cp volumes/env/.env.example volumes/env/.env
229+
# Edit .env and add your API keys (OpenAI, Anthropic, etc.)
230+
```
231+
232+
Required for:
233+
234+
- `llm_secret_detection` workflow
235+
- AI agent features (`ff ai agent`)
236+
237+
Basic security workflows (gitleaks, trufflehog, security_assessment) work without this.
238+
239+
## 🏗️ Architecture Overview
240+
241+
```
242+
┌─────────────┐
243+
│ User CLI │ Upload → MinIO
244+
└──────┬──────┘
245+
↓ Submit
246+
┌─────────────┐
247+
│ Temporal │ Schedule → Task Queue
248+
└──────┬──────┘
249+
↓ Execute
250+
┌─────────────┐
251+
│ Vertical │ Download from MinIO → Run Tools → Upload Results
252+
│ Workers │
253+
└─────────────┘
254+
rust, python, web, android, ossfuzz
255+
```
256+
257+
**Benefits:**
258+
259+
- 🔄 Automatic retries and timeouts (Temporal)
260+
- 📦 No file path management (MinIO)
261+
- ⚡ Zero container build time (Vertical Workers)
262+
- 📈 Horizontal scaling ready (Temporal + Workers)
263+
264+
## 🎯 Workflow Stability Status
265+
266+
### ✅ Stable & Production-Ready
267+
268+
- **Secret Detection**: `gitleaks_detection`, `trufflehog_detection`, `llm_secret_detection`
269+
- **Security Assessment**: `security_assessment`
270+
- Temporal orchestration with python worker
271+
- MinIO file storage
272+
273+
### ⚠️ Early Development (Functional but not production-ready)
274+
275+
- **Fuzzing workflows**:
276+
- `atheris_fuzzing` - Python fuzzing with Atheris
277+
- `cargo_fuzzing` - Rust fuzzing with cargo-fuzz
278+
- **OSS-Fuzz integration**: `ossfuzz_campaign` (under heavy active development)
279+
280+
**Important:** Fuzzing workflows are functional for testing but not recommended for production use yet.
281+
282+
## 📚 Resources
283+
284+
- 🌐 [Website](https://fuzzforge.ai)
285+
- 📖 [Documentation](https://docs.fuzzforge.ai)
286+
- 💬 [Discord Community](https://discord.gg/8XEX33UUwZ)
287+
- 🎓 [FuzzingLabs Academy](https://academy.fuzzinglabs.com/?coupon=GITHUB_FUZZFORGE)
288+
- 📊 [Secret Detection Benchmarks](https://github.com/FuzzingLabs/fuzzforge_ai/blob/dev/backend/benchmarks/by_category/secret_detection/results/comparison_report.md)
289+
290+
## 🙏 Acknowledgments
291+
292+
Special thanks to:
293+
294+
- [Temporal](https://temporal.io) for the amazing workflow engine
295+
- Our community for feedback during the migration
296+
297+
## 🚀 Get Started
298+
299+
```bash
300+
# Clone and install
301+
git clone https://github.com/fuzzinglabs/fuzzforge_ai.git
302+
cd fuzzforge_ai
303+
uv tool install --python python3.12 .
304+
305+
# Start FuzzForge with Temporal
306+
docker compose up -d
307+
308+
# Run your first workflow
309+
cd test_projects/vulnerable_app/
310+
fuzzforge init
311+
ff workflow run security_assessment .
312+
313+
# Check Temporal UI
314+
open http://localhost:8080
315+
```
316+
317+
---
318+
319+
**FuzzForge v0.7.0** is a foundational release that sets the stage for scalable, production-ready security automation. Try it today and let us know what you think!
320+
321+
Star us on [GitHub](https://github.com/FuzzingLabs/fuzzforge_ai)

docs/docs/ai/prompts.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Use the `fuzzforge ai agent` shell to mix structured slash commands with natural
2020
You> list available fuzzforge workflows
2121
Assistant> [returns workflow names, descriptions, and required parameters]
2222
23-
You> run fuzzforge workflow static_analysis_scan on ./backend with target_branch=main
23+
You> run fuzzforge workflow security_assessment on ./backend
2424
Assistant> Submits the run, emits TaskStatusUpdateEvent entries, and links the SARIF artifact when complete.
2525
2626
You> show findings for that run once it finishes

docs/docs/concept/architecture.md

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,14 @@ graph TB
5252
end
5353
5454
subgraph "Execution Layer"
55-
Docker[Docker Engine]
56-
Containers[Workflow Containers]
57-
Registry[Docker Registry]
55+
VerticalWorkers[Vertical Worker Containers]
56+
Tools[Pre-installed Toolchains]
57+
WorkerCache[Worker Cache /cache]
5858
end
5959
6060
subgraph "Storage Layer"
6161
PostgreSQL[PostgreSQL Database]
62-
Volumes[Docker Volumes]
62+
MinIO[MinIO S3 Storage]
6363
Cache[Result Cache]
6464
end
6565
@@ -73,15 +73,15 @@ graph TB
7373
7474
Temporal --> Workers
7575
Workers --> Scheduler
76-
Scheduler --> Docker
76+
Scheduler --> VerticalWorkers
7777
78-
Docker --> Containers
79-
Docker --> Registry
80-
Containers --> Volumes
78+
VerticalWorkers --> Tools
79+
VerticalWorkers --> WorkerCache
80+
VerticalWorkers --> MinIO
8181
8282
FastAPI --> PostgreSQL
8383
Workers --> PostgreSQL
84-
Containers --> Cache
84+
FastAPI --> MinIO
8585
```
8686

8787
## What Are the Main Components?
@@ -201,7 +201,6 @@ services:
201201
202202
Example configuration:
203203
```bash
204-
COMPOSE_PROJECT_NAME=fuzzforge
205204
DATABASE_URL=postgresql://postgres:postgres@postgres:5432/fuzzforge
206205
TEMPORAL_ADDRESS=temporal:7233
207206
S3_ENDPOINT=http://minio:9000

docs/docs/concept/docker-containers.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ Example build:
141141
cd workers/rust
142142
docker build -t fuzzforge-worker-rust:latest .
143143
# Or via docker-compose
144-
docker-compose -f docker-compose.temporal.yaml build worker-rust
144+
docker-compose -f docker-compose.yml build worker-rust
145145
```
146146

147147
---

0 commit comments

Comments
 (0)