v0.4.0
nfswolf 0.4.0
Added
shell:tree [depth]— recursively map a directory (default depth 3), always traversing hidden dot-directories (.ssh,.aws,.bash_historyare exactly what you want on a security tool).shellprompt now showsuid=<n> gid=<n>and tracks mid-sessionuid/gid/impersonatechanges.brute-handlewritability hint — reports a non-destructive read-write vs read-only signal per hit from advisory ACCESS bits (probed as uid=0 and the object's owner). It never writes to the server; a handle is not itself ro/rw — the export's flag and the credential decide.access::WRITE_BITS/access::grants_write()helpers inproto::nfs3::types.
Changed
- Grouped
--help— the nine subcommands are organised into Recon / Connect / Advanced / Utilities sections (commands are still invoked flat, e.g.nfswolf scan ...). shell: escalation-awareget—getnow follows the auto-UID escalation ladder likecat, soget /etc/shadowsucceeds where it previously failed withNFS3ERR_ACCES;treeescalates credentials to descend into root-only hidden directories.brute-handle: optional seed —--seed-handleis now optional; a barehost:/exporttarget derives the seed by mounting the export (MNTPROC_MNT), matchingescape.--seed-handle HEXstays as an explicit override and a new-e/--exportflag mirrorsescape.brute-handle: parity withescape— candidate generation now fingerprints the seed (--fs-type auto) and tries the same known-root candidates asescape(ext4 inode 2 / compound-UUID, XFS 128/64/32, BTRFS subvolumes) before the generic inode sweep. A hit is accepted onNFS3_OKorNFS3ERR_ACCES/NFS3ERR_PERM, so it finds the same rootsescapedoes (a root_squash'd root is a valid handle, no longer discarded).- Docs — reconciled the finding count (39 findings, F-1.1 through F-7.6), RFC citation format (
§), write-up severities, and CLI/command references across FINDINGS / ARCHITECTURE / README / CLAUDE; CONTRIBUTING MSRV is now 1.95.
Removed
docs/scanning-module-plan.md(the completed scan-rewrite plan); stale NLM/NSM references inconn.rs.
Binaries below are checksummed (SHA256SUMS), cosign-signed (SHA256SUMS.sig), and carry SLSA build-provenance attestations. The mount (FUSE) subcommand is in the -full (glibc) builds only — it cannot be statically linked against musl.
Full changelog: v0.3.1...v0.4.0