Skip to main content

traffic-capture

Working on the HTTP capture proxy and its replay/fuzz path: the egress guard that stops the proxy becoming an SSRF pivot, why it checks the resolved IP, and keeping capture off the scan's critical path. Trigger: editing scanners/capture_proxy/ (capture_addon.py, egress.py, ingest_worker.py); adding a forward/replay/fuzz path; changing EgressPolicy or the internal denylist; wiring an agent tool that replays captured traffic.

소스 정보

저장소
samugit83/redamon
최근 소스 활동
2026년 10월 20일 16:40
감지된 SKILL.md 언어
영어
스타
3,232
포크
685

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
traffic-capture
description
Working on the HTTP capture proxy and its replay/fuzz path: the egress guard that stops the proxy becoming an SSRF pivot, why it checks the resolved IP, and keeping capture off the scan's critical path. Trigger: editing scanners/capture_proxy/ (capture_addon.py, egress.py, ingest_worker.py); adding a forward/replay/fuzz path; changing EgressPolicy or the internal denylist; wiring an agent tool that replays captured traffic.
license
MIT
metadata
{"author":"redamon","version":"1.0.0","scope":["capture_proxy"],"auto_invoke":["Editing the capture proxy, egress guard, or replay/fuzz path"]}
## When to Use - Changing how the proxy forwards, captures, ingests, or replays traffic. The one-line "route every egress through the guard" rule is in the capture_proxy [AGENTS.md](../../scanners/capture_proxy/AGENTS.md) CRITICAL RULES; this skill is the mechanism. --- ## Critical Rules - **NEVER match the internal denylist on the hostname alone.** The guard denies on the **resolved IP** (RFC1918 and friends), because a hostname that resolves to an internal address (or re-resolves after a check) is the SSRF/DNS-rebinding case. See [scanners/capture_proxy/egress.py](../../scanners/capture_proxy/egress.py) (the block conditions operate on the resolved IP). - **NEVER build a replay/fuzz target from unvalidated LLM output and send it straight out.** The replay path is a new egress path; it must pass the same `EgressPolicy` guard as captured traffic, or the agent can be steered into an internal pivot. Args must not reach the wire un-guarded. - **NEVER remove a block condition to "make replay work".** Each condition is individually toggleable via `EgressPolicy` (surfaced in settings); loosen it there, per-condition, not by deleting the check. - **ALWAYS keep capture and ingest off the scan's critical path.** Capture writes an append-only spool; a separate worker tails it into Postgres ([scanners/capture_proxy/ingest_worker.py](../../scanners/capture_proxy/ingest_worker.py)). That decoupling is deliberate - capture must never block or slow the scan it observes. --- ## The capture pipeline | Stage | File | Note | | --- | --- | --- | | intercept | [capture_addon.py](../../scanners/capture_proxy/capture_addon.py) | mitmproxy addon; request/response hooks | | egress guard | [egress.py](../../scanners/capture_proxy/egress.py) | resolved-IP denylist + `EgressPolicy` toggles; the SSRF backstop | | ingest | [ingest_worker.py](../../scanners/capture_proxy/ingest_worker.py) | tails the spool -> Postgres; off the scan path | ## Commands ```bash docker compose --profile capture build capture-proxy # image rebuild (Dockerfile change, or a change to # recon_orchestrator/hard_guardrail.py, which it bundles) ./redamon.sh test unit # capture_proxy section ``` A build alone does not swap the running proxy: the orchestrator spawns it, not compose. Stop and start traffic capture once after a rebuild so it is recreated from the new image; that interrupts every session's capture. ## Resources - [docs/readmes/README.TRAFFIC.md](../../docs/readmes/README.TRAFFIC.md) - capture/replay/fuzz architecture and settings - Related: capture_proxy [AGENTS.md](../../scanners/capture_proxy/AGENTS.md) CRITICAL RULES (route egress through the guard)
GitHub에서 보기