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
Error swallowing on backup copy failure now logged
Error swallowing on file read error now logged - was silently losing all
global options
set() validates key length (1-256), value length (max 4096), and entry cap
(1024); returns false on rejection
MCP handle_set_option now checks set() return and reports errors
try_get write-contention - retries up to 50ms instead of silently returning
None on a briefly-held write lock
File target hardcoded concurrency (50) now reads from global options like
other scan paths
Semaphore drain refactor:
3 sites in commands/mod.rs and 3 sites in utils/bruteforce.rs refactored -
sequential acquire loop replaced with sem.acquire_many() - single syscall
with diagnostic message on failure
Error silence elimination:
loot.rs - atomic rename silently ignored -> now logged
port_scanner.rs - probe never sent, false negatives -> explicitly handled
ssh_scanner.rs - socket timeout setup failures ignored -> now skips to next
address
jobs.rs - poisoned RwLock recovered instead of returning empty data
mcp/client.rs - shutdown timeout and kill errors logged; early return on
clean exit
Firmware Revision (0x2A26) - reads firmware version for fingerprinting
Additional Data (0xFE2C1237) - reads personalized device name data
FMDN Service (0xFD44) - detects Find My Device Network capability
Expanded device database (18 -> 51 devices):
33 new entries: Google Pixel Buds, Sony WF/WH-1000X series, JBL, Anker
Liberty 4 NC, Jabra Elite 2, Bose QC35 II, Beats Studio Buds, Razer
Hammerhead TWS X, LG HBS, Technics EAH-AZ60M2, B&O Beoplay series
REPL interface (TUI removed):
crossterm + ratatui removed; replaced with rustyline REPL
sshpwn_session.rs CRITICAL Command injection via unsanitized cd directory
-> shell-escape with single quotes
ssh_bruteforce.rs HIGH Panic on empty DNS iterator
-> .ok_or_else() returning proper I/O error
sshpwn_session.rs HIGH Unused timeout parameter causing indefinite
blocking -> implemented via sess.set_timeout()
ftp_bruteforce.rs MEDIUM FTP connection leak on FTPS fallback
-> added ftp.quit().await before fallback
ssh/ftp/rdp (3 files) HIGH Credential files world-readable (0644)
-> OpenOptions with mode(0o600)
Spool security:
O_NOFOLLOW flag added to prevent TOCTOU symlink race
Lock-first pattern before file creation
Parent directory symlink check
write_line() returns Result with flush after every write
DoS Module Overhaul - Shared Socket Pools, sendmmsg, Pre-flight Tests
Feature/bugfix release - All raw-socket DoS modules rewritten.
Root cause of previous issues:
1000 workers x individual socket per worker -> hit default ulimit 1024
Error handler only checked EPERM; all other send errors dropped silently
null_syn_exhaustion advertised sendmmsg but called individual send_to
S1 ping_sweep.rs CRITICAL /0 CIDR OOM -> networks >1M rejected;
.take(limit) safety net added
S2 api_endpoint_scanner.rs LOW Duplicate HTTP methods -> removed
S3 dns_recursion.rs MEDIUM Hardcoded DNS timeout -> configurable
S4 http_title_scanner.rs MEDIUM Full body buffered before truncation
-> bytes_stream() at 256 KB
S5 http_method_scanner.rs LOW Response body never dropped -> explicit
drop(resp) added
S6 port_scanner/ping_sweep MEDIUM Port 0 accepted -> skipped with warning;
source port range changed to 1-65535
S8 subdomain_scanner.rs MEDIUM 1 random test for wildcard -> 3 random,
marks wildcard if >=2 resolve same IP
S11 redis_scanner.rs LOW Silent truncation on large INFO responses
-> logs message when 8 KB buffer full
Additional security fixes:
sshpwn_sftp_attacks.rs - SFTP read capped to 10 MB via Read::take()
mongo/mongobleed.rs - zlib decompression capped to 64 MB via Read::take()
TOCTOU file permissions:
cred_store.rs, loot.rs, global_options.rs, pq_channel.rs - files now created
with 0o600 atomically via OpenOptions::mode()
Capacity overflow prevention:
native/hex.rs, native/payload_engine.rs, utils/sanitize.rs - saturating_mul
used in all capacity calculations
Exploit Module Audit - Phases A & B Complete, 181 Modules Reviewed
commands/mod.rs - is_huge_subnet logic removed; all CIDR subnets now
iterate fully via lazy network.iter()
creds/utils.rs - bail! blocking subnet bruteforce >1M hosts removed;
replaced with a warning
New configurable options:
setg concurrency 200 controls parallel tasks (default 50)
setg max_random_hosts N caps random internet scans only
setg module_timeout 60 per-task module timeout
Adaptive progress reporting:
10M hosts : every 10,000 hosts
100K hosts : every 1,000 hosts
1K hosts : every 100 hosts
<1K hosts : every 50 hosts
Shows: [*] Progress: 50000/16777216 hosts (0.3%) | 12 ok | 3 err
BREAKING: TLS and Bearer token API authentication completely replaced by a
post-quantum hybrid scheme. Existing integrations must migrate to PQ identity
keys.
BREAKING: Module authors using raw println! must migrate to mprintln!.
Architectural changes:
Global mutable state (4 stores using std::sync::RwLock)
-> Migrated to tokio::sync::RwLock. File I/O no longer blocks runtime.
RunContext extended with per-request target + output accumulator.
stdout-capture via gag crate
-> gag removed. New src/output.rs with task-local OutputBuffer.
4683 println!/eprintln!/print! calls replaced with crate::mprintln!
API semaphore raised from 1 to num_cpus. Concurrent execution works.
No structured output
-> ModuleOutput, Finding, Severity, OutputAccumulator types added.
API returns findings array in JSON.
No structured logging
-> tracing::info! added to API dispatch and command resolution.
Async Prompt System - All 132+ Modules Now Tokio-Safe
Refactor release - Blocking stdin on async runtime eliminated.
Core change:
src/utils/prompt.rs - read_safe_input() now uses tokio::task::spawn_blocking()
to run stdin().read_line() on a dedicated OS thread
All 7 prompt functions are now async fn
All 8 config-aware wrappers are now async fn
Scale of changes:
132+ module files had .await added to prompt calls
30 helper functions made async
4 bruteforce modules fixed for .await inside sync closures
MutexGuard-across-await issue in smtp_user_enum.rs fixed
Universal Target Support - CIDR, Multi-Target & Source Port Binding
Feature release - Every module now supports subnet and multi-target without
any per-module changes.
Target type support:
Single IP/host 192.168.1.1 Direct dispatch
CIDR subnet 10.0.0.0/24 Expand to IPs, 50 concurrent
Comma-separated 10.0.0.1,192.168.1.1 Split, dispatch each
File target list /tmp/targets.txt Read from file, 50 concurrent
Random mass scan random / 0.0.0.0 Generate random public IPs
Source port binding:
tcp_connect() Async TCP with source port ~64 modules
tcp_port_open() Async TCP port check ~79 mass-scan
blocking_tcp_connect() Blocking TCP ~22 SSH modules
udp_bind() Async UDP ~5 UDP modules
Scanner fixes (5):
ipmi_enum_exploit.rs HIGH Integer overflow in packet length
-> saturating_sub + bounds validation
port_scanner.rs MEDIUM Double file write for same result
-> deduplicated write logic
sequential_fuzzer.rs HIGH char as u8 truncates non-ASCII
-> as_bytes() for hex/octal
ssh_scanner.rs MEDIUM Silent CIDR truncation at 65536 hosts
-> warning message added
port_scanner.rs LOW Unused show_only_open parameter
-> prefixed with _
Credential module fixes (6):
ssh_user_enum.rs HIGH Blocking connect in async context
-> wrapped in spawn_blocking
pop3_bruteforce.rs HIGH Modulo by zero on empty lists
-> empty-list guard with bail!
mqtt_bruteforce.rs HIGH Same modulo-by-zero -> guard added
smtp_bruteforce.rs HIGH Same -> guard added
l2tp_bruteforce.rs HIGH Same -> guard added
fortinet_bruteforce.rs HIGH Same -> guard added
Build status: Zero errors, zero code warnings after all fixes.
Security audit - Patches critical path traversal, command injection, and data
corruption vulnerabilities.
Critical security fixes:
src/spool.rs CRITICAL Path traversal - only ".." was blocked;
absolute paths allowed -> reject absolute
paths, validate symlinks, flush writes
src/loot.rs CRITICAL Path traversal via loot_type in filename
-> sanitize to alphanumeric only; 100 MB
size limit
src/loot.rs HIGH file_path() exposed raw path joining
-> validate no /, , .., null bytes
src/cred_store.rs HIGH Silent data corruption on JSON parse failure
-> backup corrupted file, log warning
src/cred_store.rs HIGH No input validation on credential fields
-> MAX_FIELD_LEN (4096), reject empty host
src/global_options.rs HIGH Silent data corruption on JSON parse failure
-> backup, log warning
src/workspace.rs HIGH Silent data corruption on JSON parse failure
-> backup, log warning
src/workspace.rs HIGH Lock held during file I/O
-> clone data before I/O, release lock first
src/workspace.rs MEDIUM No input validation on add_host
-> validate IP length and control chars
src/export.rs HIGH CSV injection via formula prefix characters
-> prefix =, +, @, - with ' in CSV output
src/export.rs HIGH No path validation on export files
-> added validate_export_path()
src/jobs.rs MEDIUM Memory leak - finished jobs never cleaned
-> auto-cleanup on list() call
Command injection fixes (exploit modules):
n8n_rce_cve_2025_68613.rs CRITICAL Only '"' escaped before execSync()
-> escape_js_command(cmd, true)
react2shell.rs HIGH Weak js_encode() missing shell chars
-> crate::utils::escape_js_command
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
RustSploit - Release 0.4.9
Penetration testing framework written in Rust
239 modules | MIT License | For authorized security testing only
(latest) - All 32 Module Socket Warnings Fixed, Dependency Upgrades,
hex.rs Vendored Native Lib
Maintenance release - 0 warnings, dependency bumps, native hex decode, cred
module improvements.
Build status: 0 errors, 0 warnings - verified by cargo check and cargo run.
Dependency upgrades:
colored 3.0 -> 3.1
clap 4.5 -> 4.6
tokio 1.49 -> 1.51
uuid 1.19 -> 1.23
rand 0.9 -> 0.10 (RngExt migration)
rlimit 0.10 -> 0.11
btleplug 0.11 -> 0.12
tokio-tungstenite 0.28 -> 0.29
hyper-util 0.1 (tokio) -> 0.1 (tokio, service)
Fixes:
trait mismatch that broke TLS accept loop
random_range(), fill() moved to RngExt trait)
crate::native::hex::decode instead of external hex crate
mprintln_block! for atomic output - zero remaining unguarded banner sites
coverage), 0 raw prompt_* calls remaining, 0 File::create without 0o600
Build dispatch:
(with info/check), 1 plugin module - all auto-discovered at compile time
Silence Elimination
Security release - GlobalOptions audit, drain barrier refactor, concurrent
SSH/RDP/SSH fixes, spool TOCTOU.
GlobalOptions audit (6 findings fixed):
global options
(1024); returns false on rejection
None on a briefly-held write lock
other scan paths
Semaphore drain refactor:
sequential acquire loop replaced with sem.acquire_many() - single syscall
with diagnostic message on failure
Error silence elimination:
address
clean exit
logged
SSH / FTP / RDP cred module fixes:
sess.set_timeout() so handshake/auth can't hang a blocking thread forever
avoid OOM on huge cross products
instead of Relaxed for consistent stats
Release - aws-lc-sys removed, ring crypto backend, docs fully updated.
Module counts: 183 exploits | 27 scanners | 29 creds | 239 total
Dependency change - ring replaces aws-lc-rs:
in ~15s; clean build significantly faster
Documentation updates (11 files):
Other fixes:
grouping in module list
Feature/security release - New DoS module, IAC SB boundary fixes, buffer cap
on subnegotiation.
New: telnet_iac_flood.rs
payloads
IAC parser safety fixes:
REPL Interface
Feature release - ML-KEM pairing attacks, 51 device database, 6 KBP
strategies, TUI -> REPL migration.
New exploit capabilities:
Authorization, Insufficient Encryption, Application Error
New GATT capabilities:
Expanded device database (18 -> 51 devices):
Liberty 4 NC, Jabra Elite 2, Bose QC35 II, Beats Studio Buds, Razer
Hammerhead TWS X, LG HBS, Technics EAH-AZ60M2, B&O Beoplay series
REPL interface (TUI removed):
listen, record, talk, stop, quit, help
Permissions
Security/bugfix release.
sshpwn_session.rs CRITICAL Command injection via unsanitized cd directory
-> shell-escape with single quotes
ssh_bruteforce.rs HIGH Panic on empty DNS iterator
-> .ok_or_else() returning proper I/O error
sshpwn_session.rs HIGH Unused timeout parameter causing indefinite
blocking -> implemented via sess.set_timeout()
ftp_bruteforce.rs MEDIUM FTP connection leak on FTPS fallback
-> added ftp.quit().await before fallback
ssh/ftp/rdp (3 files) HIGH Credential files world-readable (0644)
-> OpenOptions with mode(0o600)
Spool security:
Feature/bugfix release - All raw-socket DoS modules rewritten.
Root cause of previous issues:
Fixes applied to all 8 modules:
consecutive-error circuit breaker
Modules fixed:
null_syn_exhaustion, dns_amplification, memcached_amplification,
ntp_amplification, ssdp_amplification, syn_ack_flood, icmp_flood, udp_flood
Performance (null_syn_exhaustion):
Bugfix release - 10 scanner module fixes.
S1 ping_sweep.rs CRITICAL /0 CIDR OOM -> networks >1M rejected;
.take(limit) safety net added
S2 api_endpoint_scanner.rs LOW Duplicate HTTP methods -> removed
S3 dns_recursion.rs MEDIUM Hardcoded DNS timeout -> configurable
S4 http_title_scanner.rs MEDIUM Full body buffered before truncation
-> bytes_stream() at 256 KB
S5 http_method_scanner.rs LOW Response body never dropped -> explicit
drop(resp) added
S6 port_scanner/ping_sweep MEDIUM Port 0 accepted -> skipped with warning;
source port range changed to 1-65535
S8 subdomain_scanner.rs MEDIUM 1 random test for wildcard -> 3 random,
marks wildcard if >=2 resolve same IP
S11 redis_scanner.rs LOW Silent truncation on large INFO responses
-> logs message when 8 KB buffer full
Additional security fixes:
TOCTOU file permissions:
with 0o600 atomically via OpenOptions::mode()
Capacity overflow prevention:
used in all capacity calculations
Major maintenance - thread::sleep migration, references populated, privilege
helper, HTTP client unification.
Phase A - Mechanical bulk fixes:
blocking ssh2 sessions wrapped in spawn_blocking
modules now gate at top of run() with clean error instead of crash
Phase B - Utility reuse migrations:
multiple module categories
build_http_client_with()
Build system:
DNS
Security release.
Fix 1 - is_blocked_ip with complete coverage:
Fix 2 - URL parsing bypass hardening:
Fix 3 - Fail-closed on DNS error:
Major feature - MCP protocol server, WebSocket JSON-RPC API, 27 total
endpoints, module metadata via all interfaces.
New: MCP server (src/mcp/):
corrupting the JSON-RPC stream
SSRF checks
Shell/API parity - 15 commands added to WebSocket API:
info [module] Returns module metadata as JSON
check Runs non-destructive vuln check, returns CheckResult
setg / unsetg Sets/removes global options
creds add/search/delete/clear
hosts / services / notes
workspace
loot add/search
export fmt file
jobs -k id / clean
Bug fixes:
Feature release - Banner suppression, single-prompt-per-scan, per-task module
timeout, mprintln_block! macro.
Mass scan improvements:
no more interleaved banners across 50 concurrent tasks
first task prompts, rest use cached answer
New: mprintln_block! macro:
concurrent tasks
BatchGuard race condition fix:
now work correctly
EXCLUDED_RANGES Dedup
Refactor release.
Module migration:
all 24 public items
crate::utils::
Streaming wordlist support:
cross product in memory
EXCLUDED_RANGES deduplication:
Engine bug fixes:
spin-wait before attempting login
retryable protocol error
Channel Deadlock
Security/bugfix release.
Critical fixes (8):
flag
of push
save_to_file() after each chunk
stop_early flag added
High fixes (7):
channel + single writer task
Additional fixes:
Fingerprinting
Feature release - 55 default credentials, device-type fingerprinting,
multi-port parallel scanning.
Protocol improvements:
New: verify_shell
from verbose banners
New: classify_response + AuthSignal enum
New: lockout and EOF detection
blocked", "please wait", "banned", "rate limit"
Device fingerprinting (15 device types):
TP-Link, Netgear, BusyBox, Raspberry Pi, Dell iDRAC, HP printers
Data expansion:
Code quality release.
Rust - 15 fixes across 7 files:
pq_channel.rs (3) .expect("HKDF expand") -> anyhow::Result + ?
pq_middleware.rs (4) .unwrap() on headers -> .map_err StatusCode?
api.rs (6) .parse().unwrap() -> HeaderValue::from_static()
telnet_bruteforce.rs .unwrap() on file path -> .ok_or_else()?
shell.rs .expect("valid history size") -> .context()?
payload_engine.rs (2) .expect("Charset empty") -> if let / .unwrap_or
config.rs Regex recompiled every call -> once_cell::Lazy
Final state:
Bugfix release - Core network utilities, RDP BER encoding, 30+ bare TCP
connect sites.
Core utilities (src/utils/network.rs):
RDP native (src/native/rdp.rs):
truncating lengths >65535
TCP timeout fixes (10 locations across 8 files):
Buffer and client fixes:
Feature release - All modules discoverable, shell/API/MCP parity, credential
wiring.
Stats: 152/152 modules with info() | 15/19 creds with store_credential() |
0 raw prompt_* calls | 0 File::create without 0o600
Changes:
Feature release.
New modules:
http_basic_bruteforce HTTP Basic Auth 80/443 reqwest + Basic header
redis_bruteforce Redis 6379 Raw TCP AUTH command
imap_bruteforce IMAP/IMAPS 143/993 Raw TCP LOGIN + TLS
mysql_bruteforce MySQL 3306 Native wire protocol + SHA1
postgres_bruteforce PostgreSQL 5432 Wire protocol + MD5 auth
vnc_bruteforce VNC/RFB 5900 DES challenge-response
elasticsearch_brute Elasticsearch 9200 reqwest + Basic/API key
couchdb_bruteforce CouchDB 5984 reqwest + session/Basic auth
memcached_bruteforce Memcached 11211 Binary SASL PLAIN + open
Bug fixes in new modules:
Progress
Feature release - Hard scan caps removed, setg knobs, percentage progress.
Removed hard caps:
iterate fully via lazy network.iter()
replaced with a warning
New configurable options:
setg concurrency 200 controls parallel tasks (default 50)
setg max_random_hosts N caps random internet scans only
setg module_timeout 60 per-task module timeout
Adaptive progress reporting:
Major feature - BREAKING CHANGE - SSH-style identity keys, mutual auth,
Double Ratchet forward secrecy.
BREAKING: TLS and Bearer token API authentication completely replaced by a
post-quantum hybrid scheme. Existing integrations must migrate to PQ identity
keys.
Removed:
Added - SSH-style PQ identity keys:
on first run
New dependencies:
x25519-dalek 2.0, chacha20poly1305 0.10, hkdf 0.12, sha2 0.10, hex 0.4
Security model:
Feature release - Scanner suite expanded from 15 to 23 modules.
New scanner modules:
ssl_scanner TLS/SSL Certificate analysis, TLS version/cipher
detection, expired/self-signed flagging
redis_scanner Redis 6379 PING/INFO/CONFIG/DBSIZE, auth detection,
exploitation vector assessment
vnc_scanner VNC 5900 RFB version, security type enumeration,
unauthenticated access detection
snmp_scanner SNMP 161/UDP Manual BER/ASN.1, community string brute
(10 defaults + custom wordlist)
waf_detector HTTP/HTTPS 10 WAF signatures, confidence scoring
subdomain_scanner DNS 67 built-in subdomains + custom wordlist,
concurrent A/AAAA lookup
nbns_scanner NetBIOS 137 NBNS wildcard query, hostname/MAC extraction
Scanner bug fixes:
fingerprint; key size colored red if <2048 bits
Performance release.
null_syn_exhaustion.rs (SYN Flood):
tcp_connection_flood.rs:
cve_2023_44487_http2_rapid_reset.rs:
API
Feature release - BREAKING CHANGE - tokio RwLock migration, output capture,
structured logging.
BREAKING: Module authors using raw println! must migrate to mprintln!.
Architectural changes:
Global mutable state (4 stores using std::sync::RwLock)
-> Migrated to tokio::sync::RwLock. File I/O no longer blocks runtime.
RunContext extended with per-request target + output accumulator.
stdout-capture via gag crate
-> gag removed. New src/output.rs with task-local OutputBuffer.
4683 println!/eprintln!/print! calls replaced with crate::mprintln!
API semaphore raised from 1 to num_cpus. Concurrent execution works.
No structured output
-> ModuleOutput, Finding, Severity, OutputAccumulator types added.
API returns findings array in JSON.
No structured logging
-> tracing::info! added to API dispatch and command resolution.
Refactor release - Blocking stdin on async runtime eliminated.
Core change:
to run stdin().read_line() on a dedicated OS thread
Scale of changes:
Feature release - Every module now supports subnet and multi-target without
any per-module changes.
Target type support:
Single IP/host 192.168.1.1 Direct dispatch
CIDR subnet 10.0.0.0/24 Expand to IPs, 50 concurrent
Comma-separated 10.0.0.1,192.168.1.1 Split, dispatch each
File target list /tmp/targets.txt Read from file, 50 concurrent
Random mass scan random / 0.0.0.0 Generate random public IPs
Source port binding:
tcp_connect() Async TCP with source port ~64 modules
tcp_port_open() Async TCP port check ~79 mass-scan
blocking_tcp_connect() Blocking TCP ~22 SSH modules
udp_bind() Async UDP ~5 UDP modules
Bug fixes:
Feature release - CVEs from 2025-2026, network infra, web apps, SSH, VoIP.
Stats: 109 exploits | 19 creds | 14 scanners | 1 plugin | 148 total
Web Application exploits (10 new):
xwiki_rce CVE-2025-24893 9.8 Groovy RCE via SolrSearch
craftcms_key_rce CVE-2025-23209 8.1 Known security key RCE
Network Infrastructure exploits (6 new):
citrixbleed2 CVE-2025-5777 9.3 CitrixBleed 2 memory leak
hpe_oneview_rce CVE-2025-37164 10.0 Code injection RCE
f5_bigip_rce CVE-2025-53521 9.3 F5 BIG-IP APM RCE
sonicwall_sma_rce CVE-2025-40602 9.8 SonicWall SMA1000 RCE
ivanti_ics_rce CVE-2025-22457 9.0 Stack overflow RCE
ivanti_preauth_rce CVE-2025-0282 9.0 Pre-auth buffer overflow
Frameworks, SSH, VoIP (4 new):
tomcat_put_rce CVE-2025-24813 9.8 PUT deserialization RCE
wsus_rce CVE-2025-59287 9.8 Windows WSUS deserialization RCE
erlang_otp_ssh_rce CVE-2025-32433 10.0 SSH pre-auth RCE
freepbx_cmdi CVE-2025-64328 8.6 Command injection
All new modules include info(), check(), full utils integration, API support,
host tracking, and credential storage.
Framework fix:
filesystem scanning
Bugfix release.
Scanner fixes (5):
ipmi_enum_exploit.rs HIGH Integer overflow in packet length
-> saturating_sub + bounds validation
port_scanner.rs MEDIUM Double file write for same result
-> deduplicated write logic
sequential_fuzzer.rs HIGH char as u8 truncates non-ASCII
-> as_bytes() for hex/octal
ssh_scanner.rs MEDIUM Silent CIDR truncation at 65536 hosts
-> warning message added
port_scanner.rs LOW Unused show_only_open parameter
-> prefixed with _
Credential module fixes (6):
ssh_user_enum.rs HIGH Blocking connect in async context
-> wrapped in spawn_blocking
pop3_bruteforce.rs HIGH Modulo by zero on empty lists
-> empty-list guard with bail!
mqtt_bruteforce.rs HIGH Same modulo-by-zero -> guard added
smtp_bruteforce.rs HIGH Same -> guard added
l2tp_bruteforce.rs HIGH Same -> guard added
fortinet_bruteforce.rs HIGH Same -> guard added
Build status: Zero errors, zero code warnings after all fixes.
Security audit - Patches critical path traversal, command injection, and data
corruption vulnerabilities.
Critical security fixes:
src/spool.rs CRITICAL Path traversal - only ".." was blocked;
absolute paths allowed -> reject absolute
paths, validate symlinks, flush writes
src/loot.rs CRITICAL Path traversal via loot_type in filename
-> sanitize to alphanumeric only; 100 MB
size limit
src/loot.rs HIGH file_path() exposed raw path joining
-> validate no /, , .., null bytes
src/cred_store.rs HIGH Silent data corruption on JSON parse failure
-> backup corrupted file, log warning
src/cred_store.rs HIGH No input validation on credential fields
-> MAX_FIELD_LEN (4096), reject empty host
src/global_options.rs HIGH Silent data corruption on JSON parse failure
-> backup, log warning
src/workspace.rs HIGH Silent data corruption on JSON parse failure
-> backup, log warning
src/workspace.rs HIGH Lock held during file I/O
-> clone data before I/O, release lock first
src/workspace.rs MEDIUM No input validation on add_host
-> validate IP length and control chars
src/export.rs HIGH CSV injection via formula prefix characters
-> prefix =, +, @, - with ' in CSV output
src/export.rs HIGH No path validation on export files
-> added validate_export_path()
src/jobs.rs MEDIUM Memory leak - finished jobs never cleaned
-> auto-cleanup on list() call
Command injection fixes (exploit modules):
n8n_rce_cve_2025_68613.rs CRITICAL Only '"' escaped before execSync()
-> escape_js_command(cmd, true)
react2shell.rs HIGH Weak js_encode() missing shell chars
-> crate::utils::escape_js_command
Protocol & file safety:
Initial release.
Stats: 16 docs updated | 8 new src files | 8 modified files
New source files:
src/module_info.rs ModuleInfo / CheckResult types, display formatting
src/global_options.rs Persistent global options with JSON storage
src/cred_store.rs Credential store with CRUD + JSON persistence
src/spool.rs Console output logging to file
src/workspace.rs Host/service tracking with workspace switching
src/loot.rs Loot management with file storage
src/export.rs JSON / CSV / summary report export
src/jobs.rs Background job management with cancellation
New shell commands:
info, check, setg, unsetg, show options, creds add/search/delete/clear,
spool on/off, resource, makerc, hosts add, services add, notes, workspace,
loot add/search, export json/csv/summary, jobs -k/clean, run -j
New API endpoints:
/api/options, /api/creds, /api/hosts, /api/services, /api/workspace,
/api/loot, /api/jobs, /api/export
Build system:
dispatchers automatically
What's Changed
Full Changelog: v0.4.8...v0.4.9
This discussion was created from the release zero hero the fun begins.
Beta Was this translation helpful? Give feedback.
All reactions