mirror of
https://github.com/usestrix/strix.git
synced 2026-08-25 04:12:37 +02:00
Proxy tool sweep: drop send_request, fix Caido SDK gotchas
send_request was a thin wrapper over the Caido Replay API that the model
could replicate with a one-liner `curl` via exec_command. The sandbox's
HTTP_PROXY env captures all such traffic for free, so the tool was
adding bugs (duplicate dispatch, dropped responses) without adding
capability. Removed across factory, tools module, sandbox-importable
caido_api helper, TUI renderer, prompt template, skill doc, and public
docs. repeat_request stays — it operates on captured request IDs with
structured modifications, which curl can't replicate cleanly.
Three caido-sdk-client workarounds that were hitting us through both
send_request and repeat_request:
- replay_send_raw used to pass CreateReplaySessionFromRaw to
sessions.create(), which seeds a stored entry server-side, then
called send() — producing two history rows per call. Empty-create +
send produces one dispatched request.
- The same helper read result.entry.response_raw, an attribute that
doesn't exist on ReplayEntry, so response bytes were silently
dropped. Fixed to walk result.entry.response.raw with proper None
guards.
- get_request_with_client passed include_request_raw / include_response_raw
based on the requested part, but the SDK's generated pydantic models
declare raw as required even though the GraphQL fragment makes it
conditional via @include. Passing False crashed view_request with a
pydantic validation error. Always request both raw bodies; the caller
picks which to surface.
Also wrapped replay.send() in asyncio.wait_for(30s) so a stalled Caido
dispatch (notably loopback targets that don't route cleanly through the
sandbox proxy) fails fast with a model-readable error instead of
hanging the agent until the function_tool 120s budget expires.
Finally, list_requests now omits the roundtrip_ms field when Caido
reports 0 — proxy-captured unscoped traffic consistently reports 0
while scoped/replay traffic carries real measurements, so the absence
of the field is now informative ("Caido didn't measure this") rather
than misleading ("this request took 0ms").
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
940319f28a
commit
5921fec16c
@@ -21,7 +21,6 @@ from caido_api import (
|
||||
list_requests,
|
||||
repeat_request,
|
||||
scope_rules,
|
||||
send_request,
|
||||
view_request,
|
||||
)
|
||||
```
|
||||
@@ -59,10 +58,15 @@ Available helpers:
|
||||
|
||||
- `list_requests(httpql_filter=, first=50, after=, sort_by=, sort_order=, scope_id=)` returns a cursor-paginated Caido SDK `Connection`.
|
||||
- `view_request(request_id, part="request")` returns a Caido SDK request object with raw request/response bytes.
|
||||
- `send_request(method, url, headers=None, body="")` sends an arbitrary raw request through Caido Replay.
|
||||
- `repeat_request(request_id, modifications={...})` replays a captured request after modifying `url`, `params`, `headers`, `body`, or `cookies`.
|
||||
- `scope_rules(action, allowlist=, denylist=, scope_id=, scope_name=)` manages Caido scopes.
|
||||
|
||||
For one-off arbitrary requests (e.g. probing a fresh endpoint, hitting an
|
||||
external API), use `exec_command` with `curl` / `httpx` / `requests`. The
|
||||
sandbox's `HTTP_PROXY` env routes all such traffic through Caido
|
||||
automatically, so it shows up in `list_requests` and you can use
|
||||
`repeat_request` to replay-and-modify any of it.
|
||||
|
||||
## Workflow
|
||||
|
||||
For iterative exploit work, put code in a file:
|
||||
|
||||
Reference in New Issue
Block a user