Class FuzzExecutor
- Namespace
- Kuestenlogik.Bowire.Security
- Assembly
- Kuestenlogik.Bowire.dll
Server-side runtime for the schema-aware fuzzer. Shared between
the bowire fuzz CLI subcommand and the /api/security/fuzz
HTTP endpoint that the workbench's right-click "Fuzz this field"
menu calls into. Stateless; payload wordlists + per-category
response heuristics live as static data so neither consumer pays
for instance state.
public static class FuzzExecutor
- Inheritance
-
FuzzExecutor
- Inherited Members
Remarks
v1 scope: HTTP-class targets, JSON request bodies, four payload
categories (sqli / xss / pathtrav / cmdinj),
five payloads per category. Heuristics fire on response-body
markers (SQL error banners, /etc/passwd content, command-output
markers like uid=…gid=) plus a cross-category latency-spike
check that catches blind-execution oracles.
Schema-awareness — the ADR's killer differentiator — is the
value-shape skip in ShouldSkipForValueShape(JsonValueKind, string): numeric
/ boolean fields don't take string payloads cleanly, so the
caller is told to drop SQLi / XSS / etc. on those before any
network traffic happens. Full frame-semantics-driven skipping
(don't fuzz coordinate.latitude with SQLi even when the
value happens to round-trip as a string) lives in the workbench-
side menu, which has the annotation store and asks the executor
to run the categories that survive that filter.
Fields
Payloads
Built-in payload wordlists keyed by category name.
public static readonly IReadOnlyDictionary<string, IReadOnlyList<string>> Payloads
Field Value
Methods
EvaluateHeuristic(string, string, AttackProbeResponse, AttackProbeResponse?)
Per-category response heuristic — public so callers (and tests) can drive the marker logic in isolation without orchestrating a full fuzz run.
public static string? EvaluateHeuristic(string category, string payload, AttackProbeResponse resp, AttackProbeResponse? baseline)
Parameters
categorystringpayloadstringrespAttackProbeResponsebaselineAttackProbeResponse
Returns
RunAsync(FuzzExecutorRequest, CancellationToken)
Run the fuzz session: capture a baseline against the original body, replay every payload in the category against the same endpoint with the field mutated, evaluate heuristics, return a structured result list (one entry per payload — both fired and not-fired so the caller can render a per-row table).
public static Task<FuzzRunResult> RunAsync(FuzzExecutorRequest request, CancellationToken ct)
Parameters
requestFuzzExecutorRequestctCancellationToken
Returns
ShouldSkipForValueShape(JsonValueKind, string)
Schema-awareness check — value-shape vs payload-class. Returns true when the targeted field's existing value is a kind the payload category doesn't fit (numeric / bool field for SQLi / XSS / pathtrav / cmdinj string payloads). Caller decides whether to skip or force.
public static bool ShouldSkipForValueShape(JsonValueKind kind, string category)
Parameters
kindJsonValueKindcategorystring