Report privately via GitHub Security Advisories (the repo's Security tab) or the Strix Advanced Tools maintainer contacts — not a public issue.
Sentinel is a read-only, offline monitor on both platforms. It:
- makes no network connection of its own — the network guard only pings the local subnet and reads the neighbor table when you explicitly run it;
- spawns no shell — every system tool (
schtasks/wevtutil/ping/arpon Windows,ip/systemctl/journalctl/crontab/pingon Linux) is invoked with a fixed argument list; - uses no dynamic code — no
eval/exec/pickle; - writes only to its own config dir (
%APPDATA%\SentinelMonitor/~/.config/SentinelMonitor), atomically, and validates JSON on load.
- Windows: only the Login audit reads the Security event log, which needs Administrator. The app never self-elevates; it shows a notice and degrades.
- Linux: only the login audit needs read access to system logs (run with
sudo). All other checks run as a normal user.
- Fail-closed tool resolution. System tools are resolved to absolute paths in
trusted directories (Windows
System32; Linux/usr/bin,/bin,/sbin,/usr/sbin). If the expected binary is missing, the call fails closed rather than falling back to a bare-name%PATH%/$PATHlookup that a hijacked path could exploit. - Private-range scanning only. The network guard restricts sweeps to RFC-1918
ranges (
10./192.168./172.16-31.) and only runs on demand. - Pure, tested parsers. The Linux log/table parsers (
parse_auth_log,parse_ip_neigh,parse_ip_addr,parse_desktop_entry, …) are pure functions with unit tests (tests/test_linux_parsers.py) — they never execute their input.
Nothing leaves your machine. Baselines and trusted-device lists are stored locally in your config directory and contain only what you approve.