smf-praxis — a governed agent,
audited at the seams
SECTION 01Executive Summary
Praxis shows unusually strong security design intent for an autonomous-agent project — a governance broker, approval queues, a durable kill-switch, path-traversal defenses and a pluggable sandbox. The residual risk concentrates at its network perimeter: an HTTP-only control plane whose authentication guards only mutating routes, unvalidated outbound egress, and several fail-open downgrades in the sandbox layer.
Priority recommendations
- Require the auth token on every API route — including reads — whenever the daemon binds beyond loopback, and ship TLS (or mandate an authenticating reverse proxy) before any non-loopback deployment.
- Add an egress guard: validate scheme (
https) and block private/loopback/link-local IP literals ingateways._post_json,fetch_urland the search backends; today a crafted webhook target is a ready-made SSRF and exfiltration channel. - Make sandbox backend selection fail-closed: a requested
ssh/dockerbackend that is unavailable or misconfigured must error, not silently downgrade tolocal. - Scrub the environment passed to local sandbox execution — the current
{**os.environ, …}hands every provider API key to any approved shell command. - Restrict
praxis.jsonto0600after the auth token is minted into it, and add failed-attempt throttling to token verification.
Scope, strengths & limitations
- Durable, store-backed kill-switch survives daemon restarts
- Cross-platform path-traversal defense in
real_tools._resolve - Upload size caps, SSE queue bounds, idempotency-receipt limits
- Non-root container (uid 10001), read-only rootfs sandbox, dropped caps
- Dashboard HTML (~6,100 lines) and 6 modules were truncated — dynamic testing of the SPA (XSS, CSP) is still required
- Mock M365 tools reviewed for risk misclassification only
SECTION 02Findings Ledger
Ranked by severity, each with file-level evidence and a concrete fix. Filter by severity, search by text, or click a heatmap cell in Section 04 to cross-filter by module and category.
SECTION 03Dependency & Supply-Chain Graph
The core installs nothing — its real attack surface is optional extras. Drag nodes, scroll to zoom, drag the canvas to pan, click a node for its constraint and risk notes. Amber-ringed nodes carry elevated supply-chain risk.
Click any node in the graph to inspect its version constraint, why it is pulled in, and any supply-chain observations.
SECTION 04Risk Heatmap
Risk concentration by module and vulnerability category. Intensity reflects the highest-severity finding mapped to that cell. Click any populated cell to jump to the matching findings; hover for detail.
SECTION 05Recommended Fixes
Minimal, drop-in patches against the reviewed sources. Red lines are removed, green lines are added. Each diff references its finding IDs.