Hi all,

I've been building a set of security scanning tools in Rust, and the code is public under Apache-2.0:

There are five engines, each its own binary:

  • voyage finds subdomains, from passive sources and wordlist brute-forcing
  • doorward scans hosts and ports, with service detection
  • ambulo fuzzes paths and parameters to discover content
  • toolmark fingerprints services and flags CVE leads by version
  • plessor runs nuclei-compatible templates and checks each finding again before it reports it

The parts that might interest people here:

  • It's one workspace, and the engines share crates: tui (the ratatui dashboard they all draw), finding (one type every engine reports in), transport (the HTTP client), and scope (what a run may touch, plus a guard that refuses everything else).
  • Each engine runs as a daemon on loopback, and the command you type is a client of it. Scan state lives in Postgres through sqlx rather than in the process, which is how a stopped scan picks up where it left off.
  • In a terminal you get the dashboard. Piped, every engine writes newline-delimited JSON, one event per line, so it chains with jq.
  • cfx-script embeds Python with PyO3, which made macOS the awkward platform: the python3 that comes with Xcode is 3.9, and the build needs 3.10 or later.
  • It runs on Linux, macOS and Windows. The Windows port was mostly service management and paths. The engines compiled almost as they were.

A source build needs Docker for the Postgres container, then cargo build --release on Rust 1.88. The README has the steps.

To be upfront about the model: the source build and the binaries on the Releases page are fully open. The installer ships a build that adds a few closed parts, and the README lists them.

If you're looking for a small first contribution, four issues are labelled "good first issue". They range from a hostname-matching bug in two passive sources to shell completions with clap_complete.

I'd like feedback on the workspace layout and the daemon/client split, or on anything that looks off.

1 post - 1 participant

Read full topic