
コラボレーション対応のWebアプリペンテストスイート
セキュリティテスター向けのコラボレーティブMITMプロキシ。
HTTPトラフィックのキャプチャ、AIによるリクエストの注釈付け、ハントセッションの実行、トラフィックのリプレイ、ファインディングの追跡を、ひとつのインターフェースで実現します。
クイックスタート · 機能 · スクリーンショット · 設定 · セキュリティ · コントリビューション
git clone https://github.com/synlace/ferret.git
cd ferret
cp .env.example .env # optional
just up
または、Docker Composeを直接使用します:
docker compose up --build -d
| サービス | URL |
|---|---|
| UI | http://localhost:3000 |
| API | http://localhost:8000 |
| プロキシ | 127.0.0.1:1337 |
開く:
http://localhost:3000
初回起動時のセットアップウィザードで、パスワードの設定とAIプロバイダーの選択が求められます。
justFerretは、セキュリティテスター向けに構築されたAI支援型HTTPインターセプションプロキシです。
ブラウザ、CLIツール、またはテストワークフローを次のアドレスに向けます:
127.0.0.1:1337
Ferretはリクエストとレスポンスをキャプチャし、ローカルに保存して、AIでトラフィックに注釈を付け、リプレイ、変更、テストを行い、興味深い挙動をファインディングに変換するツールを提供します。
これは、パッシブプロキシ以上のものを求めるワークフローのために設計されています。作業を進めながら思考、テスト、ドキュメント化を支援するものを求める人のためのツールです。

ハント - リクエスト履歴を検索し、テストを作成・実行し、ファインディングを作成するAI支援型のハントセッション。

履歴 - AI注釈、タイミング、ステータスコード、インラインのリクエスト/レスポンスエディタを備えた完全なプロキシリクエストログ。

ファインディング - 重要度、ホスト、タイプ、AI生成の説明、エビデンススニペットを備えた脆弱性トラッカー。

設定 - CA証明書、パスワード、2FA、AIプロバイダー、APIキー、プロキシステータスを管理します。

