v1.6.2
What's new in v1.6.2
This is the first public release of Ferret - an AI-assisted HTTP interception proxy for security testers.
Ferret runs entirely in Docker. Clone the repo and run just up to get started.
π Quick start
git clone https://github.com/synlace/ferret.git
cd ferret
just upOpen http://localhost:3000. The setup wizard will guide you through password creation and AI provider configuration.
β¨ Features
Intercepting proxy & traffic analysis
- Full HTTP/HTTPS interception via mitmproxy on
127.0.0.1:1337 - Request history with filtering, search, and inline CodeMirror editors (HTTP wire format, language detection)
- AI annotations β enrich captured requests with security-relevant context
- Gnaw β repeater-style tabs for editing and resending requests
- Snare β intercept and modify requests or responses in-flight; two-phase hold (request β response); drop kills the TCP connection; rule-based filtering by host, path, method, and body pattern
AI-assisted hunts
- Agentic hunt sessions powered by LiteLLM β unified routing across OpenRouter, Anthropic, Gemini, Ollama, LM Studio, and 100+ providers
- Tools:
search_requests,get_request_detail,create_finding,write_test,run_test,list_sources,read_source, and more - Per-session tool enable/disable with bulk actions; disabled tools are blocked at execution time
- Model chain-of-thought reasoning extracted and rendered as collapsible "π Thinking" sections
- Token usage (prompt β / completion β) and cost displayed in the context panel after each exchange
- Non-standard tool call parsing for local models (Kimi/Moonshot, Gemma 4) that do not honour the OpenAI function-calling schema
- Hunt export to JSON including provider, model, and session metadata
Findings
- Vulnerability tracker with severity (critical/high/medium/low/info), host, type, AI-generated descriptions, and evidence snippets
- Average cost-per-finding stat in the findings stats bar
Projects & sources
- Separate request history, findings, workspaces, and API keys per project
- Sources β attach reference files (API docs, OpenAPI specs, source code, notes) to a project; the AI agent consults them automatically before analysing traffic
- Per-project model override; falls through to the setup-wizard model when unset
Authentication & security
- Mandatory password authentication on every install; bcrypt-hashed credentials in SQLite
- 24-hour
HttpOnly SameSite=Laxsession cookies - TOTP-based 2FA β enable from Settings; QR code for authenticator app; two-phase login flow
- Optional static
FERRET_API_KEYBearer token for programmatic/CI access - Change password from Settings (invalidates all sessions)
Infrastructure
- Pre-built GHCR images:
ferret-api,ferret-ui,ferret-docker-shim,ferret-lab just uppulls images and starts all services β no Node.js or Python required on the hostjust devfor hot-reload development (API via watchfiles, UI vianpm run dev)- Docker socket replaced with
tecnativa/docker-socket-proxyβ onlyCONTAINERS,EXEC, andPOSToperations permitted; image pull, volume mount, and privileged container creation are denied extra_hosts: host-gatewayon API and lab containers for local AI provider reachability (Ollama, LM Studio)- API hot reload in dev via watchfiles with
WATCHFILES_FORCE_POLLING=truefor reliable bind-mount change detection
Setup wizard
- First-run wizard: password β AI provider β model β done
- Supports OpenRouter, OpenAI, Anthropic, Gemini, DeepSeek, Mistral, Ollama, LM Studio
- Model list fetched server-side via
POST /api/setup/models(no browser-direct requests to local providers) - Re-run wizard at any time from Settings
Testing
- 142 Playwright UI tests covering all major pages and flows
- API unit tests: auth, MFA, chat/LiteLLM, tools, projects, workspaces, sources, security, plans
- Docker-shim allow/block unit tests (no Docker required)
just test allruns all three suites in sequence
π Security fixes
- CORS restricted from wildcard to
http://localhost:{UI_PORT}β prevents cross-origin reads of proxy traffic and stored keys - WebSocket origin check β closes with code 1008 for any non-localhost origin
- Path traversal closed in
GET/PUT /api/tests/files/{filename}β paths resolved before read/write - CSRF guards on
DELETE /api/projects/resetandDELETE /api/projects/allvia?confirm=destroy - Error detail scrubbing β all
exceptblocks usedeps.server_error(e); stack traces, file paths, and DB messages no longer reach the client - Docker socket proxy β replaces direct socket mount; image pull, volume create, and network create are blocked
See
security/DISC-2026-001.mdfor the critical unauthenticated RCE disclosure (fixed in this release). Thanks to Trent (@AzureADTrent) for responsible disclosure.
π³ Docker images
| Image | Tag |
|---|---|
ghcr.io/synlace/ferret-api |
v1.6.2, latest |
ghcr.io/synlace/ferret-ui |
v1.6.2, latest |
ghcr.io/synlace/ferret-docker-shim |
v1.6.2, latest |
ghcr.io/synlace/ferret-lab |
v1.6.2, latest |
π Requirements
- Docker
- Docker Compose
just