We take the security of NoID Privacy for Linux seriously. If you discover a security vulnerability, please follow responsible disclosure practices.
DO NOT create a public GitHub issue for security vulnerabilities.
Instead, please report security issues via one of these methods:
-
GitHub Security Advisory (Preferred)
- Go to: https://github.com/NexusOne23/noid-privacy-linux/security/advisories
- Click "Report a vulnerability"
- Fill out the private security advisory form
-
GitHub Discussions (Alternative)
- Create a new discussion in the Security category
- Mark it as "Private" if possible
- Provide full details
When reporting a vulnerability, please include:
- Description: Clear description of the vulnerability
- Impact: What can an attacker achieve?
- Affected Versions: Which versions are affected?
- Steps to Reproduce: Detailed reproduction steps
- Proof of Concept: PoC code if applicable (optional)
- Suggested Fix: If you have one (optional)
| Severity | Acknowledgement | Fix Target | Max Resolution |
|---|---|---|---|
| Critical | 24 hours | 7 days | 14 days |
| High | 48 hours | 14 days | 30 days |
| Medium | 7 days | 30 days | 60 days |
| Low | 7 days | 60 days | 90 days |
We appreciate responsible disclosure! Contributors will be:
- Credited in the CHANGELOG (if desired)
- Listed in the Security Hall of Fame (coming soon)
NoID Privacy for Linux is designed with security in mind:
-
β Non-remediating by default: normal audit mode intentionally changes no configuration, restarts no services, and never refreshes package metadata; invoked services may still record ordinary operational logs/access metadata
-
β οΈ Explicit stateful opt-ins:NOID_RPM_BASELINE_INIT=1/NOID_RPM_BASELINE_UPDATE=1writes/var/lib/noid-privacy/rpm-baseline.txt;NOID_AIDE_LIVE=1creates a mode-600 temporary log and preserves it only for drift/errors -
β Pure Bash core: No Python, Ruby, Node.js, or compiled binaries. Uses standard Linux utilities (most pre-installed) where needed.
-
β No Telemetry or Analytics: audit results are never uploaded; the documented leak-test requests still expose normal connection metadata to their endpoints
-
β οΈ Network leak-tests run by default: Three request groups in two sections issue 3rd-party DNS/HTTP requests to detect IP/DNS leaks:- Section 5 (
vpn): ICMPping 1.1.1.1(Cloudflare) /9.9.9.9(Quad9) for connectivity, HTTP fallbackcurl cp.cloudflare.com/generate_204(Cloudflare); plus pings to common LAN gateway addresses (local network only) for the kill-switch test - Section 5 (
netleaks):dig whoami.akamai.net(Akamai) +curl https://ifconfig.me/ip(TLS public-IP echo service) - Section 22 (
interfaces):dig . NSβ a DNS root-server query through the configured resolver (no third-party domain)
These are inherent to leak-testing β you can't test for an IP leak without contacting an external service. For a fully offline audit, use:
sudo bash noid-privacy-linux.sh --offline # equivalent to: --skip vpn --skip interfaces --skip netleaks - Section 5 (
- β Single File: One script, easy to read and audit
- β Open Source: Every line is inspectable on GitHub
- β No Obfuscation: Plain Bash, no encoded/minified code
- β Deterministic: Same system state = same output
| Version | Supported | Notes |
|---|---|---|
| 3.7.0 | β Fully Supported | Current release β new checks: SSH PermitEmptyPasswords (F-382), SSH cipher/MAC/kex algorithm strength (F-383), system-wide crypto policy (F-384), user-home world-writable scan, /home mount hardening; Section-27 chronyc fixes (reverse-DNS stall, NTS count, dead-source detection); AIDE rebaseline-staleness gate; GitHub-Action fail-threshold alias fix; CIS-mapping + docs accuracy pass |
| 3.6.x | β Supported | ARP math fix (F-361), _plural() grammar sweep (F-362), Live-Audit Self-Review (F-350..F-360), ausearch hang-fix (F-349), capability layer, BATS suite, 11-pattern lint, CIS mapping, HSI integration |
| 3.5.x | β Supported | DE dispatcher (KDE/XFCE/MATE/Cinnamon), exit codes, signal handling, ShellCheck-clean β upgrade to 3.7.0 recommended |
| 3.4.x | Upgrade to 3.7.0 recommended | |
| 3.3.x | Upgrade to 3.7.0 recommended | |
| 3.1.x | β End of Life | Upgrade to 3.7.0 |
| 2.0.x | β End of Life | Upgrade to 3.7.0 |
| 1.x | β Not Supported | Legacy version |
Recommendation: Use v3.7.0.
-
β Review the Code (most important)
# It's one file in pure Bash β read it! less noid-privacy-linux.shThis is the only meaningful integrity check. Don't trust hashes from untrusted sources β read the code yourself.
-
β Check the Source
- Download only from the official GitHub repository
- Verify the URL:
https://github.com/NexusOne23/noid-privacy-linux - For CI/CD usage: pin to a specific version (
@v3.7.0), never@main
-
β Verify against the GitHub repository commit hash
# The script is one file in pure Bash. Verify you're getting it from # the official repo and inspect the commit history: git log --oneline noid-privacy-linux.sh | head -5 # Or check the release tag against the live GitHub view: # https://github.com/NexusOne23/noid-privacy-linux/releases
We do NOT publish SHA256 sums separately β the canonical integrity check is the GitHub commit/tag hash itself. Code review is the meaningful audit; hash-comparison from untrusted sources adds nothing.
β οΈ Requires root access (sudo) for comprehensive system checks- β Default audit mode performs no intentional remediation; the explicitly documented baseline/AIDE opt-ins create audit-state files, while invoked daemons may maintain normal operational logs
- β All checks use standard Linux utilities (sysctl, ss, systemctl, etc.)
- β
Review the findings and fix issues manually or with AI assistance (
--ai) - β Re-run periodically to verify your hardening holds
β οΈ Review/redact reports before sharing: output can include hostname, usernames, paths, installed software, and security findings
β οΈ The script requiressudoto read certain system files (e.g.,/etc/shadowpermissions, firewall rules)- β Root access is used for reading in default mode; only the explicitly selected RPM-baseline/AIDE-live features write audit state
- β
The most reliable verification is human review: the script is one file
in plain Bash. Open it in
lessand check what it does.
β οΈ The audit output contains details about your system's security postureβ οΈ Finding text can originate in untrusted filenames/configuration; control bytes are escaped and the AI prompt explicitly marks findings as data, but users must still review generated remediation- β Do not share raw output publicly if it reveals sensitive configuration
- β
The
--jsonoutput is designed for automated processing, not public sharing
- ShellCheck: clean at
--severity=style(the strictest level) β see.shellcheckrcfor the project-wide rationale on SC2059 (color-format strings) and SC2329 (callback dispatch / signal traps). The CI gate enforces--severity=warning. - API-Layer Lint:
scripts/lint-api-usage.shenforces 11 anti-regression patterns covering bug classes β direct firewalld API bypassing capability layer,systemctl is-masked(non-existent verb),grep -ron symlinked dirs, barepass()/fail()/warn()/info()reintroductions,chage -lwithoutLC_ALL=C, hardcoded VPN-iface regex,df -T NR==2wrap-vulnerable patterns,fwupdmgr/bluetoothctlwithoutLC_ALL=C,((var<op>))arithmetic-command counters that bomb underset -e(Pattern 9, all++/--/+=/-=/*=//=/%=forms),systemd-analyze/virsh/resolvectl/freewithoutLC_ALL=C(Pattern 10,free -flagforms covered), and unanchoredgrep nameserveron resolv.conf (Pattern 11, catches commented entries reported as active DNS servers). - BATS unit tests:
tests/unit/covers the bug-pattern classes viabatsrunner againsttests/fixtures/. - bash -n: Syntax validation in CI across Ubuntu 22.04/24.04,
Fedora 42/43/44, Debian 12, and Arch Linux (7-distro matrix).
Plus a real audit-smoke test job that runs the audit on Ubuntu with
--offlineand validates JSON output parses. - Audit-Locale Matrix: runs the audit under
en_US,fr_FR,es_ESlocales to catch the locale-bug class (chage/fwupdmgr/bluetoothctltranslatable labels). - Manual Review: Every PR is reviewed for security implications.
Run checks yourself:
# Syntax check
bash -n noid-privacy-linux.sh
# ShellCheck (if installed)
shellcheck noid-privacy-linux.sh
# API-layer lint
bash scripts/lint-api-usage.sh noid-privacy-linux.sh
# BATS unit tests
bats tests/unit/No security vulnerabilities reported to date.
- NoID Privacy β Windows 11 Security & Privacy Hardening Framework (sister project)
- License: GNU General Public License v3.0
- Disclaimer: Use at your own risk. No warranties provided.
- Audit-Only: Default mode does not modify system configuration; explicit baseline/AIDE-live opt-ins write only their documented audit-state files.
For licensing questions, see LICENSE or open a Discussion.
Last Updated: July 11, 2026 Policy Version: 1.7.0