You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
README hybrid rewrite — radical voice on hero, problem statement,
top-3 FAQ; light polish on technical sections. Removed feature-bullet
log in favour of a problem-first opener.
Rules detector — three-pass scan now also folds Cyrillic and
Greek homoglyphs into Latin counterparts before regex matching, so
payloads using Іgnore (Cyrillic) or ιgnore (Greek) fire role_hijack.ignore_previous.
Health endpoint — per-connection wait_for(timeout=5s) plus StreamReader limit=8KiB close the slowloris path. Snapshot is
cached for 1 s under an asyncio.Lock so a probe storm does not
trigger a SCAN every request.
Stats / telemetry — det_rules JSON parse capped at 64 KiB per
row to bound CPU on a corrupted audit log.
Batch JSON-RPC handling — when any member of a batch blocks,
the proxy now emits a per-id reply array (one response per request
id), not a 1-element substitute. Benign s2c siblings forwarded
verbatim; benign c2s siblings get a synthesised -32099 batch_aborted_by_sibling error reply.
Security
ReDoS guard for community regex — mcp-firewall rules lint --strict rejects patterns that contain a nested quantifier
((a+)+, (.*x)*) and any pattern that takes more than 100 ms
on a 512-char benign probe (SIGALRM-bounded).
Batch JSON-RPC ID confusion fixed — see Changed above.
Health endpoint slowloris — hostile localhost peer can no
longer hold an event-loop slot indefinitely.
Cross-script homoglyph evasion closed — Cyrillic / Greek
look-alikes for Latin letters fold during normalisation.
Known limitations (v0.5 backlog)
HTTP/SSE transport.
Community rules repository (mcp-firewall/rules-community).
Viewer filters in mcp-firewall logs (search by rule id, by
trace id).
Anthropic Haiku fallback tier for the LLM classifier.
Full Unicode confusables.txt shipped as data — current homoglyph
table is hand-picked from published PoCs.