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, use GitHub's private vulnerability-reporting flow:
- 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
If the private form is unavailable, do not place exploit details in an Issue or Discussion. Open a minimal public issue asking the maintainers to enable a private reporting channel, without describing the vulnerability.
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)
These are maintainer targets, not a contractual SLA. Coordinated disclosure timing is agreed with the reporter and can vary with reproducibility, upstream coordination, and release safety.
| 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 |
Reporters are credited in the CHANGELOG when they consent.
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; the NoID-image- only--refresh-noid-rpm-policyrewrites its documented trusted-state policy -
β Pure Bash audit: no language-package dependency tree or bundled binary; it capability-detects common compiled operating-system utilities 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: Active probes are grouped under two skip flags:- Section 5 (
netleaks): ICMPping 1.1.1.1(Cloudflare) /9.9.9.9(Quad9) for connectivity, HTTP fallbackcurl cp.cloudflare.com/generate_204(Cloudflare),dig whoami.akamai.net(Akamai), andcurl https://ifconfig.me/ip(TLS public-IP echo service). With a confirmed active VPN, the flag also guards short pings to learned/common LAN gateways for an optional isolation observation; those packets stay local or VPN-routed. Reachability is INFO because intentional local-device access is a valid VPN policy. - Section 22 (
interfaces):dig . NSβ a DNS root-server query through the configured resolver (no third-party domain)
These are inherent to leak-testing. To suppress the audit's outbound probes, use:
sudo bash noid-privacy-linux.sh --offline # equivalent to: --skip interfaces --skip netleaksLocal VPN configuration remains assessed; no VPN is a valid posture rather than a warning by itself. Traffic from other software on the host is outside the audit's control.
- Section 5 (
- β Single downloadable audit: The executable audit is one script; the repository also contains its Action wrapper, tests, helpers, and documentation
- β Open Source: Every line is inspectable on GitHub
- β No Obfuscation: Plain Bash, no encoded/minified code
β οΈ Time-dependent evidence is explicit: update caches, logs, active processes, network probes, and timeouts can legitimately change between runs
| Version line | Security fixes | Notes |
|---|---|---|
| 3.7.x | Current | Update to the newest 3.7.x patch release |
| 3.6.x and older | Ended | No maintained backport branch; upgrade before reporting |
Distribution/desktop validation is a separate question documented in Docs/SUPPORT.md.
-
β Review the Code
# It's one file in pure Bash β read it! less noid-privacy-linux.shCode review helps establish behavior; it does not by itself establish that the downloaded bytes came from the intended release.
-
β 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 the Action to the reviewed release commit SHA; a
release tag is preferable to
@mainbut is not immutable in Git itself
-
β Verify provenance against a trusted reference
# 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 # Compare the checked-out commit with the intended release page: # https://github.com/NexusOne23/noid-privacy-linux/releases
A commit hash or checksum is useful only when the expected value came from a trusted channel. Review the release history and the exact bytes you execute; do not treat a hash copied from the same untrusted download location as independent provenance.
β οΈ 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
- β Combine provenance verification with review of the one-file audit. Neither a trusted hash nor source review alone answers both origin and behavior.
β οΈ 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 the same--severity=stylelevel. - 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-only container validation spans the maintained package
families. CI may include extra base images beyond the release-supported
desktop lines in
Docs/SUPPORT.md; those parser checks are explicitly not desktop validation or additional support claims. - Action smoke: one real Ubuntu runner audit exercises the local composite Action, its exit-code handling, full JSON consistency checks, score/coverage recomputation, and outputs.
- 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: Review every PR for security implications before merge.
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
# Compliance mapping IDs, profiles, qualities, duplicates, and denominators
bash scripts/coverage-report.sh
# BATS unit tests
bats tests/unit/- NoID Privacy β Windows 11 Security & Privacy Hardening Framework (sister project)
- NoID Privacy Workstation 44 β hardened Fedora 44 / GNOME 50 privacy workstation
- NoID Privacy for Android β current Google Play listing
- License: GNU General Public License v3.0 or later
- 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 19, 2026
Policy Version: 1.8.0