What's New in v2.7.2
v2.7.2 supersedes v2.7.1. Published-artifact verification found that
-Pprinted parsed hosts but continued into credential attempts. v2.7.2 restores the documented print-and-exit behavior and is the recommended v2.7 release.
New Feature: Engagement Manifests and Scope Enforcement
- Engagement manifests — YAML manifests now carry engagement identity, authorization references, scope, lockout policy, and evidence defaults
- Allow/deny scope controls — Host and CIDR allowlists plus explicit deny rules are applied before execution
- Scope-aware plans — Rejected targets appear in dry-run output with stable reasons instead of silently entering the worker queue
- Target parsing fixes — Explicit ports survive CIDR expansion, and bracketed IPv6 targets parse correctly
New Feature: Deterministic Dry-Run Planning
--dry-run— Resolves targets and credentials into deterministic JSON without performing authentication attempts--plan-out— Writes the execution plan to a file for review, approval, or CI evidence--require-plan-ack— Requires the exact reviewed plan hash before execution proceeds- Credential-bound acknowledgments — Plan hashes use keyed HMACs over resolved credential contents, generator settings, inline/combo credentials, and SSH bad-key identities; same-sized credential-list substitutions invalidate the plan
- No plaintext plan leakage — Credential bindings are authenticated digests, not raw usernames, passwords, tokens, or private keys
- Fail-closed key requirement — Acknowledged execution requires
evidence.hmac_keyin the engagement manifest
New Feature: Lockout-Aware Attempt Budgets
- Normalized account identities — Budgets follow
service|domain|useracross worker pools instead of resetting per goroutine - Policy controls —
lockout_threshold,lockout_window,safe_margin, and positivejitter_percentare supported - Shared scheduling — Attempts sleep until the observation window clears rather than exceeding the configured safe budget
- Accurate plans and progress — Planned, queued, TUI, and final totals use the same credential-mode rules
New Feature: Evidence, Proof, and Authenticated Audit
- Evidence modes —
full,redacted,hash, and reservedencryptedhandling for machine-readable credential output - Keyed secret correlation — Hash mode emits HMAC-SHA256 correlation values without printing the secret
- Proof metadata — Attempts and findings carry confidence, proof type, and proof detail
- Authenticated audit chains — Audit events are chained with HMAC-SHA256 instead of a recomputable plain hash
- Fail-closed verification —
brutespray audit verifyrequiresBRUTESPRAY_AUDIT_HMAC_KEY; missing or incorrect keys fail verification - Sensitive artifact permissions — Checkpoints, session logs, stores, and audit artifacts use owner-only permissions
New Feature: Workspace and Operator Commands
- JSONL workspace store — Durable engagement records provide a stable baseline without requiring CGO or an external database
- Workspace management — New workspace command paths support initialization and inspection of engagement state
- Audit utilities — Audit verification is available as a first-class subcommand
- CI exit policy — CI-oriented execution has defined fail-closed exit behavior for policy and finding outcomes
- Machine-first output — Plans, evidence, proofs, and workspace records remain deterministic and scriptable
New Feature: Safe Auth Templates and Pre-Auth Probes
- Declarative HTTP auth templates — YAML templates describe HTTP/API authentication flows without enabling arbitrary shell execution
- Template validation — Invalid or unsafe template structures fail before network execution
- Pre-auth probe registry — SSH bad-key and RDP reconnaissance paths use a shared probe seam
- Wrapper remains gated — Arbitrary wrapper commands still require explicit
--allow-wrapper
Service Metadata and Credential Routing
- Canonical service descriptors — Default ports, aliases, credential modes, routing support, module parameters, stability, and wordlist aliases now come from one registry
- Descriptor-driven help — Module help and parser lookups derive from the same metadata used by dispatch
- Token-aware execution — InfluxDB v2 tokens are attempted once per token, without multiplication across default usernames
- InfluxDB v1 compatibility —
-m mode:v1preserves normal username/password pair generation - Registry parity tests — Registered protocol modules, descriptors, parser aliases, and wordlist coverage are checked together
TUI and HTTP Authentication Polish
- Findings visibility — The TUI continues to surface pre-auth findings alongside credential results
- HTTP auth behavior — Basic, Digest, NTLM, and automatic detection paths received compatibility and UX fixes
- Credential accounting — Inline credentials and password-only/token services now produce consistent plan, TUI, and runtime totals
- Operator help — Dry-run, engagement, plan acknowledgment, and module metadata options are included in grouped help output
Wordlist Reliability
- Monthly update repair — The automated wordlist refresh workflow was repaired and hardened
- Credential-only validation — Non-credential descriptor content is rejected from generated credential lists
- Password-only routing — Inline and embedded values are preserved correctly for password-only services
- Manifest consistency — Service metadata, aliases, and embedded wordlist resolution remain parity-tested
Repository Star History
- Exact live count badge — The README count is backed by GitHub's
stargazers_count - Rendered history restored — Light, dark, and PNG charts are committed into the repository so README rendering no longer depends on the broken public Star History endpoint
- Automatic refresh — A commit-pinned GitHub Action refreshes the chart daily and when new stars arrive
- No long-lived third-party write token — Refreshes use the short-lived repository Actions token inside GitHub
v2.7.2 Safety Fix: -P Now Exits
- Documented behavior restored —
-Pprints parsed, scope-filtered hosts and exits - No runtime side effects — The return occurs before connection-manager, proxy, output, checkpoint, session-log, signal, worker, TUI, or credential-attempt setup
- TUI and legacy parity — The behavior is handled in the shared
Executepath rather than the legacy renderer only - Regression coverage — A subprocess test proves no credential-attempt output occurs after host listing
Security
- Plan acknowledgments bind credential contents with an engagement HMAC key
- SSH bad-key username and PEM identities are included without exposing private-key material
- Audit chains require keyed authentication and reject missing/different keys
- Shareable machine output can redact or HMAC credential material
- Sensitive files remain owner-readable only
- Wrapper execution remains opt-in
- govulncheck and dependency-review gates are clean
Dependency Updates
golang.org/x/netv0.57.0 → v0.58.0golang.org/x/cryptov0.54.0 → v0.55.0golang.org/x/text→ v0.41.0github.com/jlaffaye/ftpv0.2.1 → v0.2.2github.com/charmbracelet/x/ansiv0.11.6 → v0.11.8github.com/go-ldap/ldap/v3v3.4.13 → v3.4.14github.com/gosnmp/gosnmpv1.43.2 → v1.44.0actions/checkoutv7.0.0 → v7.0.1actions/setup-gov6.5.0 → v7.0.0docker/login-actionv4.3.0 → v4.6.0docker/setup-buildx-actionv4.1.0 → v4.3.0- Additional pinned Docker, metadata, and GoReleaser action updates
CI / Tooling
- The lint workflow now uses the Go version declared by
go.modinstead of the movingstablealias - GitHub Actions remain commit-SHA pinned at the repository workflow boundary
- Unit, race, integration, lint, govulncheck, and dependency-review gates run on release PRs
- GoReleaser cross-platform snapshots and tagged builds cover Linux, macOS, and Windows on amd64, arm64, armv7, and 386 where supported
Upgrade Notes
- Use v2.7.2, not v2.7.1
--require-plan-ackrequires an engagement manifest withevidence.hmac_keybrutespray audit verifyrequiresBRUTESPRAY_AUDIT_HMAC_KEY- InfluxDB v2 remains token mode by default; use
-m mode:v1for username/password authentication -Pis now a strict print-and-exit operation
Release Verification
go build ./...go vet ./...golangci-lint run ./...— 0 issuesgo test ./... -count=1 -race -v— 5 packages passed, 3 packages with no tests, 3 intentional skips- GitHub unit, integration, lint, govulncheck, and dependency-review checks passed
- Independent release and patch reviews reported no remaining blockers
- GoReleaser published nine platform archives plus
checksums.txt - The published macOS arm64 archive matched its release SHA-256 digest
- The extracted published binary reported
Brutespray v2.7.2 - Published-binary
-Psmoke printed the host table and exited without credential attempts
Full Changelog: v2.6.3...v2.7.2