セットアップウィザード - パスワード作成とAIプロバイダー設定のための初回セットアップ。
ブラウザ、CLIツール、またはテストクライアントを次のように設定します:
HTTP proxy: 127.0.0.1:1337
HTTPS proxy: 127.0.0.1:1337
HTTPSのインターセプトには、設定ページからmitmproxyのCA証明書をダウンロードしてインストールしてください。
Ferretはすべてのインストールで認証を要求します。
/loginでログインします。HttpOnly SameSite=Strictセッションクッキーを発行します。TOTPベースの2FAは設定ページから有効にできます。
有効にすると、ログイン時に有効な認証アプリのコードが必要になります。
.envに静的APIキーを設定します:
FERRET_API_KEY=your-random-secret
次に、Bearerトークンとして使用します:
curl -H "Authorization: Bearer your-random-secret" \
http://localhost:8000/api/requests
セッションクッキーとBearerトークンは独立して検証されます。
.env.exampleを.envにコピーして、Ferretを事前設定します。
ほとんどのAIプロバイダー設定は、セットアップウィザードからも設定できます。
プロバイダーのセットアップは初回起動ウィザードから完了できます。
justコマンドBrowser / tool
│
▼
127.0.0.1:1337
│
▼
ferret-api :8000 / :1337
FastAPI + mitmproxy + SQLite
│
├── docker exec
▼
ferret-lab
pytest, ffuf, sqlmap, scripts, tests, notes
│
▼
ferret-ui :3000
Next.js
すべての永続データは次の場所に保存されます:
${FERRET_DATA_DIR:-./data}
Ferretは名前付きDockerボリュームではなくバインドマウントを使用します。
ローカル状態を消去してセットアップウィザードを再起動するには:
just reset
これにより、認証情報を含むローカルデータベースが削除されます。
認証済みの場合は、APIを通じてセットアップをリセットすることもできます:
curl -X DELETE \
-H "Authorization: Bearer your-random-secret" \
http://localhost:8000/api/setup
ホットリロードによるローカルUI開発の場合:
just dev
これにより、Docker内でAPIコンテナとラボコンテナを実行し、npm run devでホスト上でUIを提供します。このモードではホストにNode.jsが必要です。
テストを実行するには:
just test api # API unit tests (inside the running api container)
just test ui # Playwright UI tests (auto-starts Next.js dev server + mock API)
just test shim # docker-shim allow/block unit tests (no Docker needed)
just test all # run all three suites in sequence
Ferretはローカルでのセキュリティテストワークフロー向けに設計されており、公開環境への露出向けに強化されていません。
Ferretをlocalhostの外部に公開する前に、以下を理解してください:
| リスク | 詳細 |
|---|---|
| プロキシトラフィック | プロキシは通過するすべてのHTTP/HTTPSトラフィックをキャプチャします(認証情報を含む)。 |
| API公開 | APIはリクエスト履歴、ファインディング、ワークスペースファイルを公開します。 |
| ラボの実行 | ラボコンテナはあなたに代わってテストツールを実行できます。 |
| 認証情報 | APIキーとAIプロバイダーの認証情報はローカルに保存され、機密情報として扱う必要があります。 |
強力なパスワードを使用し、設定ページから2FAを有効にしてください。
セキュリティ脆弱性について公開のイシューを開かないでください。
完全な開示ポリシーと報告手順については、.github/SECURITY.mdを参照してください。
過去の開示は、修正が利用可能になり次第security/に公開されます。
セキュリティ問題を責任を持って開示してくださった以下の研究者に感謝します:
| 研究者 | イシュー | 年 |
|---|---|---|
| Trent (@AzureADTrent) | DISC-2026-001 - SSRF + docker-socket-proxyの設定ミスによる未認証RCE | 2026 |
Ferretは活発に開発が進められています。
アイデア、バグ報告、機能リクエスト、コントリビューションを歓迎します。
開発に参加してみませんか?
メール: [email protected]
MIT - LICENSEを参照してください。
| 機能 | 説明 |
|---|
| インターセプトプロキシ | mitmproxyを通じてHTTPおよびHTTPSトラフィックをキャプチャします。 |
| リクエスト履歴 | キャプチャしたトラフィックを閲覧、フィルタリング、検査、リプレイできます。 |
| AI注釈 | リクエストにセキュリティ関連のコンテキストを追加します。 |
| ハント | キャプチャしたトラフィック全体に対してAI支援型のハントセッションを実行します。 |
| ファインディング | 重要度、ホスト、タイプ、エビデンス、ステータスを備えた脆弱性を追跡します。 |
| Snare | 実行中のリクエストまたはレスポンスをインターセプトして変更します。 |
| Gnaw | HTTPリクエストを編集して再送信するためのリピーター形式のタブ。 |
| ワークスペース | セッションごとのscripts/、tests/、notes/ディレクトリ。 |
| プロジェクト | リクエスト履歴、ファインディング、ワークスペース、APIキーを分離します。 |
| 認証 | パスワードログイン、セッションクッキー、任意のAPIキーアクセス、TOTP 2FA。 |
| ローカルファーストストレージ | ローカルのバインドマウントディレクトリに保存されるSQLiteバックエンドのデータ。 |
| 変数 | デフォルト | 説明 |
|---|
FERRET_API_KEY | - | プログラムによるAPIアクセスのための静的Bearerトークン |
OPENROUTER_MODEL | google/gemini-3-flash-preview | デフォルトのOpenRouterモデル |
PROXY_HOST | 0.0.0.0 | プロキシのバインドアドレス |
PROXY_PORT | 1337 | プロキシポート |
UI_PORT | 3000 | UIポート |
FERRET_DATA_DIR | ./data | 永続データディレクトリ |
NEXT_PUBLIC_API_URL | http://localhost:8000 | ブラウザが使用するAPI URL |
NEXT_PUBLIC_SIGINT_URL | - | 任意のSIGINT/ニュースフィードJSON URL |
| プロバイダー | タイプ |
|---|
| OpenRouter | クラウド - 多くのモデルに対応する統合API |
| OpenAI | クラウド - GPT-4o、o1など |
| Anthropic | クラウド - Claudeモデル |
| Gemini | クラウド - Google Geminiモデル |
| DeepSeek | クラウド - DeepSeekモデル |
| Mistral | クラウド - Mistralモデル |
| Ollama | ローカル - お使いのマシンでモデルを実行 |
| LM Studio | ローカル - お使いのマシンでモデルを実行 |
| コマンド | 説明 |
|---|
just up | GHCRからビルド済みイメージをプルして全サービスを起動 |
just down | すべてのサービスを停止 |
just dev | DockerでAPI/ラボを実行し、ホスト上でUIをホットリロード(Node.jsが必要) |
just logs | サービスのログを追跡 |
just test api | APIユニットテストを実行(実行中のapiコンテナ内) |
just test ui | Playwright UIテストを実行 |
just test shim | docker-shimの許可/ブロックユニットテストを実行(Docker不要) |
just test all | すべてのテストスイートを順に実行 |
just reset | ローカルデータベースを消去 |
just shell | ラボコンテナでシェルを開く |